Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Как определить текущее состояние приложения?   Найти похожие ветки 

 
Rusty ©   (2004-04-13 18:16) [0]

Уважаемые, не подскажите, как определить текущее состояние приложения? Мне необходимо по щелчку на значке в панеле задач сворачивать (восстанавливать) приложение в зависимости от его состояния. Заранее благодарен!


 
Fay ©   (2004-04-13 18:24) [1]

Состояние - это что?!


 
Rusty ©   (2004-04-13 18:32) [2]

Состояние главного окна приложения (свернутое, развернутое или невидимое)...


 
Вольный Стрелок   (2004-04-13 18:33) [3]

ваще-то винда сама его сворачивает-восстанавливает при необходимости
а проверить - у главной формы windowstate


 
Rusty ©   (2004-04-13 18:53) [4]

Главная форма свернута. Процедура двойного нажатия на иконке в панели задач следующая:

procedure TMainForm.TrayIconDblClick(Sender: TObject);
begin
 if WindowState=wsMinimized then
 begin
   Application.Restore;
   Application.BringToFront;
 end else Application.Minimize;
end;

При двойном нажатии - ничего не происходит.


 
Smithson ©   (2004-04-13 18:56) [5]

А двойное нажатие на трэй вообще сложно поймать. Пиши обработчик одиночного, в котором запускай таймер на некоторый интервал времени (400 милисекунд, например). Если за это время произонло еще одно нажатие - это даблклик, если нет - обрабатывай как одиночное.


 
Paladin ©   (2004-04-13 18:58) [6]

А как свернуть прогу в трей???


 
Fay ©   (2004-04-13 19:15) [7]

2Smithson ©   (13.04.04 18:56) [5]
>> в котором запускай таймер
А не легче завести переменную и хранить в ней время полседнего нажатия(для дальнейшего сравнения)?


 
Семен Сорокин ©   (2004-04-13 19:19) [8]

[7] + GetDoubleClickTime


 
2DSpike   (2004-04-13 20:10) [9]

Smithson ©   (13.04.04 18:56) [5]
это еще почему?


 
Rusty ©   (2004-04-14 09:11) [10]

Последние 5 высказываний немного не в тему.
А может ли кто-нибудь по существу ответить на первоначальный вопрос?


 
Юрий Зотов ©   (2004-04-14 10:14) [11]

> Rusty ©   (14.04.04 09:11) [10]

TrayIconDblClick само по себе не вызовется. Вызывать надо из оконной процедуры того окна и при обработке того сообщения, которые были прописано в TNotifyIconData. При двойном клике LParam будет содержать WM_LBUTTONDBLCLICK.

> Smithson

Ничего сложного, и не надо никаких таймеров. Это не тот случай.


 
metalfan ©   (2004-04-14 11:07) [12]

процедура подготовки NotifyIconData

interface
...
const
 WM_NOTIFYICON = WM_APP + 1;
...
 TXXXXX = class(TForm)
....
 procedure WMNotifyIcon(var Mes: TMessage); message WM_NOTIFYICON;
...
var
 HasTrayIcon: boolean;
...
implementation
...
procedure DoPrepareIconData(Var aNID: TNotifyIconData);
begin
  ZeroMemory(@aIconData, SizeOf(TNotifyIconData));
  aIconData.cbSize := SizeOf(TNotifyIconData);
  aIconData.Wnd := handle;
  aIconData.uCallbackMessage := WM_NNOTIFYICON;
  aIconData.hIcon := Application.Icon.Handle;
  aIconData.uID := 666;
  aIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
  StrPCopy(aIconData.szTip, application.title);
end;

procedure DoAddTrayIcon(aNID: TNotifyIconData);
begin
 HasTrayIcon:= Shell_NotifyIcon(NIM_ADD , @aNID);
end;

procedure TfmMainDB.DoDeleteTrayIcon(aNID:TNotifyIconData);
begin
 Shell_NotifyIcon(NIM_DELETE , @aNID);
 HasTrayIcon := false;
end;
procedure TXXXXXX.OnWMNotifyIcon(var Message: TMessage);
begin
 if ((Message.LParam = WM_LBUTTONDBLCLK) then
   {что нужно делать}

end;

вроде нигде не ошибся...


 
metalfan ©   (2004-04-14 11:08) [13]

сорри - первая фраза не в кассу


 
Rusty ©   (2004-04-14 13:07) [14]

-->Юрий Зотов

Мне наверное нужно было раньше уточнить, что я использую готовый компонент RxTrayIcon из библиотеки RxLib, поэтому у меня проблема не в вызове процедуры двойного нажатия. Задача у меня состоит в том, чтобы при клике на значке в трэе приложение либо разворачивалось, либо сварачивалось в зависимости от состояния (свернуто, развернуто) приложения до момента клика.


 
Amoeba ©   (2004-04-14 13:14) [15]

Посмотри другие аналогичные компоненты (на Torry, например), возможно среди них будет то, что удовлетворяет твоим требованиям. На Rx свет клином не сошелся.



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
6-1078166800
pomashok
2004-03-01 21:46
2004.05.02
raise


14-1081406305
Мараканец
2004-04-08 10:38
2004.05.02
Делфи восьмой


4-1078218124
Gia Gvatua
2004-03-02 12:02
2004.05.02
Повторный запуск


4-1077797789
KADAN
2004-02-26 15:16
2004.05.02
ехплорер падает :(


3-1081082712
SergP
2004-04-04 16:45
2004.05.02
integer --> datetime. Как это сделать в запросе?