Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как методу класса присвоить процедуру?


Страницы:   1 2

Ega23 ©   (2004-08-30 09:36:00) 

Есть следующий код:
unit AAAA
interface
uses ....

procedure A();

implementation

procedure A();
....
end;


Как мне процедуру A присвоить, например, для Btn.OnClick?


jack128   (2004-08-30 10:16:00) [21]

Ega23 ©   (30.08.04 10:14) [9]
что мешает написать класс
TButtonClickHandlers = class
procedure Proc1;
procedure Proc2;
procedure Proc3;
....
procedure ProcN;
end;
и

> В зависимости от значения в БД, для кнопки на OnClick
> присваиваются разные реакции, описанные в этих
>
методах?


Ega23   (2004-08-30 10:14:00) [22]

Так, попробую ещё раз. форма генерится динамически, на основании скрипта в БД. Контролы создаются - см.[5]. Есть несколько процедур:
procedure Proc1;
procedure Proc2;
procedure Proc3;
....
procedure ProcN;
В зависимости от значения в БД, для кнопки на OnClick присваиваются разные реакции, описанные в этих процедурах.


jack128   (2004-08-30 10:06:00) [23]

Ega23 ©   (30.08.04 10:03) [7]
нечего не понял. Какая разница, что присваивать метод или процедуру??

> А то, что на button не только ModalResult
причем тут модал результ? Он к OnClick не имеет никакого отнашения..


Ega23   (2004-08-30 10:03:00) [24]

и что из этого следует?

А то, что на button не только ModalResult может быть навешен. При этом описания класса данной формы нет, всё в динакмике создаётся. Вот и хочу присвоить Button.OnClick некоторую процедуру.


jack128   (2004-08-30 10:00:00) [25]

Ega23 ©   (30.08.04 9:57) [5]
Форма динамически создаётся. Что-то типа

и что из этого следует?


Ega23   (2004-08-30 09:57:00) [26]

Только зачм такой геморой, если метод можно присвоить одной строкой Button1.OnClick := SameObject.MyClickHandler ??

Форма динамически создаётся. Что-то типа:

function ShowSQLDebugMessages:Boolean;
var
aForm:TForm;

begin
Result:=False;
try
 Application.CreateForm(TForm, aForm);
 try
  With aForm do
   begin
    Caption:='SQL Transaction Log';
    BorderStyle:=bsDialog;
    Height:=500;
    Width:=750;
    Position:=poScreenCenter;
   end;
  With TMemo.Create(aForm) do
   begin
    Parent:=aForm;
    Align:=alTop;
    Height:=440;
    Clear;
    if FileExists(ExtractFilePath(Application.ExeName)+'SQLLog.log') then
     Lines.LoadFromFile(ExtractFilePath(Application.ExeName)+'SQLLog.log');
   end;
  With TButton.Create(aForm) do
   begin
    Parent:=aForm;
    Height:=25;
    Width:=100;
    Font.Size:=10;
    Top:=aForm.ClientHeight-30;
    Left:=aForm.ClientWidth-110;
    Caption:='OK';
    ModalResult:=mrOK;
   end;
  aForm.ShowModal;
 finally
  aForm.Free;
 end;
except on E:Exception do
 raise Exception.Create('ShowSQLDebugMessages '+E.Message);
end;
end;


Alx2   (2004-08-30 09:55:00) [27]

"Насильственным" приведением типов. Только не забыть параметр Self учесть еще


jack128   (2004-08-30 09:54:00) [28]

Ega23 ©   (30.08.04 9:36)
если очень надо именно ПРОЦЕДУРУ, то

procedure Proc(Self: TObject; Sender: TObject);
begin
...
end;

var
 m: TMethod;
begin
 m.Code := @Proc;
 m.Data := nil;
 Button1.OnClick := TNotifyEvent(m);
end;

Только зачм такой геморой, если метод можно присвоить одной строкой Button1.OnClick := SameObject.MyClickHandler ??


Ega23   (2004-08-30 09:51:00) [29]

TUser ©   (30.08.04 09:42) [1]

Дык в том-то и дело, что она не является методом класса. С методом все понятно, а вот как без него?


TUser   (2004-08-30 09:42:00) [30]

Лучше, чтобы А была методом к-нибудь класса, например TForm1. Тогда просто :=. Если надо именно так, то можно

var ne:TNotifyEvent;
begin
ne:=@A;
OnClick:=ne;
end;

PS. OnClick - это не метод.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо