Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
ВнизАналог ShowModal для свернутого в трей приложения Найти похожие ветки
← →
GreyWolf (2009-11-01 23:40) [0]Приложение запускается и в зависимости от параметров командной строки может сворачиваться в трей при запуске. Если приложение сворачивается в трей, то главная форма не показывается, хотя и создается, то есть ShowMainForm = False.
В зависимости от другого параметра возможно автоматическое начало некоторго действия после запуска. При его начале я через ShowModal показываю индикатор прогресса. Теперь я хочу, чтобы если приложение было свернуто в трей, вызвать некоторую функцию-аналог ShowModal, которая бы:
- не возвращала управления до закрытия формы
- не показывала никаких форм сразу, и не помещала на TaskBar кнопку приложения, но при восстановлении приложения индикатор прогресса оказывался бы активной modal form
При попытке использовать ShowModal при свернутом в трей приложении, появляется кнопка на TaskBar, и индикатор прогресса не модален (можно переключаться между ним и восстановленной главной формой)
Как это можно сделать с наименьшим объемом кода и затрачиваемым временем?
← →
Leonid Troyanovsky © (2009-11-02 11:02) [1]
> GreyWolf (01.11.09 23:40)
> Как это можно сделать с наименьшим объемом кода и затрачиваемым
> временем?
Чего-то больно все наворочено.
Почему б не показывать скрытую главную форму, когда нужно что-либо показать? Прогресс можно хоть в статус-баре показать.
А чтобы не показывать кнопку на таскбаре, сделай в контекстном
меню пункт: Restore, на который будет выполняться примерно такое:
procedure TForm1.miRestoreClick(Sender: TObject);
begin
Show;
ShowWindow(Application.Handle, SW_HIDE);
end;
Т.е., в случаях, когда надо показать главное окно, можно сделать miRestore.Click (предварив вызовом SetForegroundWindow(Handle)
при вызове из конт.меню "у" иконки).
--
Regards, LVT.
← →
GreyWolf (2009-11-02 12:05) [2]
> Чего-то больно все наворочено.Почему б не показывать скрытую
> главную форму, когда нужно что-либо показать? Прогресс можно
> хоть в статус-баре показать.
Мне НЕ НУЖНО показывать прогресс-бар если приложение свернуто в трей. Просто сейчас есть такая логика: я начинаю операцию, при этом показываю форму с индикатором прогресса, в коде есть обращения на обновление ее контролов по мене изменения состояния процесса обработки. Это работает, если приложение не свернуто никуда. Я не хочу менять этот код, исключать эти обращения. Вместо этого мне нужно, чтобы:
1. форма с прогрессом создавалась, но была невидимой
2. при восстановлении приложения методом Restore эта форма становилась видимой и модальной.
Для второго пункта очевидно нужно как-то модифицировать списки Disabled окон, которые есть в VCL, потому что автоматически и корректно это происходит только если главная форма на экране.
← →
Leonid Troyanovsky © (2009-11-02 12:51) [3]
> GreyWolf (02.11.09 12:05) [2]
> становилась видимой и модальной.
DisableTaskWindows - в руки, а приложение - в корзину.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2009-11-02 13:10) [4]> Leonid Troyanovsky (02.11.2009 12:51:03) [3]
В прямом смысле?
← →
Leonid Troyanovsky © (2009-11-02 13:31) [5]
> Anatoly Podgoretsky © (02.11.09 13:10) [4]
> В прямом смысле?
В смысле "покрасить и выбросить".
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2009-11-02 14:08) [6]> Leonid Troyanovsky (02.11.2009 13:31:05) [5]
Так еще и красить нужно!
← →
Leonid Troyanovsky © (2009-11-02 14:19) [7]
> Anatoly Podgoretsky © (02.11.09 14:08) [6]
> Так еще и красить нужно!
Ну, это только для эстетов.
--
Regards, LVT.
← →
GreyWolf (2009-11-02 17:07) [8]Сделал следующим образом:
const
WM_MINIMIZETOTRAY = WM_USER + 102;
var
FStartedInTray: Boolean;
....
FStartedInTray := TrayIcon.IconVisible;
if FStartedInTray then
begin
EnableWindow(Application.MainForm.Handle, False);
PostMessage(FProgressForm.Handle, WM_MINIMIZETOTRAY, 0, 0);
end;
FProgressForm.ShowModal;
if FStartedInTray then
begin
EnableWindow(Application.MainForm.Handle, True);
end;
Этио работает, хотя при этом возможны мелькания формы на экране. Хотел найти более изящное решение.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c