Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
ВнизУзнать, что главная форма является активной для приложения Найти похожие ветки
← →
Андрей Молчанов (2005-09-18 18:13) [0]Добрый день.
Есть форма. Надо узнать, является ли она активной формой приложения. Form1.Active не подходит, т.к. он возвращает false даже если форма активна внутри приложения, но не активна для всей системы. Пожалуйста, подскажите.
← →
Джо © (2005-09-18 18:31) [1]
> Form1.Active не подходит, т.к. он возвращает false даже
> если форма активна внутри приложения, но не активна для
> всей системы.
С этого места подробней. Не понятно, правда.
← →
Anatoly Podgoretsky © (2005-09-18 18:48) [2]Screen.ActiveForm
← →
Anatoly Podgoretsky © (2005-09-18 18:50) [3]Но у тебя очень сильно противоречие между темой и вопросом, Я в задумчивости, что же именно тебя интересует?
← →
Андрей Молчанов (2005-09-18 18:59) [4]Я делаю свой планировщик. Он не должен выполнять задания когда открыто окно свойств, программа спрашивает пользователя о чем-нибудь и т.д. Раньше я писал if not frmMain.Active then exit; , но недавно обнаружил, что exit выполняется даже когда системный фокус установлен на другое приложение. Что с этим делать?
← →
Андрей Молчанов (2005-09-18 19:01) [5]
> Screen.ActiveForm
Screen.ActiveForm возвращает как раз текущее окно для всей системы.
← →
Джо © (2005-09-18 19:02) [6]
> [5] Андрей Молчанов (18.09.05 19:01)
> Screen.ActiveForm возвращает как раз текущее окно для всей
> системы.
Причем здесь какое-то активное окно для системы?
← →
Андрей Молчанов (2005-09-18 19:08) [7]хм... похоже, я не смогу объяснить что мне надо. Тогда так:
Я делаю планировщик. Он не должен выполнять задания когда в моей программе открыто окно свойств, программа спрашивает пользователя о чем-нибудь и т.д. Как узнать, что в данный момент выполнять задание не нужно, т.к. пользователь настраивает программу?
← →
Джо © (2005-09-18 19:16) [8]
> [4] Андрей Молчанов (18.09.05 18:59)
> Я делаю свой планировщик. Он не должен выполнять задания
> когда открыто окно свойств, программа спрашивает пользователя
> о чем-нибудь и т.д.
Это, имхо, в корне неправильно, но как знаешь.
Раньше я писал if not frmMain.Active
> then exit; , но недавно обнаружил, что exit выполняется
> даже когда системный фокус установлен на другое приложение.
> Что с этим делать?
Введи глобальный флаг. Т.е, непосредственно перед созданием окна с настройками установи флаг в True, при закрытии формы сбрасывай. В таком духе.
type
TSettingsForm = class (TForm)
///
end;
function ShedullerStopped: Boolean
function ShowSettingsDialog: TModalResult;
procedure CloseSettingsDialog;
implementation
var
Frm: TSettingsForm;
FSchedullerStopped: Boolean;
function ShowSettingsDialog: TModalResult;
begin
FShedullerStopped := True;
Frm := TSettingsForm.Create (nil);
Result := Frm.ShowModal;
end;
procedure CloseSettingsDialog;
begin
FShedullerStopped := False;
Frm.Free;
end;
function ShedullerStopped: Boolean
begin
Result := FShedullerStopped
end;
← →
Джо © (2005-09-18 19:18) [9]Но, рискуя быть навязчивым, все же повторю: это, имхо, неверный подход. Планировщик не должен прекращать свою работу в момент, когда пользователь лазит по настройкам.
← →
Андрей Молчанов (2005-09-18 19:27) [10]
> Это, имхо, в корне неправильно, но как знаешь.
Нет, ну смотри: программа начинает резервное копирование, а пользователь в это время устанавливает, что надо бэкапить на диск. Или вообще отключает планировщик.
> Введи глобальный флаг. Т.е, непосредственно перед созданием
> окна с настройками установи флаг в True, при закрытии формы
> сбрасывай. В таком духе.
Над этим вариантом я уже думал, но нет ли чего-нибудь попроще? Окон то много разных...
← →
Джо © (2005-09-18 19:29) [11]
> [10] Андрей Молчанов (18.09.05 19:27)
> Нет, ну смотри: программа начинает резервное копирование,
> а пользователь в это время устанавливает, что надо бэкапить
> на диск. Или вообще отключает планировщик.
Настройки принято принимать только после нажатия на OK. Если пользователь не успел до запуска задания поменять его настройки - это сугубо проблема пользователя. Задания просто так не ставят на исполнение, не подумав. Особенно бекапы.
> Над этим вариантом я уже думал, но нет ли чего-нибудь попроще?
> Окон то много разных...
Куда уж проще.
← →
Джо © (2005-09-18 19:31) [12]Кстати, собственно, флагом может служить уже сама переменная со ссылкой на форму. Если, конечно, формы создавать динамически и при закрытии уничтожать и обнулять ссылку.
← →
Андрей Молчанов (2005-09-18 19:51) [13]
> Настройки принято принимать только после нажатия на OK.
> Если пользователь не успел до запуска задания поменять его
> настройки - это сугубо проблема пользователя. Задания просто
> так не ставят на исполнение, не подумав. Особенно бекапы.
>
Теоретически ты прав. Но практически - сразу возникают проблемы с модальными формами, надо переделывать программу на многопоточность и т.д. Наверное, в следующей версии этим займусь.
← →
Андрей Молчанов (2005-09-18 19:51) [14]Удалено модератором
← →
Джо © (2005-09-18 20:26) [15]
> надо переделывать программу на многопоточность
Вот интересно, планировщик изначально так нужно было проэктировать: в одном потоке - интерфейс, в другом - собственно, обработка. Или же вообще сам планировщик сделать в виде сервиса, настройки же и вообще все GUI - отдельное приложение.
> сразу возникают проблемы с модальными формами
пока (исходя из приведенной информации) - не вижу никаких проблем.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.766 c