Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.19;
Скачать: CL | DM;

Вниз

Как сформировать свой экземпляр типа TMethod ?   Найти похожие ветки 

 
>|<   (2011-03-16 12:41) [0]

Нужно через 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?


 
Игорь Шевченко ©   (2011-03-16 12:53) [1]

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.


 
>|<   (2011-03-16 13:01) [2]

Спасибо, работает!


 
>|<   (2011-03-16 13:07) [3]


>  Button1Click(Sender);

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


 
DiamondShark ©   (2011-03-16 13:47) [4]


> А как вызвать Button1Click, если у меня есть только значение
> TMethod?

Очевидно, преобразовать его в TNotifyEvent.


 
>|<   (2011-03-16 14:17) [5]


> Очевидно, преобразовать его в TNotifyEvent.
>

Да, логично. Спасибо за подсказку.
Но возникли проблемы другого характера, которые я пока не в силах решить...

Проблемы следующие:
При нажатии кнопки, создается другая форма, для которой задается ряд параметров.При замене обработчика этой кнопки, форма создается, но параметры теряются.

Возможно, область памяти с данными затирается массивом ссылок на методы...
механизм которых реализован в этой ветке http://delphimaster.net/view/2-1300268485/  ...


 
>|<   (2011-03-16 14:28) [6]


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

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


 
OW ©   (2011-03-16 17:04) [7]


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


> механизм которых реализован в этой ветке http://delphimaster.
> ru/cgi-bin/forum.pl?id=1300268485&n=18  ...

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



Страницы: 1 вся ветка

Текущий архив: 2011.06.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
2-1299761604
картман
2011-03-10 15:53
2011.06.19
почему точка останова не активна?


2-1299920274
>|<
2011-03-12 11:57
2011.06.19
чем заменить UInt64 в Delphi 6


15-1298680305
KilkennyCat
2011-02-26 03:31
2011.06.19
Никсовая сборка-роутер?


15-1299145221
Неважно
2011-03-03 12:40
2011.06.19
Версия Builder a


15-1298896576
hasp4
2011-02-28 15:36
2011.06.19
Размер памяти в hasp 4