- gban: Ingyen kellene, de tegnapra
- eBay-es kütyük kis pénzért
- Luck Dragon: Asszociációs játék. :)
- MasterDeeJay: Alacsony fogyasztású házi szerver a korábbi projektekből összeépítve
- bambano: Bambanő háza tája
- sziku69: Fűzzük össze a szavakat :)
- btz: Internet fejlesztés országosan!
- weiss: Logi MX Master 3S FW NEM frissítés
- Argos: Adjátok vissza a netet! - szeretnék elaludni!
- Geri Bátyó: Megint tahó voltam – SZEMÉLYISÉGFEJLŐDÉS
Hirdetés
Aktív témák
-
emre33
addikt
fél siker ! Az általad írtakat pontosan megcsináltam és Müködött ! Szépen sorba kizárásos alapon megprobáltam kiszüri mi lehet a gázos dolog a pogramban, és kiderült !
Ha a mükdöd(fentebb általad irt programhoz) hozzáadom a NMHTTP1 nevü komponenst( 6-os delphit használok) nem tudja a windows bezárni a programot, NMHTTP1 pedig nem tudom nélkülözni.
vmi tipp esetleg ? -
zenit
tag
Nem tippelgetek tovább, valahogy így kellene csinálnod:
(hosszú lesz, de igazából egyszerű. :) )
const
WM_NOTIFY_ICON = WM_USER;
type
TMainForm = class(TForm)
PopupMenu: TPopupMenu;
MenuShow: TMenuItem;
MenuExit: TMenuItem;
HideButton: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure MenuShowClick(Sender: TObject);
procedure MenuExitClick(Sender: TObject);
procedure HideButtonClick(Sender: TObject);
private
procedure AddNotifyIcon;
procedure DeleteNotifyIcon;
procedure WMNotifyIcon(var Msg: TMessage); message WM_NOTIFY_ICON;
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.AddNotifyIcon;
var
NotifyIconData: TNotifyIconData;
begin
FillChar(NotifyIconData, SizeOf(NotifyIconData), 0);
with NotifyIconData do
begin
cbSize := SizeOf(NotifyIconData);
Wnd := Handle;
uID := 0;
uFlags := NIF_ICON or NIF_MESSAGE;
uCallbackMessage := WM_NOTIFY_ICON;
hIcon := Icon.Handle;
end;
Shell_NotifyIcon(NIM_ADD, Addr(NotifyIconData));
end;
procedure TMainForm.DeleteNotifyIcon;
var
NotifyIconData: TNotifyIconData;
begin
FillChar(NotifyIconData, SizeOf(NotifyIconData), 0);
with NotifyIconData do
begin
cbSize := SizeOf(NotifyIconData);
Wnd := Handle;
uID := 0;
end;
Shell_NotifyIcon(NIM_DELETE, Addr(NotifyIconData));
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
AddNotifyIcon;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
DeleteNotifyIcon;
end;
procedure TMainForm.WMNotifyIcon(var Msg: TMessage);
var
P: TPoint;
begin
case Msg.lParam of
WM_LBUTTONDOWN,
WM_LBUTTONDBLCLK:
Show;
WM_RBUTTONDOWN:
begin
GetCursorPos(P);
PopupMenu.Popup(P.X, P.Y);
end;
end;
end;
procedure TMainForm.MenuShowClick(Sender: TObject);
begin
Show;
end;
procedure TMainForm.MenuExitClick(Sender: TObject);
begin
Close; // Elég a Close, mert ez a főform.
end;
procedure TMainForm.HideButtonClick(Sender: TObject);
begin
Hide;
end;
------------
Na, ez így működik.
[Szerkesztve] -
emre33
addikt
kicsit közelebb kerültem a megoldáshoz - ha a program indulásakor csak a tálca ikon látható(óra mellett) akkar a leállitás rendben végigmegy, ha a bal klikkel elöhozom a föablakot, akkor megint nem tudja bezárni a progit
a tálca ikon kattintás figyelést a következő rész csinálja:
....
procedure WndProc(var Msg: TMessage); override;
.....
procedure TForm1.WndProc(var Msg: TMessage);
var p : TPoint;
begin
case Msg.LParam of
WM_RBUTTONDOWN : //kattintás az egér jobb gombjával
begin
GetCursorPos(p); //a kurzor pozíciója a kattintáskor
PopupMenu1.Popup(p.x,p.y); //a menü kinyitása
end;
WM_LBUTTONDBLCLK : //bal dupla-kattintás
begin
Form1.Show;
end;
WM_LBUTTONDOWN : //kattintás az egér bal gombjával;
Begin
Form1.Show;
end;
end;
inherited; //a le nem kezelt üzenetek elintéztetése
end;
ha a CloseQuery esemény meghívodik, mert ha hozzárendelem a tálca ikon törtélst akkor az végrehajtódik, ha beirom a ''Application.Terminate;'' sort is, akkor leállításkor be zárja a progit csak nem folytatódik a leállitás folyamata. (most a WM_QUERYENDSESSION nem serepel a programban -
zenit
tag
Mindegy, mit írsz az Msg.Result-ba, mert az inherited miatt a TCustomForm.WMQueryEndSession-je úgyis felülírja neked.
A WM_QUERYENDSESSION-ben elvileg semmilyen Close meg egyéb műveletet nem kellene végrehajtanod, mert utána még úgyis jön egy WM_ENDSESSION, amire az alkalmazás magától kilép.
Ez a Delphi-ben már meg van írva, neked nem is kell vele foglalkoznod.
(Ha van a Formnak CloseQuery-je, akkor ott True-val kell visszatérned, hogy a QueryEndSession is True-val térhessen vissza.)
A DeleteTrayIcon meg egyéb dolgokat a TForm.OnDestroy eseményébe kell raknod. -
emre33
addikt
csináltam egy kis programot dephibe és ha fut a program és le akarom állitani a windowst , akkor a windows be tudja zárni a programot, de a leállitás folyamaa nem folytatódik tovább
Idemásolom a kérdéses részt:
.....
procedure WMQUERYEndSession(var Msg:Tmessage); message WM_QUERYENDSESSION;
.....
procedure TForm1.WMQUERYEndSession(var Msg:TMessage);
begin
// Msg.Result:=1;
Form1.Close;
DeleteTrayIcon;
inherited;
end;
Mi lehet a hiba? Ha adok visszatérésési értéket (Msg.Result:=1;) akkor ugyanugy a program bezáródik , de a kijelentkzés folyamata megszakad !
Aktív témák
Hirdetés
- DELL Precision 5540 Workstation i7-9850H Nvidia Quadro T1000 16GB 512GB 15.6 új akksi 1év garancia
- Eladó Új állapotban lévő Xiaomi Redmi 13C 4/128GB / 12 hó jótállás
- BESZÁMÍTÁS! Asus B550M R9 5900X 32GB DDR4 1TB SSD RTX 4070 SUPER 12GB Be Quiet! Silent Base 601 850W
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7500F 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone i5 13400F 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: FOTC
Város: Budapest