|
|
FolderEdit komponens, mappák elérési útvonalának szerkesztéséhez
|
|
Példaprogram letöltése
17206 bájt
|
Programokban gyakran előfordul, hogy egy elérési útvonalat kell egy adatbeviteli mezőben bekérni a felhasználótól. Ez általában úgy szokott történni, hogy felteszünk egy Edit komponenst, mellé pedig egy Button-t, amivel egy mappa dialógus ablak nyitható. A mellékelt komponenssel egyszerűbb lesz a dolog, mert az Edit tartalmaz egy olyan gombot, amivel egy dialógus ablakot nyithatunk, majd az abban kiválasztott mappa elérési útvonalát beírjuk az Edit-be.
A mellékelt példaprogram megnyitása előtt a FolderEdit.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Mivel itt tulajdonképpen egy speciális Edit komponensről van szó, az új osztályt a TCustomEdit osztályból származtatjuk. Ez az Edit komponens egy SpeedButton komponenst fog tartalmazni. A SpeedButton komponens Align property-jének értékét alRight-ra állítjuk. Ez azért jó, mert ha az Edit komponens mérete megváltozik, akkor a SpeedButton ezt automatikusan követi, így nem kell az átméretezést figyelni, és nem kell a gomb méreteit kiszámítani. Csak egyetlen mérettel kell foglalkoznunk, ez pedig a gomb szélessége, amit a ButtonWidth property-ben lehet módosítani.
Ha már Edit komponenst készítünk, akkor módosítjuk annak néhány tulajdonságát. Például ha az Enabled property értéke megváltozik, akkor nem csak a szöveg színe, hanem a komponens színe is jelzi ezt.
A CreateParams és CreateWnd eljárásokat is felül kell írnunk. Az előbbiben két flag-et kell megadnunk:
Params.Style := Params.Style or ES_MULTILINE or WS_CLIPCHILDREN;
Az ES_MULTILINE flag-et be kell állítanunk ahhoz, hogy az Edit komponens Text property-jének módosításakor a gomb komponensbe ne töröljön bele. Ekkor viszont az Enter billentyű lenyomásával akár több sort is meg lehetne adni, ami viszont megint nem jó, ezért a Change eljárást is felülírjuk, és gondoskodunk róla, hogy ez ne történhessen meg. Az Enter billentyű lenyomásának eseménye viszont bizonyos esetekben jól használható, ezért létrehozunk egy OnPressEnter eseményt, ami ekkor következik be.
Térjünk vissza a CreateWnd eljáráshoz. Ebben meg kell adnunk azt a területet, ami a tényleges szerkesztő rész területe, ami nem lóghat bele a gomb területébe. Kiszámítjuk ennek a területnek a koordinátáit, majd a SendMessage függvénnyel közöljük ezt az Edit komponenssel:
var
r: TRect;
begin
inherited;
SetRect(r, 0, 0, ClientWidth-FButton.Width-2, ClientHeight);
SendMessage(Handle, EM_SETRECT, 0, longint(@r));
A konstruktorban megadjuk, hogy az új Edit komponens tartalmazhat más komponenseket is. Ehhez csak a ControlStyle property értékét kell kiegészíteni a csAcceptsControls értékkel.
ControlStyle:=ControlStyle+[csAcceptsControls];
A gomb OnClick eseményéhez hozzárendeljük a ButtonClick eljárást, amelyben egy dialógus ablakot nyitunk, és a kiválasztott mappa elérési útvonalát beírjuk a Text property-be.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 600. 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!
|