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

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

Как сформировать свой экземпляр типа 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  ...

рекурсия, однако :)


&gt;|&lt;   (2011-03-16 14:28:00) [2]


> >|<   (16.03.11 14:17) [5]

Вопрос снимается. Нужно было перекомпилить все модули :-)


&gt;|&lt;   (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.


&gt;|&lt;   (2011-03-16 13:07:00) [5]


>  Button1Click(Sender);

А как вызвать Button1Click, если у меня есть только значение TMethod?
Нашел ф-ции MethodName и MethodAddress, но пока не в курсе, как их использовать, чтобы вызвать код, который хранится по указанному адресу.


&gt;|&lt;   (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.


Наверх

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