- DIGI internet
- Mobilinternet
- Aliexpress tapasztalatok
- Nyílt forrású Windows XP-klónra gyűjtenek pénzt
- A TikTok Lite is igen káros lehet a gyerekekre
- MinDig TV
- Kínában túl sok az EV, fokozódik az árháború
- Az MSI RadiX AXE6600 tesztje – router, játékosoknak
- Hálózati / IP kamera
- 3 évig még biztosan nem rendelhetünk Xiaomi EV-t
Aktív témák
-
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 !ASUS B650E-E, AMD Ryzen 9 7900, CORSAIR 64GB DDR5 6000MHz CL30 KIT CMK64GX5M2B6000Z30, ARCTIC COOLING Liquid Freezer II 360
-
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
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 programbanASUS B650E-E, AMD Ryzen 9 7900, CORSAIR 64GB DDR5 6000MHz CL30 KIT CMK64GX5M2B6000Z30, ARCTIC COOLING Liquid Freezer II 360
-
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
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 ?ASUS B650E-E, AMD Ryzen 9 7900, CORSAIR 64GB DDR5 6000MHz CL30 KIT CMK64GX5M2B6000Z30, ARCTIC COOLING Liquid Freezer II 360
Aktív témák
- ZOTAC GeForce GTX 1080 AMP Edition 8GB GDDR5X 256bit
- Filmes gép gyűjtemény
- Nikon D5000 + AF-S DX NIKKOR 18-105 mm
- Bontatlan Seagate & Western Digital HDD-k 3TB - 12TB -ig - Számla + Garancia, Ár alatt! BeszámítOK!
- DJI Mini 4 pro FMC drón - 3 akku, RC2 táv, 2 táska, Filterek, 2025. decemberig garancia, DJI Care