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

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

?? dbgridehfinddlgs.pas

?? 一個(gè)功能強(qiáng)大的DBGRID控件
?? PAS
字號(hào):
{*******************************************************}
{                                                       }
{                    EhLib v3.6                         }
{                                                       }
{        Find dialog for TDBGridEh component            }
{                      Build 4.0.02                     }
{                                                       }
{     Copyright (c) 2004 by Dmitry V. Bolshakov         }
{                                                       }
{*******************************************************}

unit DBGridEhFindDlgs  {$IFDEF CIL} platform{$ENDIF};

interface

uses
  Windows, Messages, SysUtils, {$IFDEF EH_LIB_6} Variants, {$ENDIF}
  Classes, Graphics, Controls, Forms,
  Dialogs, DBCtrlsEh, StdCtrls, Mask, DBGridEh, ToolCtrlsEh;

type

  TColumnFieldItemEh = record
    Caption: String;
    Column: TColumnEh;
  end;

  TColumnFieldsArrEh = array of TColumnFieldItemEh;

  TDBGridEhFindDlg = class(TForm)
    cbText: TDBComboBoxEh;
    bFind: TButton;
    bCancel: TButton;
    Label1: TLabel;
    cbFindIn: TDBComboBoxEh;
    Label2: TLabel;
    cbMatchinType: TDBComboBoxEh;
    cbMatchType: TLabel;
    cbFindDirection: TDBComboBoxEh;
    Label3: TLabel;
    cbCharCase: TDBCheckBoxEh;
    cbUseFormat: TDBCheckBoxEh;
    Label4: TLabel;
    dbcTreeFindRange: TDBComboBoxEh;
    procedure bFindClick(Sender: TObject);
    procedure bCancelClick(Sender: TObject);
    procedure cbFindInChange(Sender: TObject);
    procedure cbTextChange(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FGrid: TCustomDBGridEh;
    IsFirstTry: Boolean;
    FFindColumnsList: TColumnsEhList;
    FCurInListColIndex: Integer;
    FColumnFields: TColumnFieldsArrEh;
    FSourceHeight: Integer;
//    function ColText(Col: TColumnEh): String;
  public
    procedure FillFindColumnsList;
    procedure FillColumnsList;
    procedure Execute(AGrid: TCustomDBGridEh; Text, ColumnFieldName: String;
      ColumnFields: TColumnFieldsArrEh; Modal: Boolean);
    property Grid: TCustomDBGridEh read FGrid;
  end;

var
  DBGridEhFindDlg: TDBGridEhFindDlg;

procedure ExecuteDBGridEhFindDialog(Grid: TCustomDBGridEh; Text, FieldName: String;
  ColumnFields: TColumnFieldsArrEh;  Modal: Boolean);

type
  TExecuteDBGridEhFindDialogProc = procedure (Grid: TCustomDBGridEh; Text, FieldName: String;
    ColumnFields: TColumnFieldsArrEh;  Modal: Boolean);
var
  ExecuteDBGridEhFindDialogProc: TExecuteDBGridEhFindDialogProc;

implementation

uses EhLibConsts;

{$R *.dfm}

procedure ExecuteDBGridEhFindDialog(Grid: TCustomDbGridEh; Text, FieldName: String;
  ColumnFields: TColumnFieldsArrEh;  Modal: Boolean);
begin
  if not Assigned(DBGridEhFindDlg) then
    DBGridEhFindDlg := TDBGridEhFindDlg.Create(Application);
  DBGridEhFindDlg.Execute(Grid, Text, FieldName, ColumnFields, Modal);
end;

procedure TDBGridEhFindDlg.Execute(AGrid: TCustomDBGridEh; Text, ColumnFieldName: String;
  ColumnFields: TColumnFieldsArrEh; Modal: Boolean);
var
  IntMemTable: IMemTableEh;
begin
  if (AGrid.DataSource <> nil) and (AGrid.DataSource.DataSet <> nil) and
     (AGrid.DataSource.DataSet.Active) and
      Supports(AGrid.DataSource.DataSet, IMemTableEh, IntMemTable) and
      IntMemTable.MemTableIsTreeList
  then
  begin
    Height := FSourceHeight;
    Label4.Visible := True;
    dbcTreeFindRange.Visible := True;
  end else
  begin
    ClientHeight := dbcTreeFindRange.Top;
    Label4.Visible := False;
    dbcTreeFindRange.Visible := False;
  end;
  FCurInListColIndex := -1;
  cbText.Text := Text;
  FGrid := AGrid;
  FillColumnsList;
  cbFindIn.ItemIndex := cbFindIn.Items.IndexOf(FGrid.Columns[FGrid.SelectedIndex].Title.Caption);
  IsFirstTry := True;
  Close;
  ActiveControl := cbText;
  FillFindColumnsList;
  if Modal then
  begin
    FormStyle := fsNormal;
    ShowModal;
  end else
  begin
    FormStyle := fsStayOnTop;
    Show;
    SetFocus;
  end;
end;

function AnsiContainsText(const AText, ASubText: string): Boolean;
begin
  Result := AnsiPos(AnsiUppercase(ASubText), AnsiUppercase(AText)) > 0;
end;

function AnsiContainsStr(const AText, ASubText: string): Boolean;
begin
  Result := AnsiPos(ASubText, AText) > 0;
end;

procedure TDBGridEhFindDlg.bFindClick(Sender: TObject);
var
  BackFind: Boolean;

  function CheckEofBof: Boolean;
  begin
    if (cbFindDirection.ItemIndex = 0) xor BackFind
      then Result := Grid.DataSource.DataSet.Bof
      else Result := Grid.DataSource.DataSet.Eof;
  end;

  procedure ToNextRec;
  begin
    if (cbFindDirection.ItemIndex = 0) xor BackFind then
    begin
      if FCurInListColIndex > 0 then
        Dec(FCurInListColIndex)
      else
      begin
        Grid.DataSource.DataSet.Prior;
        FCurInListColIndex := FFindColumnsList.Count-1;
      end;
    end else
    begin
      if FCurInListColIndex < FFindColumnsList.Count-1 then
        Inc(FCurInListColIndex)
      else
      begin
        Grid.DataSource.DataSet.Next;
        FCurInListColIndex := 0;
      end;
    end;
  end;

var
  RecordFounded: Boolean;
//  DataText: String;
//  TLocateTextOptionEh = (ltoCaseInsensitiveEh, ltoAllFieldsEh, ltoMatchFormatEh, ltoIgnoteCurrentPosEh);
  Options: TLocateTextOptionsEh;
  Direction: TLocateTextDirectionEh; // = (ltdUpEh, ltdDownEh, ltdAllEh);
  Matching: TLocateTextMatchingEh; // = (ltmAnyPartEh, ltmWholeEh, ltmFromBegingEh);
  TreeFindRange: TLocateTextTreeFindRangeEh;
  FieldName: String;

begin
  if GetKeyState(VK_CONTROL) < 0
    then BackFind := True
    else BackFind := False;
  if cbText.Items.IndexOf(cbText.Text) = -1 then
    cbText.Items.Add(cbText.Text);
//  RecordFounded := False;
  if Assigned(Grid) and Assigned(Grid.DataSource) and Assigned(Grid.DataSource.DataSet)
    and Grid.DataSource.DataSet.Active
  then
  begin
    Options := [];
    if not cbCharCase.Checked then
      Options := Options + [ltoCaseInsensitiveEh];
    if cbUseFormat.Checked then
      Options := Options + [ltoMatchFormatEh];
    if cbFindIn.ItemIndex = cbFindIn.Items.Count-1 then
      Options := Options + [ltoAllFieldsEh];
    case cbFindDirection.ItemIndex of
      0: Direction := ltdUpEh;
      1: Direction := ltdDownEh;
      2: Direction := ltdAllEh;
    else
      Direction := ltdAllEh;
    end;
    if BackFind then
      if Direction = ltdUpEh
        then Direction := ltdDownEh
        else Direction := ltdUpEh;
    if not IsFirstTry and (Direction = ltdAllEh) then
      Direction := ltdDownEh;
    case cbMatchinType.ItemIndex of
      0: Matching := ltmAnyPartEh;
      1: Matching := ltmWholeEh;
      2: Matching := ltmFromBegingEh;
    else
      Matching := ltmAnyPartEh;
    end;
    if (cbFindIn.ItemIndex >= 0) and (cbFindIn.Items.Objects[cbFindIn.ItemIndex] <> nil) then
      FieldName := TColumnEh(cbFindIn.Items.Objects[cbFindIn.ItemIndex]).FieldName
    else
      FieldName := '';
    case dbcTreeFindRange.ItemIndex of
      0: TreeFindRange := lttInAllNodesEh;
      1: TreeFindRange := lttInExpandedNodesEh;
      2: TreeFindRange := lttInCurrentLevelEh;
      3: TreeFindRange := lttInCurrentNodeEh;
    else
      TreeFindRange := lttInAllNodesEh;
    end;

    RecordFounded := Grid.LocateText(Grid, FieldName, cbText.Text,
      Options, Direction, Matching, TreeFindRange);
    if RecordFounded then
      IsFirstTry := False;

{    if (FFindColumnsList.Count = 0) then Exit;
    with Grid do
    begin
      Grid.DataSource.DataSet.DisableControls;
      SaveBookmark;
      try
        if (cbFindDirection.ItemIndex = 2) and IsFirstTry then
          Grid.DataSource.DataSet.First;
        if not IsFirstTry then
          ToNextRec;
        while not CheckEofBof do
        begin
          DataText := ColText(FFindColumnsList[FCurInListColIndex]);
          //CharCase
          if cbCharCase.Checked then
          begin
            //From any part of field
            if ( (cbMatchinType.ItemIndex = 0) and (
                AnsiContainsStr(DataText, cbText.Text) )
               ) or (
            //Whole field
              (cbMatchinType.ItemIndex = 1) and (DataText = cbText.Text)
              ) or ((cbMatchinType.ItemIndex = 2) and
            //From beging of field
              (Copy(DataText, 1, Length(cbText.Text)) =
                cbText.Text) ) then
            begin
              RecordFounded := True;
              IsFirstTry := False;
              Break;
            end
          end else
          //From any part of field
          if ( (cbMatchinType.ItemIndex = 0) and (
              AnsiContainsText(DataText, cbText.Text) )
             ) or (
          //Whole field
            (cbMatchinType.ItemIndex = 1) and (
            AnsiUpperCase(DataText) =
            AnsiUpperCase(cbText.Text))
            ) or ((cbMatchinType.ItemIndex = 2) and
          //From beging of field
            (AnsiUpperCase(Copy(DataText, 1, Length(cbText.Text))) =
            AnsiUpperCase(cbText.Text)) ) then
          begin
            RecordFounded := True;
            Grid.SelectedIndex := FFindColumnsList[FCurInListColIndex].Index;
            IsFirstTry := False;
            Break;
          end;
          ToNextRec;
        end;
        if not RecordFounded then RestoreBookmark;
      finally
        Grid.DataSource.DataSet.EnableControls;
      end;
      if not RecordFounded then
        ShowMessage(Format(SFindDialogStringNotFoundMessageEh, [cbText.Text]));
    end;
  }end;
end;

procedure TDBGridEhFindDlg.bCancelClick(Sender: TObject);
begin
  Close;
end;

procedure TDBGridEhFindDlg.FillColumnsList;
var
  i: Integer;
begin
  cbFindIn.OnChange := nil;
  cbFindIn.Items.Clear;
  if Length(FColumnFields) <> 0 then
  begin
    for i := 0 to Length(FColumnFields)-1 do
      cbFindIn.Items.AddObject(FColumnFields[i].Caption, FColumnFields[i].Column);
  end else
  begin
    for i:= 0 to FGrid.VisibleColumns.Count-1 do
      cbFindIn.Items.AddObject(FGrid.VisibleColumns[i].Title.Caption,
        FGrid.VisibleColumns[i]);
  end;
  cbFindIn.Items.AddObject('<全部>', nil);
  cbFindIn.KeyItems.Clear;
  for i:= 0 to cbFindIn.Items.Count-1 do
    cbFindIn.KeyItems.Add(cbFindIn.Items[i]);
  cbFindIn.OnChange := cbFindInChange;
end;

procedure TDBGridEhFindDlg.FillFindColumnsList;
var
  i: Integer;
begin
  if FFindColumnsList = nil then
    FFindColumnsList := TColumnsEhList.Create;
  FFindColumnsList.Clear;
  if cbFindIn.ItemIndex = -1 then
    cbFindIn.ItemIndex := cbFindIn.Items.Count-1;
  if cbFindIn.ItemIndex = cbFindIn.Items.Count-1 then //All
  begin
    for i := 0 to cbFindIn.Items.Count-2 do
      FFindColumnsList.Add(cbFindIn.Items.Objects[i])
  end else
    FFindColumnsList.Add(cbFindIn.Items.Objects[cbFindIn.ItemIndex]);

  cbTextChange(nil);
end;

procedure TDBGridEhFindDlg.cbFindInChange(Sender: TObject);
begin
  FillFindColumnsList;
end;

procedure TDBGridEhFindDlg.cbTextChange(Sender: TObject);
begin
  IsFirstTry := True;
  if cbFindDirection.ItemIndex = 0
    then FCurInListColIndex := FFindColumnsList.Count-1
    else FCurInListColIndex := 0;
end;

{function TDBGridEhFindDlg.ColText(Col: TColumnEh): String;
begin
  if cbUseFormat.Checked then
    Result := Col.DisplayText
  else if Col.Field <> nil then
    Result := Col.Field.AsString
  else
    Result := '';
end;}

procedure TDBGridEhFindDlg.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key in [VK_ESCAPE, VK_RETURN]) then
  begin
    if (ActiveControl <> nil) and
       (ActiveControl.Perform(CM_WANTSPECIALKEY, Key, 0) <> 0)
    then
      Exit;
    if (Key = VK_ESCAPE) and not (fsModal in FormState) then
     Close
    else if (Key = VK_RETURN) then
      bFindClick(nil);
    cbText.Modified := False;
  end;
end;

procedure TDBGridEhFindDlg.FormCreate(Sender: TObject);
begin
  FSourceHeight := Height;
end;

procedure TDBGridEhFindDlg.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FFindColumnsList);
end;

initialization
  ExecuteDBGridEhFindDialogProc := ExecuteDBGridEhFindDialog;
end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲成人av每日更新| 久久久精品日韩欧美| 韩国v欧美v日本v亚洲v| 亚洲视频一二三区| 精品国一区二区三区| 91老师国产黑色丝袜在线| 久久精品国产99国产精品| 一区二区三区不卡视频在线观看| 欧美xxxxxxxxx| 欧美少妇bbb| www.久久精品| 国产一区二区三区免费观看| 亚洲国产精品久久艾草纯爱| 中文字幕一区日韩精品欧美| 日韩片之四级片| 欧日韩精品视频| 不卡av在线网| 国产高清久久久| 精品一区二区在线观看| 亚洲成人资源在线| 日韩理论片网站| 国产精品免费aⅴ片在线观看| 精品国产区一区| 日韩欧美一二三区| 欧美肥妇bbw| 欧美日韩一区在线观看| 一本久道中文字幕精品亚洲嫩| 国产不卡在线播放| 加勒比av一区二区| 免费观看91视频大全| 五月天欧美精品| 亚洲va欧美va人人爽| 亚洲一二三四久久| 一区二区三区中文字幕电影| 亚洲欧美日本韩国| 亚洲女同女同女同女同女同69| 国产精品三级视频| 国产精品视频在线看| 国产欧美视频一区二区三区| 精品国产在天天线2019| 精品欧美黑人一区二区三区| 日韩视频一区二区三区| 欧美一区二区成人| 欧美电影精品一区二区| 日韩一二三区视频| 日韩欧美亚洲另类制服综合在线| 欧美一区二区国产| 精品国产91乱码一区二区三区 | 欧美日韩中文国产| 日本久久电影网| 欧美视频中文字幕| 欧美高清视频一二三区| 在线成人免费观看| 日韩美一区二区三区| 久久九九全国免费| 国产精品国产三级国产普通话99| 中文字幕一区视频| 一区二区三区欧美激情| 午夜av一区二区三区| 麻豆精品一区二区综合av| 国产在线精品一区二区夜色 | 欧美午夜一区二区三区| 欧美美女直播网站| 精品欧美一区二区在线观看| 久久精品亚洲麻豆av一区二区| 欧美国产精品专区| 一卡二卡三卡日韩欧美| 日本欧美肥老太交大片| 激情文学综合插| 99精品久久免费看蜜臀剧情介绍| 日本韩国欧美在线| 日韩视频一区二区三区| 欧美韩日一区二区三区| 亚洲午夜一区二区三区| 麻豆精品视频在线| 成年人午夜久久久| 欧美二区乱c少妇| 久久久久久97三级| 亚洲一卡二卡三卡四卡无卡久久| 美女免费视频一区二区| k8久久久一区二区三区| 在线播放91灌醉迷j高跟美女 | 亚洲国产精品久久不卡毛片| 精品在线免费观看| 色综合咪咪久久| 日韩午夜激情视频| 亚洲色图丝袜美腿| 麻豆freexxxx性91精品| 99久久精品免费精品国产| 欧美一区二区三区四区在线观看| 国产精品久久一卡二卡| 日韩精品一区第一页| 成人精品鲁一区一区二区| 91 com成人网| 亚洲日本va午夜在线电影| 久久精品国内一区二区三区| 色综合久久久久网| 久久嫩草精品久久久久| 亚洲超碰精品一区二区| 成人精品在线视频观看| 日韩一区二区免费视频| 一区二区免费看| 91社区在线播放| 欧美精品一级二级三级| 亚洲欧洲美洲综合色网| 激情综合色综合久久综合| 欧美视频一区二| 国产精品欧美一区喷水| 狠狠色综合日日| 91麻豆精品国产91| 亚洲精品美国一| 波多野结衣中文一区| 久久天堂av综合合色蜜桃网| 日韩精彩视频在线观看| 日本电影亚洲天堂一区| 国产精品超碰97尤物18| 国产精品一区三区| 欧美一级高清片在线观看| 亚洲一区二区三区视频在线播放| 成人免费看视频| 久久九九99视频| 国产一区999| 欧美成人一区二区| 日韩中文字幕麻豆| 欧美日韩三级一区二区| 亚洲欧美另类小说视频| 成人的网站免费观看| 国产亚洲一区二区三区在线观看| 免费欧美在线视频| 91精品欧美一区二区三区综合在| 亚洲午夜免费电影| 91国产精品成人| 亚洲免费大片在线观看| 色伊人久久综合中文字幕| 中文字幕亚洲不卡| 91老司机福利 在线| 一区二区三区四区视频精品免费| 91麻豆国产福利在线观看| 亚洲色图视频网| 色偷偷久久人人79超碰人人澡| 中文字幕中文字幕在线一区| 99久久精品免费看| 亚洲免费在线看| 欧美视频在线一区| 日韩黄色免费网站| 日韩女优视频免费观看| 久久99精品久久久久久国产越南| 精品国产免费一区二区三区香蕉| 国产一区二区视频在线播放| 久久―日本道色综合久久| 国产高清久久久| 综合自拍亚洲综合图不卡区| 91蝌蚪porny九色| 成人永久免费视频| 国产精品传媒在线| 91福利社在线观看| 肉丝袜脚交视频一区二区| 欧美精品黑人性xxxx| 美国十次综合导航| 国产日韩欧美麻豆| 一本色道综合亚洲| 三级一区在线视频先锋| 精品卡一卡二卡三卡四在线| 风流少妇一区二区| 亚洲精品欧美激情| 欧美一级午夜免费电影| 国产一区美女在线| 亚洲另类在线一区| 777xxx欧美| 国产高清在线精品| 一区二区三区成人在线视频| 日韩视频在线一区二区| 成人一区二区三区视频| 亚洲资源在线观看| 精品蜜桃在线看| 94-欧美-setu| 日本午夜一本久久久综合| 久久久99精品免费观看不卡| 色视频欧美一区二区三区| 轻轻草成人在线| 中文字幕一区二区三区在线播放| 欧美日韩情趣电影| 国产精品自在欧美一区| 亚洲一区影音先锋| 久久婷婷国产综合精品青草| 欧美在线不卡一区| 国产寡妇亲子伦一区二区| 亚洲成精国产精品女| 国产欧美精品一区aⅴ影院| 欧美美女一区二区在线观看| 国产99一区视频免费| 天天综合天天做天天综合| 中文久久乱码一区二区| 欧美一级片在线| 色综合久久99| 国产精品资源在线观看| 婷婷久久综合九色综合伊人色| 国产精品色婷婷| 精品国产乱码91久久久久久网站| 欧美午夜精品理论片a级按摩|