![]() |
|
Gövdesiz Fonksiyon - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: Gövdesiz Fonksiyon (/showthread.php?tid=4502) |
Gövdesiz Fonksiyon - serdar - 07-02-2020 Merhaba arkadaşlar Ekran görüntüsünü resim olarak alan bir fonksiyon arıyordum aşağıdaki gibi bir fonksiyon buldum function tform1.WindowSnap(windowHandle: HWND; bmp: TBitmap): boolean; var r: TRect; user32DLLHandle: THandle; printWindowAPI: function(sourceHandle: HWND; destinationHandle: HDC;nFlags: UINT): BOOL; stdcall; begin result := False; user32DLLHandle := GetModuleHandle(user32) ; if user32DLLHandle <> 0 then begin @printWindowAPI := GetProcAddress(user32DLLHandle, 'PrintWindow') ; if @printWindowAPI <> nil then begin GetWindowRect(windowHandle, r) ; bmp.Width := r.Right - r.Left; bmp.Height := r.Bottom - r.Top; bmp.Canvas.Lock; try result := printWindowAPI(windowHandle, bmp.Canvas.Handle, 0) ; finally bmp.Canvas.Unlock; end; end; end; end; Dikkat ederseniz var blogunda soyle bır tanım var; var printWindowAPI: function(sourceHandle: HWND; destinationHandle: HDC;nFlags: UINT): BOOL; stdcall; Fonksiyonun ne adı var nede gövdesi var. Aşağıdaki satırda da ne işlem yapıpta result 'a aktarabılıyor ? Yani bir govdesi ,kod kısmı yok. try result := printWindowAPI(windowHandle, bmp.Canvas.Handle, 0) ; Daha once bu kullanım şekline hiç rastlamadım bılgısı olan arkadaslar varmıdır. Örnekte yapılan işlem önemli değil yapının kullanımını merak ediyorum. Cvp: Gövdesiz Fonksiyon - elixir84 - 07-02-2020 procedure TForm1.ekrangoruntusual(); Const {$j+} i : Integer = 0; {$j-} var DCDesk: HDC; image1:TImage; vJpg: TJpegImage; begin If Not DirectoryExists(ExtractFileDir(Application.Exename) + '\Temp') Then CreateDir(ExtractFileDir(Application.Exename) + '\Temp'); image1 := TImage.Create(self); vJpg := TJpegImage.Create; try image1.Width:=Screen.Width;; image1.Height:=Screen.Height; DCDesk:=GetWindowDC(GetDesktopWindow); BitBlt(image1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,DCDesk, 0, 0,SRCCOPY); ReleaseDC(GetDesktopWindow, DCDesk); try vJpg.Assign(image1.Picture.Bitmap); //bmp nesnesi jpg’e aktarıldı vJpg.CompressionQuality := 60; vJpg.SaveToFile(ExtractFileDir(Application.Exename)+'\Temp\Ekran.jpg'); finally vJpg.Free; end; finally image1.Free; end; end; Gövdesiz Fonksiyon - serdar - 07-02-2020 @elixir84 kardes örnek aramıyorum sorum farklı bır hususta. tesekkurler yınde Gövdesiz Fonksiyon - sadettinpolat - 07-02-2020 Gövdesiz fonksiyon dediğiniz şey aslında user32.dll dosyası içerisindeki metoda bir işaretçi aslında. metodun gövdesi user32.dll içerisinde. siz sadece user32.dll içerisindeki şu metodu kullanmak istiyorum diye bir tanımlama yapıyorsunuz. Cvp: Gövdesiz Fonksiyon - Fesih ARSLAN - 07-02-2020 (07-02-2020, Saat: 09:03)serdar Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar Merhaba, Function'un sonundaki stdcall direktifi (metod çağırımında duruma ve OS'ye bağlı olarak, şunlar da kullanılabilir; register, pascal, cdecl) fonksiyonun harici bir kaynaktan alındığını belirtiyor. Yani bu fonksiyon harici bir platform (muhtemelen Windows) API'si (dll vb.)'dir. Bu tip fonksiyonları kullanabilmek için öncelikle kütüphanenin (dll vb.) load edilmesi gerekiyor. Load işleminden sonra kütüphane içerisindeki herhangi bir fonksiyonu kod içerisinde değişken veya tip tanımlar gibi tanımlarsınız. Daha sonra bu tip veya değişkeni kullanılarak, metodu çağrırsınız. Gövdesiz Fonksiyon - serdar - 07-02-2020 Tesekkurler @Fesih ARSLAN ,@sadettinpolat Kopyala yapıstırla bir sey ogrenılmez satır satır kavramak gerekir
Cvp: Gövdesiz Fonksiyon - Tuğrul HELVACI - 07-02-2020 Nam-ı diğer function pointer Buradaki makaleyi de okumak isteyebilirsiniz. Gövdesiz Fonksiyon - serdar - 07-02-2020 @Tuğrul HELVACI hocam pointerlar kendini unutturmaya hiç gelmiyor. br gun mutluka ben burdayım dıyor )Makale cok guzel tesekkurler sitenizi takip ediyorum |