home *** CD-ROM | disk | FTP | other *** search
- unit CakDirList;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, FileCtrl;
-
- type
- TCakDirList = class(TListBox)
- private
- aEdit : TEdit;
- function GetEdit : TEdit;
- procedure SetEdit(Edit : TEdit);
- procedure aEditOnEnter(Sender : TObject);
- procedure aEditOnExit(Sender : TObject);
- procedure aEditOnChange(Sender : TObject);
- procedure ListOnClick(Sender : TObject);
- procedure ListOnExit(Sender : TObject);
- procedure pollpath(path : string);
- { Private declarations }
- protected
- { Protected declarations }
- public
- Constructor Create(AOwner: TComponent); override;
- { Public declarations }
- published
- property Edit : TEdit read GetEdit write SetEdit;
- { Published declarations }
- end;
-
- procedure Register;
-
- implementation
- Constructor TCakDirList.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- visible := false;
- OnDblClick := ListOnClick;
- OnExit := ListOnExit;
- end;
- procedure TCakDirList.ListOnClick(Sender : TObject);
- var k : string;
- begin
- k := items.Strings[itemindex];
- if k <> '' then
- if assigned(aEdit) then
- aEdit.text := k;
- end;
- procedure TCakDirList.pollpath(path : string);
- var sr: TSearchRec;
- k : string;
- FileAttrs : integer;
- begin
- FileAttrs := 0;
- FileAttrs := FileAttrs + faDirectory;
- Items.Clear;
- k := Extractfilepath(path);
- if k <> '' then
- if FindFirst(path+ '*', FileAttrs, sr) = 0 then
- begin
- if Sr.Name[1] <> '.' then
- if Directoryexists(k + sr.name) then
- if Uppercase(k + Sr.Name) <> Uppercase(path) then
- Items.Add(k + sr.Name);
- while FindNext(sr) = 0 do
- if (sr.Attr and FileAttrs) = sr.Attr then
- if Sr.Name[1] <> '.' then
- if Directoryexists(k+Sr.Name) then
- if Uppercase(k + Sr.Name) <> Uppercase(Path) then
- Items.Add(k + sr.Name);
- FindClose(sr);
- end;
-
- end;
-
- procedure TCakDirList.ListOnExit(sender : TObject);
- begin
- if not aedit.focused then
- visible := false;
- end;
- procedure TCakDirList.aEditOnEnter(Sender : TObject);
- begin
- visible := true;
- end;
- procedure TCakDirList.aEditOnExit(Sender : TObject);
- begin
- if not Focused then
- visible := false;
- end;
- procedure TCakDirList.aEditOnChange(Sender: TObject);
- begin
- if assigned(aEdit) then
- begin
- Pollpath(aEdit.text);
-
- visible := false;
- if focused or aEdit.focused then
- if items.count > 0 then
- visible := true;
- end;
- end;
- function TCakDirList.GetEdit : TEdit;
- begin
- result := aEdit;
- end;
- procedure TCakDirList.SetEdit(Edit : TEdit);
- begin
- aEdit := Edit;
- aEdit.OnEnter := aEditOnEnter;
- aEdit.OnExit := aEditOnExit;
- aEdit.OnChange := aEditOnChange;
- end;
-
- procedure Register;
- begin
- RegisterComponents('QZip', [TCakDirList]);
- end;
-
- end.
-