HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Könyvtárválasztás lehetőségének letiltása a TOpenDialog komponensben


Példaprogram letöltése

3943 bájt

A TOpenDialog komponens segítségével lehetővé tehetjük, hogy a felhasználó egy tetszőleges állományt válasszon ki a számítógép merevlemezéről. Van azonban arra is lehetőség, hogy a választási lehetőségeket egy adott mappára korlátozzuk, vagyis csak az abban található állományokat lehessen kiválasztani. Cikkünkben bemutatjuk, hogyan oldhatjuk ezt meg.

A mellékelt példában megjeleníthetünk a nyomógombbal egy OpenDialog ablakot, melynek a mappaválasztó legördülő listája nem látható, így akadályozva meg, hogy a felhasználó fölfelé haladjon a mappa-szerkezetben.
Ehhez a TOpenDialog komponens OnShow eseményében kell elvégeznünk néhány alapvető metódushívást. Az EnumChildWindows API metódust hívjuk először, mely a USER32.DLL-ben található, és a deklarációja a következő:
EnumChildWindows
BOOL EnumChildWindows(
HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam
);
A metódussal lekérdezhetők egy adott ablak gyermekablakai, gyermekobjektumai.
Paraméterek
HWND hWndParent
A szülő ablak kezelője.
WNDENUMPROC lpEnumFunc
A lekérdezéshez kapcsolódó CALLBACK függvény, melyet mi valósítunk meg.
LPARAM lParam
Most figyelmen kívül hagyjuk, értéke nulla.
Visszatérési érték
Sikeres művelet végrehajtás esetében nem nulla.
A metódus meghívásakor átadjuk a ChildrenEnum metódust paraméterként.
EnumChildWindows(GetParent(OpenDialog1.Handle), @ChildrenEnum, LongInt(0));
A ToolBarHandle egy globális változó, mely értéket a ChildrenEnum CALLBACK metódusban kap. A ChildrenEnum metódus kódja a következőképpen fest.
Először egy változóba minden lekérdezéskor megkapjuk az adott gyermekkontrol osztályának nevét.
SetLength(theClassName, 256);
GetClassName(AHandle, PChar(theClassName), 255);
Amennyiben a gyermekkontrol osztályának neve a „ToolbarWindow32” karakterlánccal azonos, akkor a kezelőjét elmentjük a globális változóba. Ezt követően a CALLBACK metódus visszatér.
tmpS := StrPas(PChar(theClassName));
if Pos('ToolbarWindow32', tmpS) > 0 then
begin
  ToolbarHandle := AHandle;
end;
A kapott kezelőt felhasználva a kontrolt elrejtjük.
if ToolbarHandle > 0 then
   ShowWindow(ToolbarHandle, SW_HIDE);
SendMessage(GetParent(OpenDialog1.Handle), CDM_HIDECONTROL, IDDROPDOWN, 0);
SendMessage(GetParent(OpenDialog1.Handle), CDM_HIDECONTROL, IDLOOKINLABEL, 0);
Erre a műveletre a SendMessage API metódust használjuk fel a megfelelő üzenettel, mely most a CDM_HIDECONTROL.

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