Delphi - TLabel megjelenítése egy adott szögben

forráskód letöltése
Mellékelt példában készítünk egy olyan TLabel komponenst, melynek van egy olyan property-e, aminek segítségével 0-360 fokos szögben elfordítható a felirat.
Egyetlen problémát a komponens méretének meghatározása jelenti, mivel ez minden szögben más és más, de némi osztás, szorzás, na meg szinusz, koszinusz után megoldható ez a gond is.
A mellékelt példaprogram megnyitása előtt az AngleLabel.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A komponenst a TCustomLabel osztályból származtatjuk. Egyetlen új Angle névre hallgató property-t hozunk létre. Itt lehet megadni azt a szöget fokban, mellyel szeretnénk elforgatni a komponens szövegét.
A kirajzolása Paint eljárásban történik.
Itt a GetTextExtentPoint32 függvénnyel meghatározzuk azt a befoglaló téglalap méretét, melyben elfér az adott felirat.
Ezek után ki kell számítanunk, hogy az adott szög mellett mekkorára kell nyújtanunk a komponens méretét ahhoz, hogy az elforgatott szöveg teljesen beleférjen.
Itt négyfelé ágazik programunk attól függően, hogy a 360 fok melyik negyedébe esik az aktuális szög, mindig másképp kell számítani a méretet.
A betűtípus elforgatásának trükkje abból áll, hogy létre kell hoznunk egy új font-ot. Ezt úgy tesszük, hogy a GetObject-el lekérdezzük az aktuális adatait egy TLogFont struktúrába, majd ezen módosítunk. Az lfEscapement mezőben adható meg a font szöge tized fokokban.
Az új betűtípus létrehozását a CreateFontIndirect végzi el. Utána már csak a kirajzolás és végül a létrehozott új font törlése marad.