Ide o to, že nevieš čo v mojom programe ako bude. Obrázky sú v resource a budú nemenné. Majú pevné rozmery a tie sa nikdy nebudú meniť. Je nezmysel, aby som si zisťoval programovo rozmer obrázka, ktorý už dopredu viem. Ak v budúcnosti dám iné obrázky (o čom pochybujem), tak si tie rozmery v tej statickej premennej len zmením.
Prečo nie konštanta? Pretože konštanta je viditeľná von a ja potrebujem tú hodnotu len v tejto jedinej triede a nikde inde. Takže ju potrebujem zapúzdriť do nej. Má to svoje výhody a to napríklad pri použití doplňovača syntaxe mi nebude túto premennú ponúkať, pretože v triede bude v časti private, čiže ju nič okrem tejto triedy vidieť nebude. Keďže statická premenná nie je v skutočnosti konštanta, programovo ju môžem zmeniť. To ale neurobím, pretože to nebude mať význam. Budem ju používať ako konštantu. Keďže to bude konštanta (pre mňa) nemá význam, aby s každou inštanciou triedy vznikala znova a tak ju tieto inštancie budú zdielať ako si správne napísal.
Prečo nie define? No lebo Delphi, resp. Lazarus nič také nepozná, aspoň nie v takom zmysle ako o tom uvažuješ ty.
A aký je príklad využitia statických premenných? Napríklad v matematickej triede, ktorá bude počítať rôzne funkcie sa dajú takéto premenné použiť ako konštanty (napr. pí a podobne). Používateľ túto konštantu nezmení, pretože mu to trieda nedovolí a trieda túto konštantu tiež nemá dôvod meniť.
Takže všetko má svoj zmysel. Aj používanie statických členov pri programovaní. Musel by si viac programovať v OOP, aby si pochopil rôzne princípy. Napr., kým som ja nevidel C# a spôsob programovania v ňom, tak som kopec vecí z OOP nerozumel. Hlavne som nechápal základnému princípu OOP a to zapúzdreniu. Metódy som volal 5. cez 9. a podstatné bolo, že to fungovalo. Potom som sa tomu trochu venoval viac a pochopil som, že kopec vecí, čo som kedysi robil okľukou sa dalo robiť oveľa lepšie.