Delphi - Form teljes területének másolása vágólapra

forráskód letöltése
Ha például dokumentálni szeretnénk az alkalmazásunkat és ehhez szükségünk lenne az összes Form képére, akkor a mellékelt példából megtudhatjuk, hogy miként másolhatjuk le azt a vágólapra. Ezt módosítva könnyen készíthetünk olyan programot, amely nem a vágólapra menti a képet, hanem állományba. Ha például dokumentálni szeretnénk az alkalmazásunkat és ehhez szükségünk lenne az összes Form képére, akkor a mellékelt példából megtudhatjuk, hogy miként másolhatjuk le azt a vágólapra. Ezt módosítva könnyen készíthetünk olyan programot, amely nem a vágólapra menti a képet, hanem állományba.


Az egyetlen apró problémába ott ütközünk, hogy alapesetben csak a Form kliens területét tudjuk elérni, de nekünk a teljesre lenne szükségünk, amelybe beletartozik a fejléc éppúgy, mint a Form kerete.

Ennek megoldására azt választjuk, hogy létrehozunk egy olyan eszközleírót, amely képes a teljes monitor terület elérésére. Ehhez a GetDC függvényt használjuk fel.

A másoláshoz létrehozunk átmenetileg egy TBitmap típusú változót is a Form képének eltárolásához.

Ezek után már csak egy BitBlt függvény hívásra van szükségünk, mely elvégzi a kép másolását. Itt az első paraméter a létrehozott TBitmap kép azonosítója, mint a másolás cél területe. A második két paraméter a célterület X és Y koordinátája. A következő két területben a másolandó terület szélességét és magasságát kell megadnunk. Ez nyilvánvalóan egyezik a Form-unk szélességével és magasságával.

Ezután jön a forrás terület azonosítója, mely jelen esetben az egész képernyő lesz.
Valamint még két paraméter, hogy honnan is kezdődjön a másolás. Ez az X és Y koordináta a Form Left és Top property-ével kell hogy egyezzen, különben másik ablakot másolna az alkalmazásunk.

Végső paraméterként pedig az elvégzendő műveletet kell megadnunk, ami most egy sima másolás (SRCCOPY).

Miután rendelkezésre áll a kép, már csak a vágólapra kell azt másolnunk és végül megszüntetni a ReleaseDC hívásával a GetDC által lefoglalt memória területet.

Ha nem a vágólapra szeretnénk másolni, hanem egy BMP állományba menteni, akkor azt egyszerűen a bmp.SaveToFile('form.bmp'); hívásával megtehetjük.