HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Kontrolok gyors elhelyezése, kör alakban


Példaprogram letöltése

4515 bájt

Készítünk egy komponenst, amely segítségével gyorsan kör alakba rendezhetjük Form-unk megadott kontroljait. Megadhatjuk a kör középpontját és a sugarát. Az elrendezendő kontrolokat egy lista segítségével adhatjuk meg. A rendezés az óramutató járásával megegyező irányba történik, a teljes kört annyi részre osztva, ahány kontrolt megadtunk. A kontrolok sorrendjét a listában betöltött pozíciójuk határozza meg.

A mellékelt példaprogram megnyitása előtt a CircleControls.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A CircleControls komponens CenterX és CenterX property-jein keresztül adhatjuk meg a kör középpontját. A kör sugara Radius méretű lesz. A képzeletbeli körvonal lesz a komponensek középpontja.
Amikor a komponenst elhelyezzük egy Form-on, akkor a kör középpontját automatikusan a Form közepére állítja be, a sugár pedig a Form magasságának negyede lesz.
A ControlNames, TStringList típusú property-ben sorolhatjuk fel azoknak a kontroloknak a nevét, amelyeket rendezni szeretnénk. A kontrolokra, az Object Inspector-ban használt nevük alapján kell hivatkoznunk. A felsorolás sorrendje határozza meg a kontrolok sorrendjét a körvonalon.
Az első kontrol a 12 óra helyére kerül, a többi pedig az óramutató járásával megegyező irányban kerül elhelyezésre.
A komponensek mindig teljes kört alkotnak.
Az elrendezés a SetCircle metódus meghívására jön létre.
A komponens elkészítése
A CircleControls komponenst a TComponent osztályból származtatjuk.
A komponens OnCreate eseményében feljegyezzük az őt tartalmazó Form-ot, az FOwner, TForm típusú változó segítségével.
Rögtön be is állítjuk a komponens kezdeti értékeit.
FCenterX:=FOwner.ClientWidth div 2;
FCenterY:=FOwner.ClientHeight div 2;
A komponens működésének kulcsa a SetCircle metódus.
procedure SetCircle
Ismerjük a kör középpontját. E körül kell elhelyeznünk a ControlNames property-ben felsorolt kontrolokat. A kontrolok száma határozza meg, hogy a teljes kört hány részre kell osztanunk, azaz hány fok lesz a kontrolok közti lépésköz.
Degree:=(PI/180)*(360/FControlNames.Count);
Egy for ciklus (i) segítségével végigmegyünk a ControlNames property bejegyzésein. Minden egyes elemet meg kell keresnünk, és azonosítanunk kell a Form kontroljai között.
j:=0;
while (j<FOwner.ControlCount-1) and (FOwner.Controls[j].GetNamePath<>FControlNames[i]) do
  Inc(j);
A kontrolokat a Controls tömb tartalmazza.
A kontrolok koordinátáinak meghatározásához egy matematikai képletet használunk fel, a pont origó körüli elforgatását.
Kiindulási pontként a (0,-Radius) pontot használjuk fel. Ezt a pontot forgatjuk a Degree*i értékkel.
NewX:=(-1)*Round(x*Cos(Degree*i)+y*Sin(Degree*i));
NewY:=Round(-x*Sin(Degree*i)+y*Cos(Degree*i));
NewX:=NewX+FCenterX;
NewY:=NewY+FCenterY;
Ha a NewX értékének kiszámolásánál a képlet elején lévő (-1) szorzót elvesszük, akkor a kontrolok elrendezése az óramutató járásával ellentétes irányú lesz.
Nincs más hátra, mint hogy a kiszámolt koordinátákra beállítsuk az adott kontrol Left és Top értékeit.
if LowerCase(FOwner.Controls[j].GetNamePath)=LowerCase(FControlNames[i]) then begin
  c:=FOwner.Controls[j];
  c.Left:=Round(NewX-c.Width div 2);
  c.Top:=Round(NewY-c.Height div 2);
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
3643DelphiFormEditor1. rész
3689DelphiProject és modul információk2. rész
3719DelphiMegnyitás, mentés3. rész
3749DelphiKódszerkesztő4. rész
3778DelphiForráskód írása, olvasása5. rész
3809DelphiInterfész a kódszerkesztő ablakhoz6. rész
3839DelphiKijelölt blokkok7. rész
3869DelphiA buffer beállításai8. rész
3899DelphiKörnyezeti és Project opciók9. rész
3929DelphiKurzor a kódszerkesztőben10. rész
3959DelphiKeresés és csere beállításai11. rész


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