|
|
Bmp képek elhelyezése a menüben
|
|
Példaprogram letöltése
14308 bájt
|
Ha szeretnénk egészen egyedi kinézetű menüket készíteni, lehetőségünk van arra, hogy szöveg helyett képeket helyezzünk el az egyes menüpontokban. Ezekkel azután ugyanolyan műveleteket végezhetünk, mint a hagyományos szöveges menükkel, így kijelölhetjük, letilthatjuk, engedélyezhetjük azokat. A mai cikkben azt mutatjuk be, hogyan is kell az ilyen menüket létrehozni.
Létezik egy ModifyMenu nevű Windows függvény, ami lehetőséget biztosít számunkra, hogy a programunkban felhasznált menük tulajdonságait megváltoztathassuk. Felépítése a következő:

ModifyMenu
BOOL ModifyMenu(
HMENU hMnu,
UINT uPosition,
UINT uFlags,
PTR uIDNewItem,
LPCTSTR lpNewItem
);
Paraméterek
HMENU hMnu
Annak a menünek az azonosítója, amelynek a tulajdonságát meg szeretnénk változtatni.
UINT uPosition
Annak a menu item-nek a megnevezése, melyet az uFlags paraméterben meghatározott módon szeretnénk megváltoztatni.
UINT uFlags
Flag-eket specifikál, melyek az uPosition paraméterben megadott menu item tulajdonságaihoz engednek hozzáférést. Ennek értéke az első két flag közül az egyik, illetve a többi flag közül legalább egynek a kombinációja kell, hogy legyen:
| MF_BYCOMMAND |
Azt jelzi, hogy a menu item az uPosition paraméterben név szerint lett azonosítva. Ez a flag az alapértelmezett, amennyiben sem ezt, sem az MF_BYPOSITION flag-et nem specifikáljuk. |
| MF_BYPOSITION |
Azt jelzi, hogy az uPosition paraméterben a menu item pozíciója lett megadva. Ez a pozíciószám a menü zéró-pontjától számított érték. |
| MF_BITMAP |
Bitkép használata almenüként. Az lpNewItem paraméter tartalmazza a bitkép handle-jét. |
| MF_CHECKED |
Egy kijelölés jelet (checkmark) helyez el a menüelem mellett. |
| MF_DISABLED |
Letiltja a menüelem használatát. Nem lehet azt kiválasztani, de nem szürkül be. |
| MF_ENABLED |
Engedélyezi a menüelem használatát és megszünteti annak szürke állapotát. |
| MF_GRAYED |
Letiltja a menüelemet és beszürkíti azt. Bitképek esetén nem működik. |
| MF_MENUBARBREAK |
Drop-down menü, sub menü, vagy shortcut menü esetén az újonnan létrejött menüoszlop egy függőleges vonallal el lesz választva a régi menüoszloptól. |
| MF_MENUBREAK |
Az új menüelemet egy új sorba vagy új oszlopba helyezi (drop-down menü, sub menü vagy shortcut menü esetén) elválasztó jel nélkül. |
| MF_OWNERDRAW |
Azt jelzi, hogy saját készítésű menüelemről van-e szó. Mielőtt a menü először megjelenítésre kerülne, az ablak, amelyen a menü van, kap egy WM_MEASUREITEM üzenetet, hogy a menü szélességét és hosszát határozza meg. Ezután egy WM_DRAWITEM üzenetben értesíti az ablakot kirajzoló eljárást a paraméterekről. |
| MF_POPUP |
Azt jelzi, hogy a menü elem egy drop-down vagy sub menüt nyit meg. Az uIDNewItem paraméter specifikálja a drop-down vagy sub menü handle-jét. Ez a flag arra használható, hogy megnevezést adjunk annak a menüelemnek, amely az előbb felsorolt almenük egyikét megnyitja. |
| MF_SEPARATOR |
Egy vízszintes elválasztó vonalat rajzol két menüelem közé. Az lpNewItem és uIDNewItem paramétereket ekkor figyelmen kívül hagyjuk. |
| MF_STRING |
Azt jelzi, hogy a specifikált menüelem szöveget tartalmaz. Az lpNewItem paraméter a string-re mutató pointer. |
| MF_UNCHECKED |
Megszünteti egy menüelem kijelölését. |
PTR uIDNewItem
A módosított menüelem nevét specifikálja, vagy MF_POPUP flag esetén, a drop-down menü vagy a sub menü handle-jét.
LPCTSTR lpNewItem
A megváltoztatott menüelem tartalmára mutató pointer. Ennek értéke attól függ, hogy az uFlag paraméterben az MF_BITMAP, MF_OWNERDRAW és MF_STRING közül melyik szerepel.
Visszatérési érték
Amennyiben a függvény futása sikeres volt, egy nem nulla értéket kapunk eredményként, ellenkező esetben nullát.
Megjegyzés
Az uFlag paraméterben a következő kombinációkat nem lehet alkalmazni:
- MF_BYCOMMAND és MF_BYPOSITION
- MF_DISABLED, MF_ENABLED, és MF_GRAYED
- MF_BITMAP, MF_STRING, MF_OWNERDRAW, és MF_SEPARATOR
- MF_MENUBARBREAK és MF_MENUBREAK
- MF_CHECKED és MF_UNCHECKED
Ezek után lássuk, hogyan alkalmazhatjuk mindezt a programunkban. Először is egy MainMenu komponenst helyezünk a Form-ra, amit átnevezünk BmpMainMenu-re. Ezután létrehozunk egy almenüt, hat menüelemmel. Ezeket sorra NumberOne, NumberTwo… NumberSix-nek nevezzük el. Az almenü második eleméhez készítünk egy újabb almenüt, melyben három elemet hozunk létre. Ezeket SubOne… SubThree-nek nevezzük el. Most lássuk a programkódunkat:
Létrehozunk egy bitmap objektumot, melybe betöltjük a képünket.
bmp:=TBitmap.Create;
bmp.LoadFromFile('animare1.bmp');
Meghívjuk a ModifyMenu függvényt. Első paraméterben a főmenü handle-jét adjuk meg, másodikként a módosítandó menüelem nevét, harmadikként azt jelezzük, hogy bitképet szeretnénk elhelyezni benne, a negyedik paraméterbe a módosított menüelem neve kerül, míg az ötödikbe a bitkép handle-jére mutató pointer.
ModifyMenu(BmpMainMenu.Handle,NumberOne.Command,MF_BYCOMMAND or
MF_BITMAP,NumberOne.Command,pointer(bmp.Handle));
Ezt a három lépést végezzük el minden egyes menüelem esetében. Az uFlag paraméterben megadható flag-ekkel más-más tulajdonságú menüelemet hozhatunk létre. Esetünkben például a negyedik menüelem elé egy kijelölő jelet helyeztünk, az MF_CHECKED flag segítségével.
bmp:=TBitmap.Create;
bmp.LoadFromFile('animare1.bmp');
ModifyMenu(BmpMainMenu.Handle,NumberFour.Command,MF_CHECKED or
MF_BITMAP,NumberFour.Command,pointer(bmp.Handle));
Hasonlóképpen az ötödik menüelemet letiltottuk az MF_DISABLED, míg a hatodikat beszürkítettük az MF_GRAYED flag segítségével. Ez utóbbi esetében, mivel bitkép van a menüben, csak a letiltás működik, a szürkítés nem.
További almenük esetében a fentiekhez hasonló módon járunk el.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2003 évkönyv 501. 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!
|