home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 March
/
Chip_2002-03_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d5
/
cak
/
CAKDIR.ZIP
/
CakDirList.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-05-17
|
3KB
|
121 lines
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.