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 >
Pascal/Delphi Source File  |  2001-05-17  |  3KB  |  121 lines

  1. unit CakDirList;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, FileCtrl;
  8.  
  9. type
  10.   TCakDirList = class(TListBox)
  11.   private
  12.     aEdit : TEdit;
  13.     function GetEdit : TEdit;
  14.     procedure SetEdit(Edit : TEdit);
  15.     procedure aEditOnEnter(Sender : TObject);
  16.     procedure aEditOnExit(Sender : TObject);
  17.     procedure aEditOnChange(Sender : TObject);
  18.     procedure ListOnClick(Sender : TObject);
  19.     procedure ListOnExit(Sender : TObject);
  20.     procedure pollpath(path : string);
  21.     { Private declarations }
  22.   protected
  23.     { Protected declarations }
  24.   public
  25.   Constructor Create(AOwner: TComponent); override;
  26.     { Public declarations }
  27.   published
  28.     property Edit : TEdit read GetEdit write SetEdit;
  29.     { Published declarations }
  30.   end;
  31.  
  32. procedure Register;
  33.  
  34. implementation
  35. Constructor TCakDirList.Create(AOwner: TComponent);
  36. begin
  37.         inherited Create(AOwner);
  38.         visible := false;
  39.         OnDblClick := ListOnClick;
  40.         OnExit := ListOnExit;
  41. end;
  42. procedure TCakDirList.ListOnClick(Sender : TObject);
  43. var k : string;
  44. begin
  45.         k := items.Strings[itemindex];
  46.         if k <> '' then
  47.                 if assigned(aEdit) then
  48.                         aEdit.text := k;
  49. end;
  50. procedure TCakDirList.pollpath(path : string);
  51. var     sr: TSearchRec;
  52.         k : string;
  53.         FileAttrs : integer;
  54. begin
  55.         FileAttrs := 0;
  56.         FileAttrs := FileAttrs + faDirectory;
  57.         Items.Clear;
  58.         k := Extractfilepath(path);
  59.         if k <> '' then
  60.         if FindFirst(path+ '*', FileAttrs, sr) = 0 then
  61.         begin
  62.         if Sr.Name[1] <> '.' then
  63.         if Directoryexists(k + sr.name) then
  64.         if Uppercase(k + Sr.Name) <> Uppercase(path) then
  65.         Items.Add(k + sr.Name);
  66.         while FindNext(sr) = 0 do
  67.                 if (sr.Attr and FileAttrs) = sr.Attr then
  68.                 if Sr.Name[1] <> '.' then
  69.                         if Directoryexists(k+Sr.Name) then
  70.                         if Uppercase(k + Sr.Name) <> Uppercase(Path) then
  71.                         Items.Add(k + sr.Name);
  72.         FindClose(sr);
  73.         end;
  74.  
  75. end;
  76.  
  77. procedure TCakDirList.ListOnExit(sender : TObject);
  78. begin
  79.         if not aedit.focused then
  80.         visible := false;
  81. end;
  82. procedure TCakDirList.aEditOnEnter(Sender : TObject);
  83. begin
  84.         visible := true;
  85. end;
  86. procedure TCakDirList.aEditOnExit(Sender : TObject);
  87. begin
  88.         if not Focused then
  89.         visible := false;
  90. end;
  91. procedure TCakDirList.aEditOnChange(Sender: TObject);
  92. begin
  93.         if assigned(aEdit) then
  94.                 begin
  95.                 Pollpath(aEdit.text);
  96.                 
  97.                 visible := false;
  98.                 if focused or aEdit.focused then
  99.                 if items.count > 0 then
  100.                 visible := true;
  101.                 end;
  102. end;
  103. function TCakDirList.GetEdit : TEdit;
  104. begin
  105.         result := aEdit;
  106. end;
  107. procedure TCakDirList.SetEdit(Edit : TEdit);
  108. begin
  109.         aEdit := Edit;
  110.         aEdit.OnEnter := aEditOnEnter;
  111.         aEdit.OnExit := aEditOnExit;
  112.         aEdit.OnChange := aEditOnChange;
  113. end;
  114.  
  115. procedure Register;
  116. begin
  117.   RegisterComponents('QZip', [TCakDirList]);
  118. end;
  119.  
  120. end.
  121.