OberonCore https://forum.oberoncore.ru/ |
|
Инициализировать окно при каждом открытии https://forum.oberoncore.ru/viewtopic.php?f=24&t=1419 |
Страница 1 из 1 |
Автор: | Rifat [ Среда, 25 Март, 2009 17:17 ] |
Заголовок сообщения: | Инициализировать окно при каждом открытии |
Есть диалоговое окно, которое управляет некоторыми настройками. В секции BEGIN ... END модуля, связанного с диалоговым окном, производится считывание некоторых настроек из настроечного файла, в соответствие с этими настройками, в диалогом окне изменяются некоторые радио-баттоны и чек боксы. Если пользователь изменяет некоторые настройки и нажимает кнопку сохранить, то изменения сохраняются в настроечном файла и форма закрывается. Если же пользователь изменил положения некоторых радио-баттонов или чек боксов, но не нажал кнопку сохранить, а нажал отмена или крестик, то данные не сохраняются и форма закрывается. Проблема в том, что при следующем открытии данного окна, отображение контролов соответствует старым не сохраненным данным, а требуется, чтобы отображались данные из настроечного файла. То есть чтобы при последующих открытиях окна, контролы инициализировались в соответствии с считанными настройками. Как это сделать? У меня есть предположения, что можно где-нибудь вызвать Kernel.UnloadMod и выгрузить модуль, чтобы при следующем открытии выполнился код из BEGIN ... END модуля. Или же надо каким-то образом отлавливать закрытие формы и возвращать контролы в исходное положение, раз они не были сохранены. |
Автор: | Пётр Кушнир [ Среда, 25 Март, 2009 17:20 ] |
Заголовок сообщения: | Re: Инициализировать окно при каждом открытии |
А что мешает вызывать процедуру считывания из файла и инициализации контролов каждый раз, перед открытием окна? Код: MODULE MyAppForm1; IMPORT StdCmds; PROCEDURE InitData; BEGIN (* Здесь делаем что-нить с данными *) END InitData; PROCEDURE Open*; BEGIN InitData; StdCmds.OpenAuxDialog('MyApp/Rsrc/Form1','Форма 1') END Open; BEGIN InitData; END MyAppForm1. P.S. В дальнейшем можно вызывать процедуру MyAppForm1.Open по нажатию кнопки или при вызове пункта меню. P.P.S. Хороший пример на эту тему - ObxFileTree |
Автор: | Евгений Темиргалеев [ Среда, 25 Март, 2009 17:27 ] |
Заголовок сообщения: | Re: Инициализировать окно при каждом открытии |
Более подробно: Вам нужно в модуле сделать команду (проц. без пар-в) открытия диалога. Она загружает данные из файла в соотв-е поля записи-интерактора и открывает диалог стандартной командой. В меню поставить эту команду. |
Автор: | Евгений Темиргалеев [ Среда, 25 Март, 2009 17:36 ] |
Заголовок сообщения: | Re: Инициализировать окно при каждом открытии |
На самом деле, стандартным, принятым в самом ББ методом является наличие команды инициализации диалога. В примере Петра, процедуру InitData надо экспортровать. Команда меню: Код: "MyAppForm1.InitData; StdCmds.OpenAuxDialog('MyApp/Rsrc/Form1','Форма 1')" См. системное меню: Код: MENU "Edit"
... SEPARATOR "Pre&ferences..." "" "HostDialog.InitPrefDialog; StdCmds.OpenToolDialog('Host/Rsrc/Prefs', 'Preferences')" "" END MENU "Attributes" ... "&Size..." "" "StdCmds.InitSizeDialog; StdCmds.OpenToolDialog('Std/Rsrc/Cmds', 'Size')" "StdCmds.SizeGuard(-1)" SEPARATOR ... END |
Автор: | Rifat [ Среда, 25 Март, 2009 17:40 ] |
Заголовок сообщения: | Re: Инициализировать окно при каждом открытии |
Спасибо за помощь! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |