![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сформировать свой экземпляр типа TMethod ?
>|< © (2011-03-16 12:41:00)Нужно через RTTI задать новый обработчик методу OnClick
var i:integer;
// AMethod, LoggedMethod:TMethod;
ALoggedMethod:TNotifyEvent;
ALoggedMethod := self.LoggedClick;
if GetPropInfo(Components[i],'OnClick')<>nil then
SetMethodProp(Components[i],'OnClick', ALoggedMethod);
Так не работает.
Как правильно задать ссылку на код и дату метода self.LoggedClick?
OW (2011-03-16 17:04:00) [1]
> >|< (16.03.11 14:17) [5]
> механизм которых реализован в этой ветке http://delphimaster.
> ru/cgi-bin/forum.pl?id=1300268485&n=18 ...
рекурсия, однако :)
>|< (2011-03-16 14:28:00) [2]
> >|< (16.03.11 14:17) [5]
Вопрос снимается. Нужно было перекомпилить все модули :-)
>|< (2011-03-16 14:17:00) [3]
> Очевидно, преобразовать его в TNotifyEvent.
>
Да, логично. Спасибо за подсказку.
Но возникли проблемы другого характера, которые я пока не в силах решить...
Проблемы следующие:
При нажатии кнопки, создается другая форма, для которой задается ряд параметров.При замене обработчика этой кнопки, форма создается, но параметры теряются.
Возможно, область памяти с данными затирается массивом ссылок на методы...
механизм которых реализован в этой ветке http://delphimaster.ru/cgi-bin/forum.pl?id=1300268485&n=18 ...
DiamondShark (2011-03-16 13:47:00) [4]
> А как вызвать Button1Click, если у меня есть только значение
> TMethod?
Очевидно, преобразовать его в TNotifyEvent.
>|< (2011-03-16 13:07:00) [5]
> Button1Click(Sender);
А как вызвать Button1Click, если у меня есть только значение TMethod?
Нашел ф-ции MethodName и MethodAddress, но пока не в курсе, как их использовать, чтобы вызвать код, который хранится по указанному адресу.
>|< (2011-03-16 13:01:00) [6]Спасибо, работает!
Игорь Шевченко (2011-03-16 12:53:00) [7]
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure LoggedButton1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
uses
TypInfo;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Clicked');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
AMethod: TNotifyEvent;
begin
AMethod := LoggedButton1Click;
if IsPublishedProp(Button1, 'OnClick') then
SetMethodProp(Button1, 'OnClick', TMethod(AMethod));
end;
procedure TForm1.LoggedButton1Click(Sender: TObject);
begin
Memo1.Lines.Add('Button1Click');
Button1Click(Sender);
end;
end.