HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Különleges hatást keltő kép a képben effekt létrehozása


Példaprogram letöltése

3422 bájt

Az ebben a cikkben bemutatásra kerülő apró trükkel különleges, kép a képben hatást kelthetünk. Mindehhez a Windows Desktop-jának a képét hívjuk segítségül. Ráadásul amennyiben Delphi komponenseket helyezünk a Form-ra, a hátterünk ezek alá „csúszik”. Mellékelt példaprogramból megtudhatjuk, mindezt hogyan is lehet megvalósítani.

A megoldás abban rejlik, hogy a Canvas azonosítóját (Handle) lecseréljük a Windows Desktop azonosítójára, melyet a GetWindowDC függvénnyel szerzünk meg. Mindezt a Form OnResize eseményéhez kötjük.
procedure TForm1.FormResize(Sender: TObject);
var
  R    : TRect;
  DC   : HDc;
  Canv : TCanvas;
Begin
Létrehozunk egy, a teljes képernyő, azaz a Desktop méretével megegyező téglalapot.
  R:=Rect(0, 0, Screen.Width, Screen.Height);
Először a GetDeskTopWindow függvény segítségével megszerezzük a Desktop Handle-jét. Ha adott az ablak azonosítója, akkor az alapján lekérhető az ablak kirajzolásáért felelős objektum azonosítója is, melyhez a GetWindowsDC Windows függvényt kell meghívnunk. Mindezt a DC ablakleíróban tároljuk.
  DC:=GetWindowDC(GetDeskTopWindow);
Ezután létrehozzuk a rajzterületet.
  Canv:=TCanvas.Create;
A Canvas azonosítóját lecseréljük a Desktop kirajzolásáért felelős azonosítóra, melyet a DC-ben tároltunk.
  Canv.Handle:=DC;
A CopyRect eljárással a létrehozott téglalapra átmásoljuk a Canvas képét, mely jelen esetben a Desktop képével egyezik meg. Az első paraméter TRect típusú, és a célterület koordinátáit adja meg. A második paraméter az a Canvas, amiről a képrészletet másolni szeretnénk. Az utolsó paraméter szintén TRect típusú, és a másolandó terület koordinátáit tartalmazza.
  Canvas.CopyRect(R, Canv, R);
Végül a ReleaseDC eljárással felszabadítjuk a GetWindowDC által lefoglalt erőforrásokat.
  ReleaseDC(GetDeskTopWindow, DC);
end;
A mellékelt példaprogram futtatása után Form-unk háttereként a Desktop képe jelenik meg. Ahhoz, hogy láthassuk a változást, fogjuk meg a Form jobb felső sarkát, és méretezzük át azt. Mivel minden egyes méretváltozáskor újra betöltjük a Form háttereként a Desktop képét, olyan hatást érünk el, mintha több ablak lenne egymásba ágyazva. Amennyiben különböző Delphi komponenseket helyezünk a Form-ra, olyan hatást kelthetünk, mintha azok mögé „becsúszna” a háttér képe. Ennek oka, hogy a komponensek mindig a Form háttere fölött helyezkednek el.

Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 550. 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 |