OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 16 Июнь, 2025 16:38

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 25 Март, 2009 17:17 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 989
Откуда: Казань
Есть диалоговое окно, которое управляет некоторыми настройками. В секции BEGIN ... END модуля, связанного с диалоговым окном, производится считывание некоторых настроек из настроечного файла, в соответствие с этими настройками, в диалогом окне изменяются некоторые радио-баттоны и чек боксы. Если пользователь изменяет некоторые настройки и нажимает кнопку сохранить, то изменения сохраняются в настроечном файла и форма закрывается. Если же пользователь изменил положения некоторых радио-баттонов или чек боксов, но не нажал кнопку сохранить, а нажал отмена или крестик, то данные не сохраняются и форма закрывается.
Проблема в том, что при следующем открытии данного окна, отображение контролов соответствует старым не сохраненным данным, а требуется, чтобы отображались данные из настроечного файла. То есть чтобы при последующих открытиях окна, контролы инициализировались в соответствии с считанными настройками.
Как это сделать?
У меня есть предположения, что можно где-нибудь вызвать Kernel.UnloadMod и выгрузить модуль, чтобы при следующем открытии выполнился код из BEGIN ... END модуля.
Или же надо каким-то образом отлавливать закрытие формы и возвращать контролы в исходное положение, раз они не были сохранены.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 25 Март, 2009 17:20 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
А что мешает вызывать процедуру считывания из файла и инициализации контролов каждый раз, перед открытием окна?
Код:
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:34, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 25 Март, 2009 17:27 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Более подробно:

Вам нужно в модуле сделать команду (проц. без пар-в) открытия диалога. Она загружает данные из файла в соотв-е поля записи-интерактора и открывает диалог стандартной командой.

В меню поставить эту команду.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 25 Март, 2009 17:36 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
На самом деле, стандартным, принятым в самом ББ методом является наличие команды инициализации диалога. В примере Петра, процедуру 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



Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 25 Март, 2009 17:40 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 989
Откуда: Казань
Спасибо за помощь!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB