При минимизации формы я использую RxTrayIcon, чтобы при этом исчезла

кнопка из Панели задач вызываю ShowWindow(Application.Handle,SW_HIDE).

Но вот незадача - не получается при восстановлении приложения (после клика

на TrayIcon) добиться, чтобы оно становилось поверх других окон и обязательно было активным.

 

 

Предлагаю вам ознакомиться с приведенной таблицей событий этого объекта:

События

Возникает

OnActionExecute: TActionEvent

Происходит при вызове метода Execute перед обработкой списка событий.

OnActionUpdate: TNotifyEvent

Происходит при вызове метода Update;

OnActivate: TNotifyEvent

При переходе приложения в активное состояние.

OnDeactivate:TNotifyEvent

При переключении на другое приложение Windows

OnException: TExceptionEvent

При возникновении исключительной ситуации

OnHelp: THelpEvent

При запросе приложением справочной системы.

OnHint: TNotifyEvent

При перемещении мыши над компонентом, у которого есть строка подсказки (Hint)

OnIdle: TNotifyEvent

При отсутствии работы у приложения

OnMessage: TMessageEvent

При получении сообщения Windows

OnMinimize: TNotifyEvent

При минимизации приложения

OnRestore: TNotifyEvent

При восстановлении приложения в нормальный размер

OnShowHint: TShowHintEvent

При выводе строки подсказки (Hint)

 

 

Code:

 

   procedure WMActivateApp(var Msg: TWMActivateApp); message WM_ACTIVATEAPP;

   procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;

 

{©Drkb v.3www.drkb.ru}

 

...

procedure Form2.WMActivateApp(var Msg: TWMActivateApp);

begin

if IsIconic(Application.Handle) then begin

   ShowWindow(Application.Handle, SW_RESTORE);

   SetActiveWindow(Handle);

end;

inherited;

end;

 

procedure Form2.WMSysCommand(var Msg: TWMSysCommand);

begin

if (Msg.CmdType = SC_Minimize) then

   ShowWindow(Application.Handle, SW_MINIMIZE)

else

   inherited;

end;

 

 

 

 

Теперь при сворачивании формы сворачиваеться все приложение.

 

Автор Alex

 

Code:

>> Замена штатного Application.ProcessMessages

 

Хорошо использовать в DLL или бесформенных приложениях,

если внутри цикла возникает необходимость в использовании Application.ProcessMessages.

 

Зависимости: Windows, Messages

Автор:       ssk,

Copyright:   составлено из кусков кода Borland

***************************************************** }

 

procedure ProcessMessagesEx;

function IsKeyMsg(var Msg: TMsg): Boolean;

const

   CN_BASE = $BC00;

var

   Wnd: HWND;

begin

   Result := False;

   with Msg do

     if (Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST) then

       begin

         Wnd := GetCapture;

         if Wnd = 0 then

           begin

             Wnd := HWnd;

             if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then

               Result := True;

           end

             else

               if (LongWord(GetWindowLong(Wnd, GWL_HINSTANCE)) = HInstance) then

                 if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then

                   Result := True;

       end;

end;

 

function ProcessMessage(var Msg: TMsg): Boolean;

begin

   Result := False;

   if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then

     begin

       Result := True;

       if Msg.Message <> WM_QUIT then

         if not IsKeyMsg(Msg) then

           begin

             TranslateMessage(Msg);

             DispatchMessage(Msg);

           end;

     end;

end;

 

var

Msg: TMsg;

begin

while ProcessMessage(Msg) do {loop};

end;

 

 

Если Вы хотет, чтобы Ваша программа не появлялась на панели задач, но форма была видна, то воспользуйтесь следующей командой:

Code:

ShowWindow (Application.handle, SW_HIDE);

 

Данная команда в основном используется в приложениях, которае активируются через иконку в трее.

 

 

Создайте процедуру, которая будет вызываться при событии Application.OnIdle.

 

Обьявим процедуру:

Code:

{©Drkb v.3(2007): www.drkb.ru}

 

{Private declarations}

procedure IdleEventHandler(Sender: TObject; var Done: Boolean);

 

В разделе implementation опишем поцедуру:

 

procedure TForm1.IdleEventHandler(Sender: TObject; var Done: Boolean);

begin

{Do a small bit of work here}   

Done := false;

end;

  

В методе Form'ы OnCreate укажем что наша процедура вызывается на событии:

 

Application.OnIdle.Application.OnIdle := IdleEventHandler;

 

Событие OnIdle возникает один раз - когда приложение переходит в режим "безделья" (idle).

Если в обработчике переменной Done присвоить False событие будет вызываться

вновь и вновь, до тех пор пока приложение "бездельничает" и

переменной Done не присвоенно значение True.

 

  

Code:

// set the standard windows icon for the application

Application.Icon := nil;

 

 

 

Если навсегда - то поставить у формы FormStyle свойство в fsStayonTop,

если надо чтобы просто программа была установлена в активное состояние (как будто кликнули на ней на таскбаре) - Application.BringtoFront

 

Кроме того можно играться API функцией ShowWindow передавая ей Form1.Handle, или Application.Handle и один из кучи параметров - посмотри на нее Help - там много вариантов.

 

 

 

Эта статья взята мной из рассылки "СообЧА. Программирование на Delphi". К сожалению авторство не указано, но думаю многим будет интересно.

 

Класс TApplication, являющийся наследником класса TComponent, представляет собой фундаметальный класс, свойства и методы которого описывают основные характеристики Windows-приложения. Этот класс активно используется для выполнения специфических действий, зависящих от операционной системы.

Иерархия TObject TPersistent TComponent

Модуль Forms

В каждом приложении автоматически создается объект Application типа TApplication приложение. Application имеет ряд свойств, методов, событий, характеризующих приложение в целом.

Собственные свойства класса TApplication.

 

 

Для этого необходимо обработать сообщение WMQUERYOPEN. Однако обработчик сообщения необходимо поместить в секции private - т.е. в объявлении TForm.

Code:

procedure WMQueryOpen(var Msg: TWMQueryOpen); message WM_QUERYOPEN;

 

Реализация будет выглядеть следующим образом:

 

procedure WMQueryOpen(var Msg: TWMQueryOpen);

begin

Msg.Result := 0;

end;