
A mellékelt példaprogram megnyitása előtt a NonClientMetricsReg.pas-ban és NonClientmetrics.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens property-jeinek frissítése, vagyis az adatok lekérdezése a refresh eljárással történik. Ez az eljárás a SystemParametersInfo függvényt hívja meg, és egy TNonClientMetricsA típusú struktúrát tölt fel a megfelelő adatokkal.
tagNONCLIENTMETRICSA = packed record
cbSize: UINT;
iBorderWidth: Integer;
iScrollWidth: Integer;
iScrollHeight: Integer;
iCaptionWidth: Integer;
iCaptionHeight: Integer;
lfCaptionFont: TLogFontA;
iSmCaptionWidth: Integer;
iSmCaptionHeight: Integer;
lfSmCaptionFont: TLogFontA;
iMenuWidth: Integer;
iMenuHeight: Integer;
lfMenuFont: TLogFontA;
lfStatusFont: TLogFontA;
lfMessageFont: TLogFontA;
end;
TNonClientMetricsA = tagNONCLIENTMETRICSA;
A függvény meghívása előtt a struktúra cbSize mezőjében meg kell adnunk a struktúra méretét (SizeOf(TNonClientMetricsA)). A SystemParametersInfo függvény a következőképpen néz ki:
function SystemParametersInfo(uiAction, uiParam: UINT; pvParam: Pointer; fWinIni: UINT): BOOL; stdcall;
A lekérdezéshez az uiAction paraméterben a SPI_GETNONCLIENTMETRICS konstanst kell megadnunk. Az uiParam paraméterben a struktúra méretét, tehát a cbSize mezőben beállított értéket kell megadni. A pvParam paraméterben adhatjuk meg a struktúra címét, az fWinIni paramétert pedig jelen esetben nem használjuk, tehát értéke legyen 0.
A lekérdezés után a struktúra mezőinek értékeit kimásoljuk a megfelelő property-kbe. Itt csak a betűtípusok adataival van egy kis gond, mivel azokat egy-egy TLogFont struktúrában kapjuk meg, amely értelemszerűen nem kompatíbilis a TFont osztállyal. Ezen egy belső eljárással segítünk (SetFontProp).
A property-k értékeinek módosításakor a változtatások nem kerülnek azonnal aktualizálásra, ehhez az Update eljárást kell használni. Ebben az eljárásban fordított a helyzet mint a Refresh eljárásban, de itt is a SystemParametersInfo függvényt fogjuk használni. Még a paraméterezés is szinte teljesen megegyezik, különbség csak az első és az utolsó paraméterben van. Az első paraméterben a SPI_SETNONCLIENTMETRICS konstanst kell megadnunk, az utolsóban pedig igaz értéket adunk meg (longint típusban), ami jelzi az összes futó alkalmazásnak, hogy bizonyos rendszer paraméterek megváltoztak. Persze itt a függvény meghívása előtt a TNonClientMetricsA struktúrát fel kell tölteni a megfelelő adatokkal. A betűtípus adatok átalakítására itt is egy belső eljárást használunk (GetFontProp).
Mivel bizonyos tulajdonságok megváltozása más tulajdonságok megváltozását is magával vonhatja (pl. a Caption betűtípus méretének változása a Caption magasságára is hatással van), ezért az aktualizálás után meghívjuk a Refresh eljárást is a megváltozott adatok lekérdezéséhez.
A Refresh és Update eljárásokat szerkesztési időben is meghívhatjuk a komponens menüjéből.