Вверх ↑
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
#31: 2017-11-23 14:35:43 ЛС | профиль | цитата
Netspirit, ты прав.

andrestudio, спасибо за наводку! Сделал немного по-другому, чтобы обработчик вызывался 1 раз для всего приложения, а не для каждого объекта:

Add(InlineCode,11882593,203,259)
{
@Hint=#10:SRData 2.0|
DataPoints=#5:dtPH_|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|25:uses kol,Share,Debug,win;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|23: fControl: PControl;|31: fOldOnClose:TOnEventAccept;|17: ini:PIniFile;|20: im:TIniFileMode;|26: procedure SRData_3042;|59: procedure _onCloseApp(Sender:PObj; var Accept:Boolean);|10: public |21: dtPH_: THI_Event;|19: procedure Init;|23: constructor Create;|5: end;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|5:begin|18: inherited Create;|15: InitAdd(Init);|4:end;|0:|27:procedure THiAsmClass.Init;|6:begin |64: if Assigned(Applet.OnClose) then fOldOnClose := Applet.OnClose;|31: Applet.OnClose := _onCloseApp;|15: im := ifmRead;|13: SRData_3042;|4:end;|0:|67:procedure THiAsmClass._onCloseApp(Sender:PObj; var Accept:Boolean);|5:begin|16: im := ifmWrite;|13: SRData_3042;|58: if Assigned(fOldOnClose) then fOldOnClose(Sender,Accept);|4:end;|0:|34:procedure THiAsmClass.SRData_3042;|38: function PCtl(ev:THI_Event):PControl;|42: begin Result := ReadControl(ev,''); end;|5:begin|67: ini := OpenIniFile(GetStartDir + '1.ini'); //Указать имя ini-файла|16: ini.Mode := im;|52: ini.Section := 'fields'; //Указать секцию ini-файла|57: //Указать точки данных, ключи и соотв. свойства объектов|61: PCtl(dtPH_).Text := ini.ValueString('txt',PCtl(dtPH_).Text);|3: //|19: Free_And_Nil(ini);|17: //_hi_OnEvent();|4:end;|0:|4:end.|
link(dtPH_,12985530:Var1,[])
}
Add(ChildForm,12985530,203,203)
{
}
BEGIN_SDK
Add(EditMulti,8191142,21,21)
{
VarCount=1
link(Var1,16554643:PHandle,[(27,165)(195,165)])
}
Add(MainForm,9963737,84,84)
{
Left=35
Top=105
Width=210
Height=117
}
Add(Edit,16554643,182,77)
{
Left=40
Top=25
Width=115
Point(PHandle)
}
END_SDK

Ну, вроде правильно будет, как думаете?
карма: 9
0
Ответов: 5227
Рейтинг: 587
#32: 2017-11-24 11:38:28 ЛС | профиль | цитата
3042 писал(а):
Ну, вроде правильно будет, как думаете?

Я просто не в курсе для чего.

з.ы у меня ошибка RuntimeError при закрытии (может из за того что win.pas у меня другой).
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 2059
Рейтинг: 132
#33: 2017-11-24 12:04:27 ЛС | профиль | цитата
У меня тоже другой win.pas (отчасти позаимствовал у коллеги andrestudio, отчасти свои художества), но у меня всё работает нормально.
Поставил штатный win.pas, тоже всё пучком.


P.S.
У меня, как мне кажется, похожая задача.
Есть какой-то "главный" кубик и куча периферийных.
В "главном" кубике есть список, в который при старте программы, периферийные кубики передают свои "имена" после чего главный кубик вызывает одну и ту-же процедуру в периферийных кубиках согласно списка. Конечно можно на точку onCreate главной формы повесить хаб, но хочется ...

Netspirit писал(а):
Дочерние элементы добавляют/удаляют себя из списка хозяина.


Редактировалось 3 раз(а), последний 2017-11-24 12:57:10
карма: 6

0
Ответов: 5227
Рейтинг: 587
#34: 2017-11-24 16:04:17 ЛС | профиль | цитата
flint2,
Netspirit писал(а):
писал(а):
Дочерние элементы добавляют/удаляют себя из списка хозяина.
В KOL нет RTTI в этом вся и проблема (как кодегенератор нагенерит так и разгребайте), вот почему тут про AdjustControls от sla8a и не упоминают Да всё просто, всё слишком сложно на предмет изучения. Скажу лишь как сделано у меня (win.pas не просить, не дам, всё по чесноку, в меня тапком и вам фигу) Добавлен раскрывающейся список WinControl.ini
WinControl.ini
##Options=Режимы для сохранения и загрузки свойсв элемента
FileNameOpt=Определяет имя файла по-умолчанию для загрузки/сохранения свойств элемента|2|
SaveOpt=Сохранять свойства элемента|14|0|False,True
LoadOpt=Загружать свойства элемента|14|0|False,True
...
далее список свойств контролов с True/False (всё мышой по Hiasm(янски))
##
где минимум нужных мне свойств сохраняются а опосля загружаются уже несколько лет. При пустом поле свойства Name или FileNameOpt все Options игнорируются.

з.ы бля всё, припадок графоманства закончился, чекушку выпил с устатка (неделя удалась) надо ещё пару осилить

Редактировалось 2 раз(а), последний 2017-11-24 16:06:42
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 1926
Рейтинг: 172
#35: 2017-11-24 18:55:40 ЛС | профиль | цитата
andrestudio, собственно, у меня было так же
http://forum.hiasm.com/post/224759

Но так как при обновлении с svn приходится всё заново настраивать (и не только это, ведь есть ещё нестандартные компоненты), решил избавиться от изменений в win.pas wincontrol...
И просто сделать IC для таковой загрузки/сохранения.

andrestudio писал(а):
з.ы у меня ошибка RuntimeError при закрытии (может из за того что win.pas у меня другой).

Странно. Это может быть, если точка не подключена, у меня никаких ошибок нет. А win, кстати, там и не нужен, я его уже убрал из uses.

flint2 писал(а):
У меня, как мне кажется, похожая задача.
Есть какой-то "главный" кубик и куча периферийных.
В "главном" кубике есть список, в который при старте программы, периферийные кубики передают свои "имена" после чего главный кубик вызывает одну и ту-же процедуру в периферийных кубиках согласно списка. Конечно можно на точку onCreate главной формы повесить хаб, но хочется ...


Тоже достойное применение.

--- Добавлено в 2017-11-24 18:58:39

andrestudio, а такой будет выдавать ошибку:
Add(InlineCode,11882593,294,273)
{
@Hint=#59:Модуль загрузки/сохранения параметров в ini-файл SRData 2.0|
DataPoints=#5:dtPH_|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|31: fOldOnClose:TOnEventAccept;|17: ini:PIniFile;|20: im:TIniFileMode;|19: procedure Init;|58: procedure onCloseApp(Sender:PObj; var Accept:Boolean);|26: procedure SRData_3042;|9: public|45: //PHandle всех компонентов для сохранения|21: dtPH_: THI_Event;|0:|23: constructor Create;|5: end;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|5:begin|18: inherited Create;|15: InitAdd(Init);|4:end;|0:|27:procedure THiAsmClass.Init;|5:begin|20: fOldOnClose := nil;|64: if Assigned(Applet.OnClose) then fOldOnClose := Applet.OnClose;|30: Applet.OnClose := onCloseApp;|15: im := ifmRead;|13: SRData_3042;|4:end;|0:|66:procedure THiAsmClass.onCloseApp(Sender:PObj; var Accept:Boolean);|5:begin|16: im := ifmWrite;|13: SRData_3042;|58: if Assigned(fOldOnClose) then fOldOnClose(Sender,Accept);|4:end;|0:|34:procedure THiAsmClass.SRData_3042;|5:begin|72: ini := OpenIniFile(GetStartDir + 'SRData.ini'); //Указать имя ini-файла|16: ini.Mode := im;|52: ini.Section := 'fields'; //Указать секцию ini-файла|57: //Указать точки данных, ключи и соотв. свойства объектов|81: ReadControl(dtPH_,'').Text := ini.ValueString('txt',ReadControl(dtPH_,'').Text);|3: //|19: Free_And_Nil(ini);|4:end;|0:|4:end.|
link(dtPH_,13134892:PHandle,[])
}
Add(Edit,13134892,287,217)
{
Left=20
Top=20
Width=200
Text=""
Point(PHandle)
}
?
Если нет, то проблема м.б. в том, что в прошлом коде fOldOnClose не обнулялся в Init.

Редактировалось 2 раз(а), последний 2017-11-24 18:58:52
карма: 9
0
Ответов: 4630
Рейтинг: 749
#36: 2017-11-27 12:40:12 ЛС | профиль | цитата
andrestudio писал(а):
В KOL нет RTTI в этом вся и проблема
Во-первых, RTTI в KOL нам и не нужна - у нас компоненты представляют собой class, следовательно для них RTTI есть. Во-вторых, RTTI, как я понимаю, нужна для загрузки/выгрузки компонентов в rumtime (сериализация), а это не та задача.
карма: 26

0
36
Сообщение
...
Прикрепленные файлы
(файлы не залиты)