Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2009, 17:25   #1
8alig8
Пользователь
 
Аватар для 8alig8
 
Регистрация: 03.06.2008
Сообщений: 11
По умолчанию Переопределением обработчика события при создании MDIChild

Здравствуйте, подскажите, что я не так делаю.
Имеется MDI Form (имя - MAIN) и MDI Child (имя - FormTreeList).
На MDIChild лежит pFIBDataSetTable1.
Мне нужно создавать екземпляры формы MDIChild НО с разными обработчиками события BeforeOpen для pFIBDataSetTable1. Т.е. для
Код:
procedure pFIBDataSetTable1BeforeOpen(DataSet: TDataSet);
в каждом новом экземпляре должен быть произвольный код

Я как делаю: в FormTreeList создаю класс-потомок и сразу ж пытаюсь переопределить событые.
Код:
Unit MAIN;
interface
....
type
  TCAListcl = class(TFormTreeList)
    procedure pFIBDataSetTable1BeforeOpen(DataSet: TDataSet);
  private

  public

  end;
...
implementation
...
procedure TCAListcl.pFIBDataSetTable1BeforeOpen;
begin
  pFIBDataSetTable1.SelectSQL.Text := 'select * from AGENTS where TYPEAGENTID=:par1';
  pFIBDataSetTable1.ParamByName('par1').Value := pFIBDataSetTree1.FieldValues['ID'];
  edt1.Text := 'YO!!';
end;
И в этой же главной форме на кнопке делаю create для потомка.

Код:
procedure TMainForm.mnS4Click(Sender: TObject);
var
  CAList : TCAListcl;
begin
  CAList := TCAListcl.Create(Application);
  CAList.Name := 'FormCAList';
...
//тут идет код не относящийся к делу...
end;
Так вот, в созданном потомке при вызове
Код:
pFIBDataSetTable1.open;
обработчик не срабатывает, вроде он не был переопределен.
Что мне делать, чтобы правильно переопределить этот обработчик?

Минус в том, что сколько разных экземпляров мне нужно будет создавать, столько доп классов потомков также нужно создавать. Но я с этим смирюсь. Главное решить данную задачу.
8alig8 вне форума Ответить с цитированием
Старый 18.06.2009, 18:03   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Можно обойтись и без потомков.
Посмотри пример. Я программно создавал Buttons и назначал им события.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, Grids, Calendar;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);

    
    // описываем методы, которые будут событиями.
    // необходимо, чтобы совпадали типы и количество параметров
    // с тем событием которое ты хочешь перекрыть
    
    procedure MyEvent_Button1Click(Sender: TObject);
    procedure MyEvent_Button2Click(Sender: TObject);
    procedure MyEvent_Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  b: TButton;
begin
  b := TButton.Create(Application);
  b.Parent := Form1;
  b.Caption := 'button 1';
  b.Top := 10;

  // переопределение события
  b.OnClick := MyEvent_Button1Click;

  b := TButton.Create(Application);
  b.Parent := Form1;
  b.Caption := 'button 2';
  b.Top := 40;

  // переопределение события
  b.OnClick := MyEvent_Button2Click;

  b := TButton.Create(Application);
  b.Parent := Form1;
  b.Caption := 'button 3';
  b.Top := 70;
  
  // переопределение события
  b.OnClick := MyEvent_Button3Click;
end;

procedure TForm1.MyEvent_Button1Click(Sender: TObject);
begin
  ShowMessage('Button 1');
end;

procedure TForm1.MyEvent_Button2Click(Sender: TObject);
begin
  ShowMessage('Button 2');
end;

procedure TForm1.MyEvent_Button3Click(Sender: TObject);
begin
  ShowMessage('Button 3');
end;

end.
У тебя должно быть соответственно:

Код:
  procedure pFIBDataSetTable_MyEvent1_BeforeOpen(DataSet: TDataSet);
  procedure pFIBDataSetTable_MyEvent2_BeforeOpen(DataSet: TDataSet);
  ...
  procedure pFIBDataSetTable_MyEventN_BeforeOpen(DataSet: TDataSet);
И где-то в конструкторе:

Код:
  pFIBDataSetTable1.OnBeforeOpen := pFIBDataSetTable_MyEvent1_BeforeOpen;
  ...
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Последний раз редактировалось Daramant; 18.06.2009 в 18:09.
Daramant вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание обработчика события tramvajman Компоненты Delphi 8 20.10.2010 10:41
Mootools.Проблема определения события OnClick элемента списка при его динамическом создании. ilusha JavaScript, Ajax 2 25.02.2009 10:43
События при создании/открытия файла _symon Win Api 2 13.02.2009 21:19
Закраска ячейки при наступлении события liberty Microsoft Office Excel 22 23.07.2008 08:36
При создании формы! Anton Помощь студентам 4 08.08.2007 08:20