Delphi - Komponens oldalarány megtartása átméretezéskor

forráskód letöltése
Bizonyos vizuális komponenseknél fontos lehet, hogy az átméretezéskor az oldalak aránya ne változzon, például a szélesség és magasság mindig megegyezik. Ebben a példában megnézzük, hogy hogyan lehet ezt megoldani.
A mellékelt példaprogram megnyitása előtt a SquareControl.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A feladatban egy olyan komponenst készítünk a TCustomControl osztályból származtatva, amelynek szélessége és magassága minden esetben meg kell, hogy egyezzen. Ebben az esetben felmerülhet néhány kérdés, például hogy melyik méret lesz a mérvadó, vagyis melyikhez igazítjuk a másikat. Erre valószínűleg az alábbi szabályok alkalmazása tűnik a legmegfelelőbb megoldásnak:
  • ha csak a szélességet változtatjuk, akkor a magasságot a beállított szélességre módosítja;
  • ha csak a magasságot változtatjuk, akkor a szélességet a beállított magasságra módosítja;
  • ha mindkét irányban változik a méret, akkor a nagyobb változtatás lesz a mérvadó.
Hogy a méretváltozás mértékét ellenőrizni tudjuk, nyilván az előző méretet el kell tárolni. Ehhez egy globális változót használunk (FSize). Mivel esetünkben a szélesség és magasság megegyezik, elég egy változó, viszont ha az oldalak aránya nem 1:1, akkor két változó kell, és a méretváltozás mértékét nem pixelben, hanem százalékban kell összehasonlítani.
Az ellenőrzést legcélszerűbb a Resize eljárásban elvégezni, mivel ez mindig automatikusan meghívódik, amikor a komponens mérete megváltozik.