|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Сохранение в "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; Далее, обновляю данные с помощью потоковой системы 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; Есть идеи? Последний раз редактировалось RTTI, 13.03.2022 в 16:10. |