![]() |
| |||||||
| Programlama Delphi,Visual Basic,C/C++,Pascal,Python,Kylix,Lazarus,Glade,Perl,Mono vb yazılımlar hakkında döküman paylaşabileceğiniz ve soru sorabileceğiniz forum alanızımıdır. |
| Tags: aninin, delphi, ilewindows8217un, kapanma, tespiti |
![]() |
| | LinkBack | Konu Araçları |
| | #1 (permalink) | |||||||||||||
| Bu Alana Reklam Vermek İstiyorsanız Buraya Tıklayınız Windows'un kapanma anının yakalanabilmesi için, Windows tarafından kapanmadan önce yayınlanan, WM_EndSession mesajı yakalanmalıdır. Mesaj yakalama yordamı, uygulama ana form sınıfının, Private bölümünde şu şekilde tanımlanır.Kodları Renklendirmek isterdim ama Alıntı Ve Çok Kastı [img]images/smilies/frown.gif[/img] procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION; Mesaj yakalama yordamının kendisi ise, Implementation bölümünde aşağıdaki gibi yaratılır. procedure TForm1.WMEndSession(var Msg : TWMEndSession); begin if Msg.EndSession = TRUE then ShowMessage('Windows kapatılıyor. '); inherited; end; veya procedure TForm1.WMQueryEndSession(var Msg : TWMQueryEndSession); begin if MessageDlg('Windows kapansınmı ?', mtConfirmation, [mbYes,mbNo], 0) = mrNo then Msg.Result := 0 else Msg.Result := 1; end; Windowsun kapandığını tespit eden bir bileşen kodu aşağıdadır. unit winshut; interface uses Messages, SysUtils, Classes, Forms, Windows; type TkapanmaOlayi = procedure (Sender: TObject; var TamamKapat: boolean) of object; type TSezonuKapat = class(TComponent) private FUYG: THandle; FParent: THandle; FESKIWINYORD: pointer; FYeniPencereYordami: pointer; KAPANIRKEN: TkapanmaOlayi; TamamKapat: boolean; procedure YeniPencereYordami(var MESAJ: TMessage); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Loaded; override; published property WINKAPANIS: TkapanmaOlayi read KAPANIRKEN write KAPANIRKEN; end; procedure Register; implementation constructor TSezonuKapat.Create (AOwner : TComponent); begin inherited Create(AOwner); TamamKapat := TRUE; FUYG := Application.Handle; FParent := (AOwner as TForm).Handle; FYeniPencereYordami := MakeObjectInstance(YeniPencereYordami); end; destructor TSezonuKapat.Destroy; begin SetWindowLong(FUYG, GWL_WndProc, longint(FESKIWINYORD)); FreeObjectInstance(FYeniPencereYordami); inherited Destroy; end; procedure TSezonuKapat.Loaded; begin inherited Loaded; FESKIWINYORD := pointer(SetWindowLong(FUYG, GWL_WndProc,longint(FYeniPencereYordami))); end; procedure TSezonuKapat.YeniPencereYordami(var MESAJ: TMessage); begin with MESAJ do begin if (Msg=WM_QUERYENDSESSION) then begin if Assigned(KAPANIRKEN) then KAPANIRKEN(Self,TamamKapat); if TamamKapat then Result := CallWindowProc(FESKIWINYORD, FUYG, Msg, wParam,lParam) else Result := 0; end else Result := CallWindowProc(FESKIWINYORD, FUYG, Msg, wParam,lParam); end; end; procedure Register; begin RegisterComponents('Kitap', [TSezonuKapat]); end; end.
__________________ !!!FORUMDAKİ ONLİNE FİLMLERİ (DivX) NASIL İZLERİM!!![Linkleri görebilmek için üye olmalısınız. Üye olmak için tıklayınız...] [Linkleri görebilmek için üye olmalısınız. Üye olmak için tıklayınız...] [Linkleri görebilmek için üye olmalısınız. Üye olmak için tıklayınız...] [Linkleri görebilmek için üye olmalısınız. Üye olmak için tıklayınız...] ![]() [Linkleri görebilmek için üye olmalısınız. Üye olmak için tıklayınız...] [Linkleri görebilmek için üye olmalısınız. Üye olmak için tıklayınız...] | |||||||||||||
| | |
| Konuyu Beğendin mi ? O Halde Konuyu Arkadaşınız ile Paylaşın =) |
| Okumuş Olduğunuz Sayfayı E-Mail ile Arkadaşınız ile Paylaşın ! |
![]() |
| Bookmarks |
| Şu an bu konuyu görüntüleyen kullanıcı sayısı: 1 (0 üye ve 1 misafir) | |
| Konu Araçları | |
| |