Всем привет!
Как вам известно, при установке события через инспектор объектов, в "dfm"- файл попадает ссылка (указатель) на метод, типа "OnClick = Edit2Click", а в редактор кода непосредственно сам обработчик.
Мне необходимо программно присвоить "свой" обработчик и указатель на него, используя процедуру SetMethodProp из модуля "TypInfo.pas".
Конечно же при условии, что сигнатуры параметров методов совпадают.
Ссылка присваивается (не равна "nil"), но НЕ записывается в "dfm"-файл.
Запись типа Edit2.OnClick:= MyEventClick; не предлагать. Нужно обязательно через
SetMethodProp !!!
Код:
// Свой обработчик события, вместо Edit2Click
procedure TForm4.MyEventClick(Sender: TObject);
begin
// Какое-нибудь действие при нажатии...
end;
// В другом месте программы:
var
S : ShortString;
M: TMethod;
begin
S:= 'MyEventClick';
M.Code:= @S; // Строка верная? (содержит адрес типа "00000000")
M.Data:= Edit2; // Строка верная или нужно Form4.Edit2 ?
// Явно указываю компонент и событие
SetMethodProp(Edit2, 'OnClick', M);
end;
Что в этом случае содержит скрытый параметр Self ?
Далее, обновляю данные с помощью потоковой системы Delphi:
Код:
// K - содержит компонент Form2
procedure TForm2.Save_DFM(K: TComponent; FileName: string = 'Unit2.dfm');
var
F: TFileStream;
M: TMemoryStream;
begin
try
// M:= nil;
if not Assigned(K) then
begin
Raise Exception.Create('Ошибка при сохранении файла формы.');
end;
//
F:= TFileStream.Create(PATH_EXE + FileName, fmCreate);
M:= TMemoryStream.Create;
try
M.WriteComponent(K);
M.Position:= 0;
ObjectBinaryToText(M, F);
finally
M.Free;
F.Free;
end;
except
//
end;
end;
Но строка "OnClick = MyEventClick" не записывается в "dfm"-файл.
Есть идеи?