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/