Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.03.2022, 12:00
Аватар для RTTI
RTTI RTTI вне форума
Прохожий
 
Регистрация: 13.03.2022
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию Сохранение в "dfm"-файл своего указателя на метод

Всем привет!
Как вам известно, при установке события через инспектор объектов, в "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"-файл.
Есть идеи?

Последний раз редактировалось RTTI, 13.03.2022 в 16:10.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter