![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как методу класса присвоить процедуру?
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 - это не метод.