亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? unit1.pas

?? 一個(gè)功能強(qiáng)大的DBGRID控件
?? PAS
字號(hào):
unit Unit1;

{$I EhLib.Inc}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
  Dialogs, DB, MemTableEh, DBGridEh, ComCtrls, MemTableDataEh,
  PropFilerEh, PropStorageEh, DataDriverEh, Buttons, EhLibMTE, ExtCtrls,
  DBCtrls, ImgList, ShlObj, ComObj, ShellAPI, GridsEh;

type
  TForm1 = class(TForm)
    DBGridEh1: TDBGridEh;
    MemTableEh1: TMemTableEh;
    MemTableEh1FileDirName: TStringField;
    MemTableEh1FileDirPath: TStringField;
    MemTableEh1FileDirAttributes: TIntegerField;
    DataSource1: TDataSource;
    MemTableEh1IsDir: TBooleanField;
    MemTableEh1Id: TAutoIncField;
    MemTableEh1RefParent: TIntegerField;
    DBNavigator1: TDBNavigator;
    TreeImages: TImageList;
    DBGridEh2: TDBGridEh;
    mtFileList: TMemTableEh;
    dsFileList: TDataSource;
    mtFileListId: TAutoIncField;
    mtFileListFileDirName: TStringField;
    mtFileListFileDirPath: TStringField;
    mtFileListFileDirAttributes: TIntegerField;
    mtFileListFileSize: TIntegerField;
    mtFileListBooleanField: TBooleanField;
    SpeedButton1: TSpeedButton;
    MemTableEh1SubcLoaded: TBooleanField;
    ToolbarImages: TImageList;
    mtFileListImageIndex: TIntegerField;
    MemTableEh1IntegerField: TIntegerField;
    procedure FormCreate(Sender: TObject);
    procedure DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
      AFont: TFont; var Background: TColor; State: TGridDrawState);
    procedure SpeedButton1Click(Sender: TObject);
    procedure DBGridEh1Columns0GetCellParams(Sender: TObject;
      EditMode: Boolean; Params: TColCellParamsEh);
    procedure DataSource1DataChange(Sender: TObject; Field: TField);
    procedure DBGridEh2GetCellParams(Sender: TObject; Column: TColumnEh;
      AFont: TFont; var Background: TColor; State: TGridDrawState);
    procedure MemTableEh1AfterScroll(DataSet: TDataSet);
    procedure DBGridEh2Columns0GetCellParams(Sender: TObject;
      EditMode: Boolean; Params: TColCellParamsEh);
  private
    { Private declarations }
  public
    { Public declarations }
    CurPath: String;
    InAfterScroll: Boolean;
    Roots: TStringList;
    FIDesktopFolder: IShellFolder;
    function AddDir(APath: String; RefParent: Variant): Integer;
    function AddFiles(APath: String): Integer;
    procedure CreateRoot();
    procedure MemTableEh1Expanding(Sender: TObject; RecordNumber: Integer; var AllowExpansion: Boolean);
    procedure RecordsViewTreeNodeExpanding(Sender: TObject; Node: TMemRecViewEh; var AllowExpansion: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetShellImage(Path: String; Large, Open: Boolean): Integer;
var
  FileInfo: TSHFileInfo;
  Flags: Integer;
begin
  FillChar(FileInfo, SizeOf(FileInfo), #0);
  Flags := {SHGFI_PIDL or } SHGFI_SYSICONINDEX or SHGFI_ICON;
  if Open then Flags := Flags or SHGFI_OPENICON;
  if Large then Flags := Flags or SHGFI_LARGEICON
  else Flags := Flags or SHGFI_SMALLICON;
  {Result := }SHGetFileInfo(PChar(Path),
                0,
                FileInfo,
                SizeOf(FileInfo),
                Flags);
  Result := FileInfo.iIcon;
end;

function TForm1.AddDir(APath: String; RefParent: Variant): Integer;
var
  i: Integer;
  LSrch: TSearchRec;
  ImageIndex: Integer;
begin
  Result := 0;

  i := FindFirst(APath + '\*.*', faDirectory, LSrch);
  try
    while i = 0 do
    begin
      if (LSrch.Name <> '.') and (LSrch.Name <> '..') and ((LSrch.Attr and faDirectory) <> 0) then
      begin
//        if (LSrch.Attr and faDirectory) <> 0
//          then MemTableEh1.TreeList.DefaultNodeHasChildren := True
//          else MemTableEh1.TreeList.DefaultNodeHasChildren := False;
        ImageIndex := GetShellImage(APath + '\' + LSrch.Name, False, True);
        MemTableEh1.AppendRecord([Null, RefParent, LSrch.Name,
          APath + '\' + LSrch.Name, LSrch.Attr, (LSrch.Attr and faDirectory) <> 0,
          Null, ImageIndex]);
        Inc(Result);
      end;
      i := FindNext(LSrch);
    end;
  finally
    FindClose(LSrch);
  end;
end;

function TForm1.AddFiles(APath: String): Integer;

  function SafeInt64ToInt(Val64: Int64): Integer;
  begin
    if Val64 > MAXINT
      then Result := -1
      else Result := Val64;
  end;

var
  i: Integer;
  LSrch: TSearchRec;
  ImageIndex: Integer;
begin
  Result := 0;

  i := FindFirst(APath + '\*.*', faAnyFile, LSrch);
  mtFileList.DisableControls;
  try
    while i = 0 do
    begin
      if (LSrch.Name <> '.') and (LSrch.Name <> '..') then
      begin
        ImageIndex := GetShellImage(APath + '\' + LSrch.Name, False, True);
        mtFileList.AppendRecord([Null, LSrch.Name, APath + '\' + LSrch.Name,
          LSrch.Attr, SafeInt64ToInt(LSrch.Size), (LSrch.Attr and faDirectory) <> 0, ImageIndex]);
        Inc(Result);
      end;
      i := FindNext(LSrch);
    end;
    mtFileList.SortByFields('IsDir Desc, FileDirName');
  finally
    mtFileList.First;
    mtFileList.EnableControls;
    FindClose(LSrch);
  end;
end;

const
  Flags = SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  CreateRoot;
  Roots := TStringList.Create;
  MemTableEh1.Open;
  MemTableEh1.TreeList.KeyFieldName := 'Id';
  MemTableEh1.TreeList.RefParentFieldName := 'RefParent';
  MemTableEh1.TreeList.DefaultNodeExpanded := False;
//  MemTableEh1.TreeList.DefaultNodeHasChildren := False;
  MemTableEh1.TreeList.Active := True;

  AddDir('C:', Null);
  Roots.Clear;
  MemTableEh1.First;
  while not MemTableEh1.Eof do
  begin
    MemTableEh1.Edit;
    MemTableEh1['SubcLoaded'] := False;
    MemTableEh1.Post;
    Roots.AddObject(VarToStr(MemTableEh1['FileDirPath']), TObject(Integer(MemTableEh1['ID'])) );
    MemTableEh1.Next;
  end;
  for i := 0 to Roots.Count-1 do
    AddDir(Roots[i], Integer(Roots.Objects[i]));

  MemTableEh1.SortByFields('IsDir Desc, FileDirName');
  MemTableEh1.First;
//  MemTableEh1.OnTreeNodeExpanding := MemTableEh1Expanding;
  MemTableEh1.OnRecordsViewTreeNodeExpanding := RecordsViewTreeNodeExpanding;
//  AddDir(MemTableEh1['FileDirPath'], MemTableEh1['ID']);
  MemTableEh1.First;
end;

procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  if not VarIsNull(MemTableEh1['IsDir']) then
    if MemTableEh1['IsDir'] then
      AFont.Style := AFont.Style + [fsBold];
end;

procedure TForm1.MemTableEh1Expanding(Sender: TObject; RecordNumber: Integer; var AllowExpansion: Boolean);
var
  Id, ChildCount: Integer;
  Path: String;
  OldBM, RNBM: TBookmarkStr;
begin
  if MemTableEh1['SubcLoaded'] = True then Exit;
  MemTableEh1.DisableControls;
  try
  OldBM := MemTableEh1.Bookmark;
  MemTableEh1.RecNo := RecordNumber;
  RNBM := MemTableEh1.Bookmark;
  Id := MemTableEh1['ID'];
  Path := MemTableEh1['FileDirPath'];

{
  Roots.Clear;
  MemTableEh1.First;
  while not MemTableEh1.Eof do
  begin
    MemTableEh1.Edit;
    MemTableEh1['SubcLoaded'] := True;
    MemTableEh1.Post;
    Roots.AddObject(VarToStr(MemTableEh1['FileDirPath']), TObject(Integer(MemTableEh1['ID'])) );
    MemTableEh1.Next;
  end;
  for i := 0 to Roots.Count-1 do
    AddDir(Roots[i], Integer(Roots.Objects[i]));
}

  if MemTableEh1.TreeNodeHasChildren and (MemTableEh1.TreeNodeChildCount = 0) then
  begin
    ChildCount := AddDir(Path, Id);
    MemTableEh1.Bookmark := RNBM;
    MemTableEh1.TreeNode.SortByFields('IsDir Desc, FileDirName');
    MemTableEh1.TreeNodeHasChildren := (ChildCount > 0);
  end;
  if MemTableEh1.BookmarkValid(Pointer(OldBM)) then
    MemTableEh1.Bookmark := OldBM;
  finally
    MemTableEh1.EnableControls;
  end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
//  MemTableEh1.DisableControls;
//  MemTableEh1.EnableControls;
  MemTableEh1.TreeList.FullExpand;
end;

procedure TForm1.DBGridEh1Columns0GetCellParams(Sender: TObject;
  EditMode: Boolean; Params: TColCellParamsEh);
begin
//  Params.ImageIndex := mtFileList.FieldByName('ImageIndex').AsInteger;
  if not VarIsNull(MemTableEh1['IsDir']) then
    if MemTableEh1['IsDir'] then
      if MemTableEh1.TreeNodeExpanded
        then Params.ImageIndex := 5
        else Params.ImageIndex := 5;
end;

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if CurPath <> VarToStr(MemTableEh1['FileDirPath']) then
  begin
    mtFileList.EmptyTable;
    CurPath := VarToStr(MemTableEh1['FileDirPath']);
    AddFiles(CurPath);
  end;
end;

procedure TForm1.DBGridEh2GetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  if not VarIsNull(mtFileList['IsDir']) then
    if mtFileList['IsDir'] then
      AFont.Style := AFont.Style + [fsBold];
end;

procedure TForm1.MemTableEh1AfterScroll(DataSet: TDataSet);
//var
//  AllowExpansion: Boolean;
begin
{  if InAfterScroll then Exit;
  if (MemTableEh1.TreeNodeHasChildren = True) and (MemTableEh1.TreeNodeChildCount = 0) then
  begin
    InAfterScroll := True;
    try
      MemTableEh1Expanding(DataSet, DataSet.RecNo, AllowExpansion);
    finally
      InAfterScroll := False;
    end;
  end;}
end;

procedure TForm1.RecordsViewTreeNodeExpanding(Sender: TObject;
  Node: TMemRecViewEh; var AllowExpansion: Boolean);
var
  i: Integer;
begin
  MemTableEh1.DisableControls;
  if Node.Rec.DataValues['SubcLoaded', dvvValueEh] = True then Exit;
  try
    Roots.Clear;
    for i := 0 to Node.NodesCount-1 do
      Roots.AddObject(VarToStr(Node[i].Rec.DataValues['FileDirPath', dvvValueEh]), TObject(Integer(Node[i].Rec.DataValues['ID', dvvValueEh])) );

    for i := 0 to Roots.Count-1 do
      AddDir(Roots[i], Integer(Roots.Objects[i]));

    Node.Rec.DataValues['SubcLoaded', dvvValueEh] := True;
  finally
    MemTableEh1.EnableControls;
  end;
end;

procedure TForm1.CreateRoot;
var
  EnumList: IEnumIDList;
//  ID: PItemIDList;
//  NumIDs: LongWord;
  FileInfo: TSHFileInfo;
begin
  OLECheck(SHGetDesktopFolder(FIDesktopFolder));
//  FIShellFolder := FIDesktopFolder;

  TreeImages.Handle := SHGetFileInfo('',
                          0,
                          FileInfo,
                          SizeOf(FileInfo),
                          SHGFI_SYSICONINDEX or SHGFI_SMALLICON);

//  ToolbarImages.Clear;
//  ToolbarImages.AddImage(TreeImages,0);

{  TreeImages.Handle := SHGetFileInfo('C:\',
                          0,
                          FileInfo,
                          SizeOf(FileInfo),
                          SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
}
  OleCheck(
    FIDesktopFolder.EnumObjects(
      Application.Handle,
      Flags,
      EnumList)
  );

{  while EnumList.Next(1, ID, NumIDs) = S_OK do
  begin
    ShellItem := New(PShellItem);
    ShellItem.ID := ID;
    ShellItem.DisplayName := GetDisplayName(FIShellFolder, ID, False);
    ShellItem.Empty := True;
    FIDList.Add(ShellItem);
  end;}
end;

procedure TForm1.DBGridEh2Columns0GetCellParams(Sender: TObject;
  EditMode: Boolean; Params: TColCellParamsEh);
begin
  Params.ImageIndex := mtFileList.FieldByName('ImageIndex').AsInteger;
end;

initialization
  DefFontData.Name := 'Microsoft Sans Serif';
end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品91久久久久同性| 99久久精品免费| 91精品国产综合久久婷婷香蕉| 亚洲精品ww久久久久久p站| 色88888久久久久久影院野外| 亚洲午夜在线视频| 欧美电影影音先锋| 国产一区二区视频在线| 国产精品久久久久一区二区三区| 色婷婷国产精品综合在线观看| 亚洲国产综合在线| 精品国产伦一区二区三区免费| 国产精华液一区二区三区| 中文字幕综合网| 欧美一区二区三区视频免费| 黄色日韩三级电影| 亚洲欧美日韩在线| 日韩视频一区二区| 成人app网站| 日日夜夜精品视频免费| 国产欧美日韩三区| 欧美日韩亚洲综合一区| 国内国产精品久久| 亚洲码国产岛国毛片在线| 91精品国产91久久综合桃花| 国产91高潮流白浆在线麻豆| 一区二区三区中文字幕精品精品| 欧美成人性战久久| 色天天综合色天天久久| 国产毛片一区二区| 午夜久久久久久| 国产精品网站在线观看| 91麻豆精品久久久久蜜臀| 成人性视频免费网站| 视频一区在线播放| 自拍偷拍亚洲激情| 久久品道一品道久久精品| 在线一区二区观看| 国产精品一区二区久久精品爱涩| 午夜精品影院在线观看| 亚洲婷婷国产精品电影人久久| 欧美一个色资源| 91麻豆免费在线观看| 国产一二精品视频| 日韩精品亚洲一区二区三区免费| 国产精品福利在线播放| 26uuu色噜噜精品一区二区| 欧美日韩亚洲高清一区二区| 成人毛片老司机大片| 久草热8精品视频在线观看| 亚洲永久免费视频| 日韩伦理电影网| 国产欧美一区二区三区鸳鸯浴| 欧美一级欧美三级在线观看| 色吧成人激情小说| 不卡的av中国片| 狠狠色丁香婷综合久久| 美女网站视频久久| 日本91福利区| 丝瓜av网站精品一区二区| 亚洲狼人国产精品| 最新国产精品久久精品| 国产日韩综合av| 久久婷婷国产综合精品青草| 日韩午夜激情免费电影| 欧美日韩久久不卡| 欧美色欧美亚洲另类二区| 99久久99久久精品免费看蜜桃| 国产91精品免费| 国产精品69毛片高清亚洲| 国产又黄又大久久| 国产一区美女在线| 国产一区二区在线免费观看| 狠狠狠色丁香婷婷综合激情| 久久成人久久爱| 久久精品国产99国产| 韩国女主播成人在线| 国产一区二区三区四区五区入口 | 婷婷开心激情综合| 一区二区三区精品| 亚洲一区二区av电影| 亚洲午夜久久久| 日韩高清在线一区| 久久成人免费电影| 国产成人午夜精品5599 | 爽爽淫人综合网网站| 首页国产丝袜综合| 精品一区二区三区香蕉蜜桃| 九九国产精品视频| 国产精品2024| 97成人超碰视| 欧美日韩不卡一区二区| 欧美成人国产一区二区| 国产午夜精品福利| 亚洲美腿欧美偷拍| 免费的国产精品| 国产超碰在线一区| 色噜噜夜夜夜综合网| 91麻豆精品国产91久久久久久| 精品久久久久久久久久久久久久久久久| xnxx国产精品| 亚洲精品免费电影| 免费看欧美女人艹b| 国产成人aaa| 欧美性色aⅴ视频一区日韩精品| 91精品国产一区二区人妖| 久久久久久久久久久久久久久99 | 色妹子一区二区| 欧美一区二区三区四区久久| 国产视频一区在线观看| 亚洲欧美一区二区久久 | 亚洲综合免费观看高清完整版| 亚洲一区二区五区| 国内精品伊人久久久久av影院| a4yy欧美一区二区三区| 欧美一区二区黄| 国产精品久久久久久亚洲毛片 | 亚洲国产aⅴ天堂久久| 久久99精品久久久久久久久久久久| 不卡的电影网站| 欧美一区二区三区视频免费| 中文字幕一区二区三| 免费成人你懂的| 91蝌蚪国产九色| 精品久久久久久久人人人人传媒| 亚洲欧美日韩综合aⅴ视频| 另类小说欧美激情| 在线精品国精品国产尤物884a| 久久欧美一区二区| 秋霞午夜鲁丝一区二区老狼| 97久久久精品综合88久久| 精品国产一区二区亚洲人成毛片 | 欧美成人精品二区三区99精品| 亚洲精品欧美激情| 国产夫妻精品视频| 这里是久久伊人| 亚洲一区二区三区在线看| 国产成人免费视| 日韩视频不卡中文| 亚洲综合成人在线| 成人免费观看av| 精品va天堂亚洲国产| 日本一不卡视频| 欧美视频完全免费看| 亚洲人成精品久久久久久| 国产99一区视频免费| 精品乱人伦小说| 久久精品国产亚洲a| 在线成人av网站| 亚洲成人午夜影院| 在线一区二区视频| 亚洲欧美日韩小说| 9l国产精品久久久久麻豆| 欧美国产精品一区二区三区| 精久久久久久久久久久| 日韩欧美国产一二三区| 五月婷婷综合激情| 欧美日高清视频| 日韩在线播放一区二区| 欧美午夜片在线观看| 亚洲一区二区av在线| 欧洲av一区二区嗯嗯嗯啊| 亚洲精品国久久99热| 色偷偷成人一区二区三区91| 亚洲黄色小视频| 日本福利一区二区| 亚洲国产精品精华液网站| 欧美午夜精品电影| 香蕉久久一区二区不卡无毒影院| 欧美日韩久久久一区| 天天影视色香欲综合网老头| 在线综合亚洲欧美在线视频| 欧美a一区二区| 精品国产乱码久久| 国产ts人妖一区二区| 国产精品白丝在线| 色综合咪咪久久| 偷偷要91色婷婷| 2017欧美狠狠色| 不卡一区二区在线| 有码一区二区三区| 欧美精品少妇一区二区三区| 看电影不卡的网站| 欧美国产综合一区二区| 一本色道久久综合亚洲精品按摩| 亚洲影视资源网| 精品久久久久久久久久久院品网| 国产精品一二三四五| 亚洲欧美日韩成人高清在线一区| 在线免费av一区| 日韩黄色免费网站| 久久久久一区二区三区四区| 99r国产精品| 日韩精品一二三区| 欧美国产欧美亚州国产日韩mv天天看完整| 99精品久久99久久久久| 日韩中文字幕区一区有砖一区 | 洋洋成人永久网站入口| 欧美电视剧在线观看完整版| www.爱久久.com|