Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-1118600263
integery
2005-06-12 22:17
2005.10.09
POP3 + ActiveX


1-1127126645
antikaban
2005-09-19 14:44
2005.10.09
преобразование doc овского файла в веб-страницу


2-1124760007
Tirops
2005-08-23 05:20
2005.10.09
Возможность добавлять новые компоненты в программу


8-1116731635
Antonn
2005-05-22 07:13
2005.10.09
Использование GDI+


1-1127034318
Alexis
2005-09-18 13:05
2005.10.09
Парсинг алгебраических выражений (полиномов)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский