Другие языки программирования и технологии

Как свое сворачивать приложение на делфи в tree ася 404048645

Как сворачивать программу на делфи в tree какой код нужно написать что нужно сделать
куда его сворачивать, неужели оно такое плохое, что ты аж туда его завернуть решил? или ты имел ввиду system tray?
Евгений Cидоров
Евгений Cидоров
49 111
Лучший ответ
В инете полно примеров и готовых компонентов. Google, и в путь!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ShellAPI;

const
WM_MYTRAYNOTIFY = WM_USER + 123;

type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N11: TMenuItem;
N21: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
ShowOnce: Boolean;
procedure CreateTrayIcon(n:integer);
procedure DeleteTrayIcon(n:integer);
procedure HideTray();
procedure WMICON (var msg: TMessage); message WM_MYTRAYNOTIFY;
procedure WMSYSCOMMAND(var Msg : TMessage); message WM_SYSCOMMAND;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMICON (var msg: TMessage); // приходит при щелчке по иконке
var P: TPoint;
begin
case msg.LParam of
WM_LBUTTONDOWN: // левая кнопка мыши:
begin // открыть. .
Application.ShowMainForm:=true;
ShowWindow(Application.Handle, SW_SHOWNORMAL);
ShowWindow(Application.MainForm.Handle, SW_SHOWNORMAL);
SetForegroundWindow(Application.Handle);
DeleteTrayIcon(1);
end;
WM_RBUTTONDOWN: // правая кнопка мыши:
begin // меню. .
GetCursorPos(p);
SetForegroundWindow(Application.Handle);
Form1.PopupMenu1.Popup(p.X-50,p.Y);
end;
end;
end;

procedure TForm1.CreateTrayIcon(n:integer);
var NIdata :TNotifyiconData;
begin
with NIdata do
begin
cbSize:=SizeOf(TNotifyiconData);
Wnd:=Self.Handle;
uID:=n;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage:=WM_MYTRAYNOTIFY;
hicon:=Application.Icon.Handle;
szTip:='Подсказка всплывающая';
end;
ShellAPI.Shell_NotifyIcon(NIM_ADD,@NIdata);
end;

procedure TForm1.DeleteTrayIcon(n:integer);
var NIdata :TNotifyiconData;
begin
with NIdata do
begin
cbSize:=SizeOf(TNotifyiconData);
Wnd:=Self.Handle;
uID:=n;
end;
ShellAPI.Shell_NotifyIcon(NIM_DELETE,@NIdata);
end;

procedure TForm1.HideTray; // свернуть приложение в трей
begin
Application.ShowMainForm:=false;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
CreateTrayIcon(1);
end;

procedure TForm1.WMSYSCOMMAND(var Msg : TMessage); // обр-ка сворачивания формы
begin
inherited;
if (Msg.wParam=SC_MINIMIZE) then
begin
HideTray;
end;
end;
procedure TForm1.N1Click(Sender: TObject); // Открыть
begin
Application.ShowMainForm:=true;
ShowWindow(Application.Handle, SW_SHOWNORMAL);
ShowWindow(Application.MainForm.Handle, SW_SHOWNORMAL);
DeleteTrayIcon(1);
end;

procedure TForm1.N2Click(Sender: TObject); // Выход
begin
DeleteTrayIcon(1);
Application.Terminate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowOnce := false;
if not ShowOnce then
begin
//CreateTrayIcon(1);
end;
end;

end.