Delphi - Országok listáját tartalmazó ComboBox

forráskód letöltése
Ha a felhasználónak egy ország nevet kell megadnia, akkor célszerű az országok listáját például egy ComboBox-ban elhelyezni. Ehhez kellene még egy adatbázis is az országok neveivel. A mellékelt komponens megvalósítja magát a ComboBox-ot, de ami a lényeg, hogy nem lesz szükség az országok listáját tartalmazó adatbázisra, mivel a Windows ezt tartalmazza.
A mellékelt példaprogram megnyitása előtt a CountryComboBox.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Az új komponens a TCustomComboBox osztályból van származtatva, és a ComboBox komponenstől annyiban fog különbözni, hogy az Items property-t nem tesszük publikussá, viszont létrehozunk egy új, Countries nevű property-t, ami tulajdonképpen az Items megfelelője lesz. Ez annyira így van, hogy a Countries property-n keresztül a public Items property-t érjük el, viszont gondoskodunk róla, hogy ez csak olvasható legyen (a SetCountries eljárást üresen hagyjuk). A property-be beolvassuk az országok neveit, melyeket a Registry adatbázisban találunk meg, a „HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Telephony\Country List” kulcs alatt. Ez alatt a kulcs alatt további kulcsokat találunk, melyekben egy-egy ország adatai vannak. Minden ilyen kulcson belül van egy Name nevű érték, amely az ország nevét tartalmazza.
Az ország nevek beolvasását a ReloadCountryList eljárás végzi. Ebben megnyitjuk a fent említett kulcsot, majd egy TStringList típusú objektumba beolvassuk az országokhoz tartozó kulcsok neveit. Ezután ezen a listán egy ciklusban végigmegyünk, és minden ország nevét egyenként beolvassuk és beírjuk a Countries property-be.
Az eljárás elején elmentjük a Sorted property értékét egy változóba, majd hamisra állítjuk. Az ország nevek beolvasása után visszaállítjuk az eredeti értéket. Ha az érték igaz volt, akkor az ország nevek ABC sorrendben lesznek megjelenítve.
A Loaded eljárást azért írtuk felül, hogy a ComboBox alapértelmezett értékét megadhassuk. Ez jelen esetben csak a magyar nyelvű Windows esetén fog működni, mivel csak ebben található meg a Magyarország a magyar nevén. Az értékadást azért a Loaded eljárásban kell megtennünk, mert a Constructor-ban ugyanez a művelet hibaüzenethez vezet, mivel a komponens azonnal meg is szeretné jeleníteni az új értéket.