HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Megjelenítés tulajdonságainak lekérdezését és beállítását végző komponens


Példaprogram letöltése

6283 bájt

A Vezérlőpult Megjelenítés nevű programjának Megjelenés lapján nagyon sok, a megjelenítéssel kapcsolatos tulajdonságot állíthatunk be. Ilyenek például a különböző helyeken használt betűtípus, a menüsor és a fejléc magassága, stb. Ebben a példában egy olyan komponenst készítünk, amellyel az ablakok nem kliens területére vonatkozó beállításokat tudjuk lekérdezni, sőt, a komponensen keresztül akár módosíthatjuk is azokat.

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.

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