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

Вниз

Сворачивание в трей   Найти похожие ветки 

 
Xmen   (2008-05-20 14:10) [0]

Для этого использоваль такой код
const
WM_MYICONNOTIFY = WM_USER + 123;

 private
   { Private declarations }
   ShownOnce: Boolean;
 public
   { Public declarations }
   NowDate:string;
   procedure WMICON(var msg: TMessage); message WM_MYICONNOTIFY;
   procedure WMSYSCOMMAND(var msg: TMessage);message WM_SYSCOMMAND;
   procedure RestoreMainForm;
   procedure HideMainForm;
   procedure CreateTrayIcon(n:Integer);
   procedure DeleteTrayIcon(n:Integer);

 end;

var
 AgentForm: TAgentForm;

implementation

uses DM;

{$R *.dfm}

procedure TAgentForm.WMICON(var msg: TMessage);
var P : TPoint;
begin
case msg.LParam of         // обработка обратных сообщений
WM_LBUTTONUP:  //по нажатию левой клавиши, WM_RBUTTONUP по правой
 begin
  GetCursorPos(p);
  SetForegroundWindow(Application.MainForm.Handle);
  PopupMenu1.Popup(P.X, P.Y);
 end;
WM_LBUTTONDBLCLK : RestoreItemClick(Self); //как Default
end;
end;

procedure TAgentForm.WMSYSCOMMAND(var msg: TMessage);
begin
inherited; //обработка минимизирвания окна, не сворачевается а скрывается
if (Msg.wParam=SC_MINIMIZE) then
 begin
   HideMainForm;
   CreateTrayIcon(1);
 end;
end;

procedure TAgentForm.HideMainForm;
begin
//при сокрытии окна
 Application.ShowMainForm := False;
 ShowWindow(Application.Handle, SW_HIDE);
 ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;

procedure TAgentForm.RestoreMainForm;
var i,j : Integer;
begin
 Application.ShowMainForm := True;
 ShowWindow(Application.Handle, SW_RESTORE);
 ShowWindow(Application.MainForm.Handle, SW_RESTORE);
 if not ShownOnce then
 begin
   for I := 0 to Application.MainForm.ComponentCount -1 do
     if Application.MainForm.Components[I] is TWinControl then
       with Application.MainForm.Components[I] as TWinControl do
         if Visible then
         begin
           ShowWindow(Handle, SW_SHOWDEFAULT);
           for J := 0 to ComponentCount -1 do
             if Components[J] is TWinControl then
               ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
         end;
   ShownOnce := True;
 end;

end;

procedure TAgentForm.CreateTrayIcon(n:Integer);
var nidata : TNotifyIconData;
begin
with nidata do
 begin
  cbSize := SizeOf(TNotifyIconData);
  Wnd := Self.Handle; //HWND вашего окна (окна принимающего обратные сообщения)
  uID := 1;          // номер значка
  uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; //обрабатываемые флаги
  uCallBackMessage := WM_MYICONNOTIFY;
  hIcon := Application.Icon.Handle;   // то откуда сдергивается значек это может быть и ImageList и т.д.
  StrPCopy(szTip,"MyJobs Agent.");  // всплывающая строка, может быть любой string главное с нулевым окончанием
 end;
 Shell_NotifyIcon(NIM_ADD, @nidata);    // добавление значка
end;

procedure TAgentForm.DeleteTrayIcon(n:Integer);
var nidata : TNotifyIconData;
begin
with nidata do
 begin
  cbSize := SizeOf(TNotifyIconData);
  Wnd := Self.Handle;
  uID := 1;
 end;
 Shell_NotifyIcon(NIM_DELETE, @nidata);   // удаление значка
end;

procedure TAgentForm.RestoreItemClick(Sender: TObject);
begin
RestoreMainForm;
DeleteTrayIcon(1);             //если убрать ремарку то при показывании основного окна значек исчезает
end;

procedure TAgentForm.FormCreate(Sender: TObject);
begin
ShownOnce:= False;

end;

procedure TAgentForm.FormDestroy(Sender: TObject);
begin
DeleteTrayIcon(1);
end;

procedure TAgentForm.FormShow(Sender: TObject);
var x,y:Integer;
begin
x:= Screen.Width-260;
y:= Screen.Height-430;
Left := x;
Top := y;

end;

end.

форма сварачивется в трей и обратно, проблема в том как его автоматический сварачиват при запуске программы?


 
Elec3C ©   (2008-05-20 15:08) [1]

Вот проблема а! В обработчике OnFormActivate(можно в OnFormShow) пропиши:

HideMainForm;
CreateTrayIcon(1);


P.S. Наверное, скопипастил и не изучал код вообще:\


 
Palladin ©   (2008-05-20 15:10) [2]


>  В обработчике OnFormActivate

жестокий ты парень...


 
Rouse_ ©   (2008-05-20 15:25) [3]


> OnFormActivate

Следующий вопрос будет: как выковырять форму из трея? :)


 
Xmen   (2008-05-20 16:49) [4]

Да нет сейчась меня волнует вопрос как можно сделать форму поверх всех окон. BringToFront - только один раз его помешает а мне надо сделать, чтобы он всегда был на верху.


 
{RASkov} ©   (2008-05-20 16:52) [5]

> [4] Xmen   (20.05.08 16:49)

StayOnTop


 
{RASkov} ©   (2008-05-20 16:52) [6]

FormStyle=fsStayOnTop ^)


 
Сергей М. ©   (2008-05-20 17:09) [7]


> проблема в том как его автоматический сварачиват при запуске
> программы


А нафига ее "сворачивать", если ее можно просто не показывать при старте ?

ShowMainForm := False; в файле проекта - и вуаля !)


> мне надо сделать, чтобы он всегда был на верху


Экие нескромные у тебя желания)

А ежели какой-нить Ymen, изобретатель аналогичной по амбициям программы, возжелает того же самого ? Как будете с ним этот самы "поверх" делить ?

Сверху всегда кто-то один, но смена позиции партнеров законом не запрещена)


 
Сергей М. ©   (2008-05-20 17:10) [8]


> как выковырять форму из трея?


Выпуздырить ?)



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
15-1209657957
GreyWolf
2008-05-01 20:05
2008.06.15
Копирую файлы с привода DVD на HDD, Winamp


2-1211215934
ЗфдЗфднсп
2008-05-19 20:52
2008.06.15
вопросик по Oracle


15-1209545526
x-man
2008-04-30 12:52
2008.06.15
winapi


15-1209529452
@!!ex
2008-04-30 08:24
2008.06.15
Как испоганить исходник??


2-1211435887
oleg_teacher
2008-05-22 09:58
2008.06.15
отчет