Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сериализация DFM-файл файла / 25 сообщений из 29, страница 1 из 2
27.09.2019, 23:57
    #39868215
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Задача такова: Имеется DFM-файл-файл стандартной структуры Delphi, и в него нужно записать строку в виде "OnClick = NewForm1Click" перед словом "end". Как это сделать?

Образец DFM-ФАЙЛ-файла:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
object Form1: TForm1 
Left = 230 
Top = 186 
Width = 407 
Height = 137 
Caption = "Form1" 
Color = clBtnFace 
Font.Charset = DEFAULT_CHARSET 
Font.Color = clWindowText 
Font.Height = -13 
Font.Name = "MS Sans Serif" 
Font.Style = [] 
OldCreateOrder = False 
PixelsPerInch = 120 
TextHeight = 16 
object Memo1: TMemo 
Left = 208 
Top = 8 
Width = 185 
Height = 89 
Lines.Strings = ( 
"Memo1") 
TabOrder = 0 
end
...
Рейтинг: 0 / 0
28.09.2019, 00:26
    #39868227
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
DefineProperty ? Как добавить в поток эту строку?, при чем эта строка должна относиться к этому объекту.....? Отесать если там Memo или ListBox, то строка должна относиться к его описанию, перед словом end
...
Рейтинг: 0 / 0
28.09.2019, 00:32
    #39868230
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
У меня есть процедура для очистки строки DFM-файл...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
procedure RemoveEventHandlers(SL:TStrings);
const
  Key1 = ' On';
  Key2 = ' = ';

var
  i, k1,k2 : Integer;
  S        : String;

begin
  for i := SL.Count-1 downto 0 do begin
    S := SL[i];

    k1 := pos(Key1, S);
    k2 := pos(Key2, S);

    if (k1 <> 0) AND (k2 > k1) then begin
      // remove it:
      SL.Delete(i);
    end;

  end;
end;


Но как ее присвоить?
...
Рейтинг: 0 / 0
28.09.2019, 00:35
    #39868231
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Осталось 1:12
Как вписать в DFM-файл -файл эту строку?
...
Рейтинг: 0 / 0
28.09.2019, 00:38
    #39868234
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Если не пить пиво и не гулять по-девочкам, то мозг начинает работать...
...
Рейтинг: 0 / 0
28.09.2019, 00:39
    #39868235
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Вы не должны заниматься сериализацией компонентов.
Компоненты это умеют делать сами.
...
Рейтинг: 0 / 0
28.09.2019, 00:45
    #39868238
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
DimaBr, Дима, это делается не по средствам среды. Как Делфи добавляет ссылку на обработчик событий в DFM-файл файл ,- "OnClick = NewForm1Click" , при чем добавляет ее в нужное место для нуд6ого компонента. Вам ведь известен мой проект?, да, он вам известен. Готовность 90%. Остался маленький обработчик событий, код которого , будет общим...
Короче , как мне вписать эту строку в DFM-файл ?
...
Рейтинг: 0 / 0
28.09.2019, 00:47
    #39868240
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
DimaBr,
Не умеют,!!! Или не полностью. Почему тогда, при сохранении формы в поток со всеми его свойствами, - все сохраняется за исключением событий - методов ?
...
Рейтинг: 0 / 0
28.09.2019, 00:51
    #39868241
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Сериализацией объектов занимается TWriter/TReader
Бессмысленно придумывать собственный механизм, если уже таковой есть.
Сначала придумайте как прочитать событие и показать его в дизайнере
...
Рейтинг: 0 / 0
28.09.2019, 00:53
    #39868242
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Linux_64Почему тогда, при сохранении формы в поток со всеми его свойствами, - все сохраняется за исключением событий - методов ?
Если события есть (назначены) и не сохраняются, то что мешает поставить бряку и посмотреть почему это происходит ?
...
Рейтинг: 0 / 0
28.09.2019, 01:06
    #39868245
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
DimaBr, да, мой код не идеален. Над оригиналом трудились с десяток профи, А я всего лишь любитель...
Возможна ли альтернатива? Я компилировал файл Unit1.pas с Unit1.dfm, предварительно внеся в файл DFM-файл строку со ссылкой (указателем на метод) "OnClick = NewForm1Click" и после этого компилировал весь проект, в итоге обработчик события , а он прописан в pas-файле срабатывал, но эту строку я вносил вручную в DFM-файл-файл. Как мне это а№томотизировать?
...
Рейтинг: 0 / 0
28.09.2019, 01:10
    #39868248
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Как автоматизировать ?
А как ваш инспектор отображает события ?Где эти события у вас хранятся ?
...
Рейтинг: 0 / 0
28.09.2019, 01:14
    #39868250
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Мне просто нужно перед компиляцией внести нужную строку в нужное место, как правило перед end. Если это не только дерево TreeView, там сложнее, Если я добавил обработчик OnChahge для Мемо или OnClick для кнопки, то соответствующее описание попадает в DFM-файл, при чем обратите внимание!!!, перед словом end, нужного объекта, которому присваивается ссылка на обработчик
...
Рейтинг: 0 / 0
28.09.2019, 01:17
    #39868252
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Повторяю, компоненты сами знают как себя сохранить.
Не нужно это делать снаружи.
...
Рейтинг: 0 / 0
28.09.2019, 01:18
    #39868254
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Linux_64, в инспекторе присваивается ссылка - указатель на метод, если ссылка отсутствует, то присваивается свойству значение nil, в противном случае указывается адрес указателя, по сути это просто строка с адресом, она не привязывает обработчик к ссылке, а вот сама среда Делфи это делает посредством DFM-файл файла и определенной строки
...
Рейтинг: 0 / 0
28.09.2019, 01:20
    #39868256
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
А если метода ещё нет. Его только создали в дизайнере (в текстовом виде), куда указывает ссылка ?
...
Рейтинг: 0 / 0
28.09.2019, 01:23
    #39868260
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
DimaBr, Отлично!, но где тогда строка "OnClick = NewForm1Click", перед словом end? - именно она указывает на связь между скажем кнопкой и обработчиком в коде модуля pas. Кнопка не знает, что ей присвоен указатель и что обработчик содержит кучу строк кода при нажатии на эту кнопку, нет привязки, нет ссылки на этот обработчик, нет ярлыка если хотите, но где моя строка в FFM?
...
Рейтинг: 0 / 0
28.09.2019, 01:24
    #39868261
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Откуда вообще берутся ссылки на метод, если у вас ДВА текстовых файла ?
...
Рейтинг: 0 / 0
28.09.2019, 01:32
    #39868267
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
DimaBr, Дмитрий, я понятия не имею, как разработчики Боллэнд это сделали. Мне удалось выяснить, что строка "Button1Click" в инспекторе объектов это всего лишь строка для пользователя и флаг того, что ссылка создана , ссылка на обработчик
Procedure TForm1.Button1Click....
Так вот, строка Button1Click каким то образом попадает в DFM-файл файл. Элли события это тоже свойства компонента, то почему ее нет в файле?, там сохраняются только свойства не имеющие значения по- умолчанию... мы можем обмануть судьбу и решить задачу не так как это сделала Борлэнд ? . Как добавить строку в DFM-файл перед словом end, при условии, что она будет относиться к "своему" объекту.
...
Рейтинг: 0 / 0
28.09.2019, 01:35
    #39868270
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
DimaBr, в смысле ?, какие два текстовых файла? - DFM файл и pas , что ещё?
...
Рейтинг: 0 / 0
28.09.2019, 01:38
    #39868273
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Вы похоже меня не слышите.
Вы в дизайнере кликаете на кнопке, при этом в коде создаётся процедура, а в инспекторе показывается что на событие OnClick привязана процедура ButtonClick.
До сохранения ещё далеко.
У вас это работает ?
Откуда в вашей NewForm1.OnClick = 004ECE40 ? Это что за адрес ? У вас есть DFM файл, вы его прочитали (каким то образом). Откуда взялся адрес процедуры ?
...
Рейтинг: 0 / 0
28.09.2019, 01:42
    #39868274
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Linux_64, О Боги....
Код: pascal
1.
2.
3.
4.
5.
6.
TM: TMethod;
Begin
TM.Data:= NewForm1;
TM.Code:= NewForm1.MethodAddress('NewForm1DblClick');
SetMethogProp(NewForm1, 'OnDblClick', TM);
End;


Посредством этого кода я присваиваю указатель на метод события OnDblClick, но
В файл сохраняются все свойства , которые я изменил или не трогал, но абсолютно нет намёка на событие.... где оно?
...
Рейтинг: 0 / 0
28.09.2019, 01:46
    #39868275
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
То есть вы копилируете форму, создаёте её и получаете указатель на метод ?
А новый метод, который вы ручками напишите в коде, где указатель на него ?
Он существует только в текстовом виде, в скомпилированной форме его нет
...
Рейтинг: 0 / 0
28.09.2019, 01:52
    #39868277
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
Linux_64, Да, у меня это работает, создаётся обработчик событий в редакторе кода со всеми параметрами, без проблем, так же эта строка с именем процедуры прпадает в описание класса формы, так же как это делает обычная Делфи. Хвала Богу, я додумался как в нужную строку редактора прописывать нужный обработчик со всеми его параметрами. Тем временем , в Инспектор объектов присутствует адрес указателя или виде строки, я могу это переключить в настройках инспектора. Дело все в том, что это просто строка с адресом . Когда в оригинале создаётся событие, то во первых создаётся обработчик в коде, при чем обратите внимание, это происходит перед конечным словом end. Добавляется строка-описание в класс формы, короче в раздел интерфейса, в инспектор д*бавляется строка с именем метода, но это всего лишь строка и наконец в DFM-файл - файл добавляется строчка типа OnClick = Button1Click
..... ????
Как ее добавить?
...
Рейтинг: 0 / 0
28.09.2019, 01:55
    #39868278
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализация DFM-файл файла
авторДело все в том, что это просто строка с адресом
Куда указывает этот адрес ? Если в NewForm ещё нет такого метода ?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сериализация DFM-файл файла / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]