Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
2-1211279284
StiTch
2008-05-20 14:28
2008.06.15
Вкладки


15-1209566817
AlexanderMS
2008-04-30 18:46
2008.06.15
Включить Диспетчер задач и редактирование реестра.


15-1209629962
Алексин
2008-05-01 12:19
2008.06.15
Wi-Fi в квартире


15-1209913573
Fredy314
2008-05-04 19:06
2008.06.15
Нужна помощь с JavaScript


2-1211546124
StiTch
2008-05-23 16:35
2008.06.15
Мемо





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский