|
|
Windows asztal ikon feliratok színének beállítása programból
|
|
Példaprogram letöltése
5991 bájt
|
A Windows felülete többé-kevésbé tesztre szabható, rengeteg beállítási lehetőség van, amivel a megjelenését szabályozhatjuk. Van azonban néhány tulajdonság, amit nem tudunk módosítani, legalábbis közvetlenül Windows segédprogrammal nem. A mellékelt példaprogram képes az Asztalon található ikonok szöveg- és háttérszínének megváltoztatására, sőt, a szöveg hátterének átlátszóvá tételére, aminek következtében az ikonok feliratai mögött a háttérkép látszik. Windows 2000 esetében még egy további lehetőséget állíthatunk segítségével, az Asztalon található ikonok megjelenítési formáját is megváltoztathatjuk, így akár listaszerűen is megjeleníthetjük az Asztal tartalmát.
Elöljáróban annyit kell tudnunk, hogy az Asztal nem más, mint egy TListView komponens, pontosabban "SysListView32". Ennek kell megszereznünk a Handle azonosítóját, amit felhasználva különböző tulajdonságokat kérdezhetünk le, illetve módosíthatunk.
A Handle megszerzése viszonylag egyszerű, a GetWindow függvénnyel történik. Ennek első paramétere egy ablak Handle azonosítója, míg a második egy konstans, amely azt határozza meg, hogy milyen ablakot keresünk. A GW_CHILD konstans a megadott ablak első child ablakának Handle-jét fogja keresni.
FHandle:=GetWindow(GetWindow(FindWindow('ProgMan', nil), GW_CHILD), GW_CHILD);
Ha megvan a Handle, akkor ellenőrizzük, hogy az valóban a szükséges osztályból származik. A GetClassName függvény a paraméterként megadott Handle-ból megállapítja annak típusát, és a második paraméterként megadott bufferben visszaadja a nevét. A harmadik paraméter a buffer mérete.
GetClassName(FHandle, buff, SizeOf(buff));
Ha a típus SysListView32, akkor ettől kezdve ugyanúgy kezelhetjük, mintha egy TListView komponens lenne, bár a tulajdonságok elérése egy kicsit más. A property-ket lekérdezhetjük, illetve módosíthatjuk a SendMessage függvénnyel úgy, hogy a megfelelő üzeneteket küldjük a ListView-nek. Van azonban egy kényelmesebb megoldás, a "ListView_" karaktersorozattal kezdődő függvények az előző módszernek az egyszerűsített változatai, amiket kényelmesebben tudunk használni, mint az üzenetküldést.
Most nézzük, hogy a bevezetőben említett tulajdonságokat hogyan kérdezhetjük le, illetve hogyan módosíthatjuk.
Az ikon felirat színének lekérdezése a ListView_GetTextColor függvénnyel történhet. A függvénynek egy paramétere van, a ListView Handle azonosítója. Ezt a paramétert az összes függvénynél meg kell adni. A visszatérési érték a szöveg színe. A szín módosítása hasonlóképpen történik, ehhez a ListView_SetTextColor függvényt kell használni. A függvény az azonosítón kívül plusz egy paraméterrel rendelkezik, az új színnel.
A Set függvények, vagyis amelyekkel egy tulajdonságot adunk meg általában logikai típusúak, és igaz értékkel térnek vissza, ha a módosítás sikerült, és hamissal, ha nem.
A szöveg háttérszínének lekérdezése és módosítása hasonlóképpen történik, a ListView_GetTextbkColor és a ListView_SetTextBkColor függvényekkel. Itt viszont van egy trükk, amivel a szöveg háttérszínét eltüntethetjük. Ehhez nem kell mást tennünk, mint a szín helyett a CLR_NONE konstanst megadni.
A módosítások után ne felejtsük el frissíteni a képet, ezt a következőképpen tehetjük meg:
ListView_RedrawItems(FHandle, 0, ListView_GetItemCount(FHandle)-1);
UpdateWindow(FHandle);
A ListView_RedrawItems függvény a paraméterként megadott sorszámú elemeket frissíti. Az első paraméter az első frissítendő elem sorszáma, míg az utolsó paraméter az utolsóé. A ListView_GetItemCount függvénnyel lekérdezhetjük, hogy összesen hány elem van.
A következő trükk csak Windows 2000 alatt működik. A ListView Style tulajdonságát fogjuk módosítani. A GetWindowLong függvénnyel lekérdezzük egy dword típusú változóba a jelenlegi tulajdonságokat, és egy logikai művelettel töröljük azokat a biteket, amelyek a megjelenítés stílusát határozzák meg. Ezután a SetWindowLong függvénnyel beállítjuk a stílust meghatározó bitet a CheckBox2 Checked property-jének értékétől függően. Az LVS_SMALLICON stílus listaszerűen jeleníti meg az elemeket, míg az LVS_ICON a normál, megszokott formában.
var
dwstyle: dword;
...
dwstyle:=GetWindowLong(FHandle, GWL_STYLE) and (not LVS_TYPEMASK);
if CheckBox2.Checked then
SetWindowLong(FHandle, GWL_STYLE, dwstyle or LVS_SMALLICON)
else
SetWindowLong(FHandle, GWL_STYLE, dwstyle or LVS_ICON);
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 446. 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!
|