HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Rajzolás közvetlenül a Desktop-ra


Példaprogram letöltése

5040 bájt

Ebben a példában azt vizsgáljuk meg, hogy hogyan tudunk közvetlenül a Desktop-ra rajzolni. A bemutatott módszert nem csak rajzolásra, hanem a képernyő egy adott területének másolására is felhasználhatjuk. Miután összefirkáltuk a Dekstop-ot illik azt le is törölni, így azt is megvizsgáljuk, hogy miként tudjuk a képernyő területét frissíteni, újrarajzoltatni.

A Windows-ban ahhoz, hogy rajzolni tudjuk szükség van egy Device Contex leíróra (HDC). A Delphi-ben megszokhattuk, hogy ha rajzolunk, akkor az általában a TCanvas objektumon keresztül történik. Ha megvan a leíró, akkor arra is van lehetőségünk, hogy használjuk a TCanvas objektumot, ami nagyon leegyszerűsíti a rajzolási műveleteket, és teljes mértékben mellőzhetjük a Window GDI függvényeket.
Ha a Desktop-ra akarunk rajzolni, akkor nyilván szükség lesz ennek HDC-jére. Ahhoz viszont, hogy a HDC-t lekérdezzük szükség van az ablak leírójára is. Ez utóbbit a GetDesktopWindow függvénnyel kaphatjuk meg, amit közvetlenül felhasználhatunk a GetWindowDC függvény paramétereként. Ebből már kiderülhetett, hogy az ablak HDC-jét a GetWindowDC függvénnyel tudjuk lekérdezni.
GetWindowDC
function GetWindowDC(
hWnd: HWND
): HDC; stdcall;
Ezzel a függvénnyel tudjuk egy ablak Device Context leíróját lekérdezni.
Paraméterek
hWnd: HWND
Ebben a paraméterben kell megadnunk az ablak leíróját.
Visszatérési érték
A függvény visszatérési értéke az ablak Device Context leírója, vagy 0, ha a lekérdezés nem sikerült.
A HDC ismeretében már rajzolhatunk is a Windows GDI függvényeivel. Ha azonban kényelmesebben akarjuk a rajzolást elvégezni, akkor érdemes egy TCanvas objektumot létrehozni, és annak Handle property-jének átadni a HDC-t.
var
  canv: TCanvas;
  DC: HDC;
  ...
  DC:=GetWindowDC(GetDesktopWindow);
  canv:=TCanvas.Create;
  canv.Handle:=DC;
Ettől kezdve, amit a TCanvas objektumon keresztül rajzolunk, az meg fog jelenni a Desktop-on.
Miután befejeztük a rajzolást, a lekérdezett Device Context leírót fel kell szabadítanunk a ReleaseDC függvénnyel.
ReleaseDC
Osztály:
function ReleaseDC(
hWnd: HWND;
hDC: HDC
): Integer; stdcall;
Az előzőleg lekérdezett Device Context leíró felaszabadítására ezt a függvényt használhatjuk.
Paraméterek
hWnd: HWND
A Device Context-hez tartozó ablak leíróját kell megadnunk ebben a paraméterben.
hDC: HDC
Ebben a paraméterben kell megadni a felszabadítandó Device Context leírót.
Visszatérési érték
A függvény visszatérési értéke igaz, ha a felszabadítás megtörtént, és hamis, ha nem.
Miután összefirkáltuk a Desktop-ot, illik azt le is tisztítani. Ezt egyszerűen az InvalidateRect API függvénnyel tehetjük meg.
InvalidateRect
function InvalidateRect(
hWnd: HWND;
lpRect: PRect;
bErase: BOOL
): BOOL; stdcall;
Ezzel a függvénnyel egy ablak adott területét rajzoltathatjuk újra. Ugyanezt a függvényt használhatjuk a képernyő frissítésére is.
Paraméterek
hWnd: HWND
A frissítendő ablak leírója.
lpRect: PRect
A frissítendő terült koordinátái egy TRect struktúrában.
bErase: BOOL
Ha ennek a paraméternek az értéke igaz, akkor az újrarajzolás előtt törli a területet.
Visszatérési érték
Ha a frissítés sikerült, akkor a visszatérési érték igaz, ellenkező esetben hamis.
Megjegyzés
Ha a teljes képernyő tartalmát szeretnénk frissíteni, akkor a hWnd paraméterben 0, az lpRect paraméterben pedig nil-t adjunk meg.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 330. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |