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.
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.
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.