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

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

?? dbindex.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
字號(hào):
{*******************************************************}
{                                                       }
{         Delphi VCL Extensions (RX)                    }
{                                                       }
{         Copyright (c) 1995, 1996 AO ROSNO             }
{         Copyright (c) 1997 Master-Bank                }
{                                                       }
{*******************************************************}

unit DBIndex;

interface

{$I RX.INC}

{$IFDEF WIN32}
uses SysUtils, Windows, Messages, Classes, Controls, Forms,
  Graphics, Menus, StdCtrls, ExtCtrls, DB, DBTables;
{$ELSE}
uses SysUtils, WinTypes, WinProcs, Messages, Classes, Controls, Forms,
  Graphics, Menus, StdCtrls, ExtCtrls, DB, DBTables;
{$ENDIF}

type

  TIdxDisplayMode = (dmFieldLabels, dmFieldNames, dmIndexName);

{ TDBIndexCombo }

  TDBIndexCombo = class(TCustomComboBox)
  private
    FDataLink: TDataLink;
    FUpdate: Boolean;
    FNoIndexItem: String;
    FEnableNoIndex: Boolean;
    FChanging: Boolean;
    FDisplayMode: TIdxDisplayMode;
    function GetDataSource: TDataSource;
    procedure SetDataSource(Value: TDataSource);
    function GetIndexFieldName(var AName: string): Boolean;
    procedure SetNoIndexItem(const Value: string);
    function GetNoIndexItem: string;
    procedure SetEnableNoIndex(Value: Boolean);
    procedure SetDisplayMode(Value: TIdxDisplayMode);
    procedure ActiveChanged;
    procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  protected
    procedure Loaded; override;
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
    procedure FillIndexList(List: TStrings);
    procedure Change; override;
    procedure UpdateList; virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { published properties }
    property DataSource: TDataSource read GetDataSource write SetDataSource;
    property NoIndexItem: string read GetNoIndexItem write SetNoIndexItem;
    property EnableNoIndex: Boolean read FEnableNoIndex write SetEnableNoIndex default False;
    property DisplayMode: TIdxDisplayMode read FDisplayMode write SetDisplayMode default dmFieldLabels;
    property DragCursor;
    property DragMode;
    property Enabled;
    property Color;
    property Ctl3D;
    property DropDownCount;
    property Font;
{$IFDEF RX_D4}
    property Anchors;
    property BiDiMode;
    property Constraints;
    property DragKind;
    property ParentBiDiMode;
{$ENDIF}
{$IFDEF WIN32}
  {$IFNDEF VER90}
    property ImeMode;
    property ImeName;
  {$ENDIF}
{$ENDIF}
    property ItemHeight;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property Sorted;
    property TabOrder;
    property TabStop;
    property Visible;
    property OnChange;
    property OnClick;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
{$IFDEF RX_D5}
    property OnContextPopup;
{$ENDIF}
{$IFDEF WIN32}
    property OnStartDrag;
{$ENDIF}
{$IFDEF RX_D4}
    property OnEndDock;
    property OnStartDock;
{$ENDIF}
  end;

implementation

uses {$IFDEF WIN32} Bde, {$ELSE} DbiErrs, DbiTypes, DbiProcs, {$ENDIF}
  DBConsts, rxStrUtils, DBUtils, BdeUtils;

{ TKeyDataLink }

type
  TKeyDataLink = class(TDataLink)
  private
    FCombo: TDBIndexCombo;
  protected
    procedure ActiveChanged; override;
    procedure DataSetChanged; override;
    procedure DataSetScrolled(Distance: Integer); override;
  public
    constructor Create(ACombo: TDBIndexCombo);
    destructor Destroy; override;
  end;

constructor TKeyDataLink.Create(ACombo: TDBIndexCombo);
begin
  inherited Create;
  FCombo := ACombo;
end;

destructor TKeyDataLink.Destroy;
begin
  FCombo := nil;
  inherited Destroy;
end;

procedure TKeyDataLink.ActiveChanged;
begin
  if FCombo <> nil then FCombo.ActiveChanged;
end;

procedure TKeyDataLink.DataSetChanged;
begin
  if FCombo <> nil then FCombo.ActiveChanged;
end;

procedure TKeyDataLink.DataSetScrolled(Distance: Integer);
begin
  { ignore this data event }
end;

{ TDBIndexCombo }

constructor TDBIndexCombo.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FDataLink := TKeyDataLink.Create(Self);
  Style := csDropDownList;
  FUpdate := False;
  FNoIndexItem := EmptyStr;
  FEnableNoIndex := False;
end;

destructor TDBIndexCombo.Destroy;
begin
  FDataLink.Free;
  FDataLink := nil;
  //DisposeStr(FNoIndexItem);
  FNoIndexItem := EmptyStr;
  inherited Destroy;
end;

procedure TDBIndexCombo.SetNoIndexItem(const Value: string);
begin
  if Value <> FNoIndexItem then begin
    FNoIndexItem := Value;
    if not (csLoading in ComponentState) then ActiveChanged;
  end;
end;

procedure TDBIndexCombo.SetEnableNoIndex(Value: Boolean);
begin
  if FEnableNoIndex <> Value then begin
    FEnableNoIndex := Value;
    if not (csLoading in ComponentState) then ActiveChanged;
  end;
end;

procedure TDBIndexCombo.SetDisplayMode(Value: TIdxDisplayMode);
begin
  if (Value <> FDisplayMode) then begin
    FDisplayMode := Value;
    if not (csLoading in ComponentState) then UpdateList;
  end;
end;

function TDBIndexCombo.GetNoIndexItem: string;
begin
  Result := FNoIndexItem;
end;

function TDBIndexCombo.GetDataSource: TDataSource;
begin
  if FDataLink <> nil then Result := FDataLink.DataSource
  else Result := nil;
end;

procedure TDBIndexCombo.SetDataSource(Value: TDataSource);
begin
  FDataLink.DataSource := Value;
{$IFDEF WIN32}
  if Value <> nil then Value.FreeNotification(Self);
{$ENDIF}
  if not (csLoading in ComponentState) then ActiveChanged;
end;

procedure TDBIndexCombo.ActiveChanged;
begin
  if not (Enabled and FDataLink.Active and
    FDataLink.DataSet.InheritsFrom(TTable)) then
  begin
    Clear;
    ItemIndex := -1;
  end
  else UpdateList;
end;

procedure TDBIndexCombo.Loaded;
begin
  inherited Loaded;
  ActiveChanged;
end;

procedure TDBIndexCombo.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (FDataLink <> nil) and
    (AComponent = DataSource) then DataSource := nil;
end;

procedure TDBIndexCombo.CMEnabledChanged(var Message: TMessage);
begin
  inherited;
  if not (csLoading in ComponentState) then ActiveChanged;
end;

function TDBIndexCombo.GetIndexFieldName(var AName: string): Boolean;
begin
  Result := True;
  if ItemIndex >= 0 then begin
    if EnableNoIndex and (Items[ItemIndex] = NoIndexItem) then AName := ''
    else begin
      AName := TIndexDef(Items.Objects[ItemIndex]).Fields;
      if AName = '' then begin
        AName := TIndexDef(Items.Objects[ItemIndex]).Name;
        Result := False;
      end;
    end;
  end
  else AName := '';
end;

procedure TDBIndexCombo.FillIndexList(List: TStrings);
var
  AFld: string;
  Pos: Integer;
  I: Integer;
begin
  List.Clear;
  if not FDataLink.Active then Exit;
  with FDataLink.DataSet as TTable do begin
    for I := 0 to IndexDefs.Count - 1 do
      with IndexDefs[I] do
        if not (ixExpression in Options) then begin
          if FDisplayMode = dmIndexName then AFld := Name
          else begin
            AFld := '';
            Pos := 1;
            while Pos <= Length(Fields) do begin
              if AFld <> '' then AFld := AFld + '; ';
              case FDisplayMode of
                dmFieldLabels:
                  AFld := AFld + FieldByName(ExtractFieldName(Fields, Pos)).DisplayLabel;
                dmFieldNames:
                  AFld := AFld + FieldByName(ExtractFieldName(Fields, Pos)).FieldName;
              end;
            end;
          end;
          if List.IndexOf(AFld) < 0 then List.AddObject(AFld, IndexDefs[I]);
        end;
  end;
  if EnableNoIndex then
    if List.IndexOf(NoIndexItem) < 0 then List.AddObject(NoIndexItem, nil);
end;

procedure TDBIndexCombo.Change;
var
  ABookmark: TBookmark;
  AName: string;
begin
  if Enabled and FDataLink.Active and not FChanging and
    FDataLink.DataSet.InheritsFrom(TTable) and
    not (csLoading in ComponentState) then
  begin
    ABookmark := nil;
    with FDataLink.DataSet as TTable do begin
      if Database.IsSQLBased then ABookmark := GetBookmark;
      try
        if GetIndexFieldName(AName) then begin
          IndexFieldNames := AName;
          if (AName = '') and (IndexDefs.Count > 0) then
            IndexName := '';
        end
        else begin
          if AName = '' then IndexFieldNames := '';
          IndexName := AName;
        end;
        if (ABookmark <> nil) then
          SetToBookmark(TTable(Self.FDataLink.DataSet), ABookmark);
      finally
        if ABookmark <> nil then FreeBookmark(ABookmark);
      end;
    end;
  end;
  inherited Change;
end;

procedure TDBIndexCombo.UpdateList;

  function FindIndex(Table: TTable): Integer;
  var
    I: Integer;
    IdxFields: string;
  begin
    Result := -1;
    IdxFields := '';
    if Table.IndexFieldNames <> '' then
      for I := 0 to Table.IndexFieldCount - 1 do begin
        if IdxFields <> '' then IdxFields := IdxFields + ';';
        IdxFields := IdxFields + Table.IndexFields[I].FieldName;
      end;
    for I := 0 to Items.Count - 1 do begin
      if (Items.Objects[I] <> nil) and
        (((IdxFields <> '') and
        (AnsiCompareText(TIndexDef(Items.Objects[I]).Fields, IdxFields) = 0)) or
        ((Table.IndexName <> '') and
        (AnsiCompareText(TIndexDef(Items.Objects[I]).Name, Table.IndexName) = 0))) then
      begin
        Result := I;
        Exit;
      end;
    end;
    if EnableNoIndex and FDataLink.Active then
      if (Table.IndexFieldNames = '') and (Table.IndexName = '') then
        Result := Items.IndexOf(NoIndexItem);
  end;

begin
  if Enabled and FDataLink.Active then
    try
      Items.BeginUpdate;
      try
        if FDataLink.DataSet.InheritsFrom(TTable) then begin
          TTable(FDataLink.DataSet).IndexDefs.Update;
          FillIndexList(Items);
          ItemIndex := FindIndex(TTable(FDataLink.DataSet));
          FChanging := True;
        end
        else Items.Clear;
      finally
        Items.EndUpdate;
      end;
    finally
      FChanging := False;
    end;
end;

end.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲理论在线观看| 国产成人午夜视频| 波多野结衣一区二区三区| 这里只有精品视频在线观看| 亚洲天堂2016| 成人国产精品视频| 国产精品人成在线观看免费| 国产一区二区三区精品视频| 337p粉嫩大胆噜噜噜噜噜91av| 强制捆绑调教一区二区| 欧美一区二区三区播放老司机| 免费成人在线影院| 亚洲综合久久久久| 8v天堂国产在线一区二区| 97精品超碰一区二区三区| 午夜私人影院久久久久| 在线成人小视频| 久久99久久精品| 久久男人中文字幕资源站| 成人午夜看片网址| 亚洲综合色在线| 自拍偷拍欧美精品| 欧美激情一区在线| 在线中文字幕一区| 日韩激情中文字幕| 日本一区二区免费在线| 欧美性感一区二区三区| 久久99精品网久久| 日韩av在线播放中文字幕| 久久久久久9999| 久久久久久久久久久久电影| 欧美成人三级在线| 99久久精品国产精品久久| 国产盗摄一区二区| 成人一区在线看| 国产成人精品综合在线观看 | 精品国精品国产尤物美女| 国产激情视频一区二区在线观看| 日本成人在线网站| 男女男精品视频网| 精品午夜久久福利影院| 久久精工是国产品牌吗| 亚洲免费观看在线视频| 日韩午夜精品电影| 成人av综合在线| 成人av在线资源网站| 大桥未久av一区二区三区中文| 成人激情av网| 91色九色蝌蚪| 国产一区在线精品| 国产成人精品免费在线| 成人听书哪个软件好| 99久久精品久久久久久清纯| 91女人视频在线观看| 欧美少妇bbb| 日韩视频一区二区在线观看| 精品国产乱子伦一区| 国产肉丝袜一区二区| 亚洲三级在线免费观看| 亚洲成av人片观看| 亚洲女女做受ⅹxx高潮| 亚洲电影一区二区三区| 国产精品久久夜| 26uuu欧美| 国产精品午夜在线| 亚洲资源中文字幕| 久久66热偷产精品| 国产999精品久久久久久绿帽| 日韩电影在线看| 国精产品一区一区三区mba视频| 日韩精品亚洲专区| 国产美女在线观看一区| 99精品视频在线观看免费| 欧美日韩免费不卡视频一区二区三区 | 精品国产成人系列| 国产农村妇女毛片精品久久麻豆| 亚洲资源中文字幕| 国产中文一区二区三区| 91社区在线播放| 日韩美女天天操| 精品国产91乱码一区二区三区 | 欧美精品1区2区3区| 久久综合国产精品| 亚洲精品国产成人久久av盗摄| 男人的j进女人的j一区| 99vv1com这只有精品| 69久久夜色精品国产69蝌蚪网| 国产清纯白嫩初高生在线观看91| 亚洲制服丝袜av| 国产福利一区二区三区| 欧美日韩在线不卡| 欧美精品v国产精品v日韩精品 | 欧美日韩在线播放三区| 国产欧美精品一区aⅴ影院| 国内成人自拍视频| 色综合一个色综合| 波波电影院一区二区三区| 欧美日韩国产中文| 亚洲欧洲成人精品av97| 亚洲视频1区2区| 麻豆成人久久精品二区三区小说| 激情欧美日韩一区二区| 欧美日韩在线直播| 亚洲精品国产一区二区精华液 | av中文字幕在线不卡| 欧美一级片在线| 亚洲精品成人天堂一二三| 国产精品夜夜嗨| av亚洲产国偷v产偷v自拍| 日韩欧美成人一区| 婷婷综合另类小说色区| www.欧美色图| 国产亚洲欧美中文| 樱桃视频在线观看一区| 国产精品一二三| 2017欧美狠狠色| 毛片一区二区三区| 在线成人小视频| 性做久久久久久久免费看| 在线亚洲高清视频| 欧美日韩精品一区视频| 亚洲卡通欧美制服中文| 成人avav在线| 国产欧美一区视频| 国产不卡视频在线播放| 精品动漫一区二区三区在线观看| 亚洲国产cao| 欧美久久一区二区| 亚洲超碰精品一区二区| 精品视频一区二区不卡| 亚洲大片免费看| 欧美日韩五月天| 日本女人一区二区三区| 狠狠久久亚洲欧美| 亚洲美女在线一区| 国产酒店精品激情| 男男视频亚洲欧美| 亚洲成人av免费| 精品国产精品网麻豆系列| 日韩一区精品字幕| 91精品国产乱码久久蜜臀| 日日骚欧美日韩| 日韩午夜精品电影| 国产一区二区三区免费看 | 美国一区二区三区在线播放| 久久精品日产第一区二区三区高清版| 极品美女销魂一区二区三区| 精品盗摄一区二区三区| 国产成人a级片| 亚洲视频一区二区在线观看| 一本色道久久综合亚洲91| 8x8x8国产精品| 青青草91视频| 国产日韩av一区| 色综合中文字幕国产| 中文字幕中文字幕在线一区| 一本一道综合狠狠老| 亚洲超碰精品一区二区| 日韩你懂的电影在线观看| 国产大陆亚洲精品国产| 成人欧美一区二区三区在线播放| 色婷婷综合久久久久中文| 日本vs亚洲vs韩国一区三区二区 | 亚洲色图在线看| 欧美日韩国产另类一区| 国内精品伊人久久久久av影院| 国产精品二三区| 宅男在线国产精品| 国产伦精一区二区三区| 亚洲精品菠萝久久久久久久| 91精品国产欧美一区二区| 成人一级视频在线观看| 亚洲图片欧美综合| 久久综合九色欧美综合狠狠| 色噜噜偷拍精品综合在线| 免费人成精品欧美精品| 久久精品视频一区二区三区| 色婷婷综合久久久| 国产一区二区三区在线观看免费视频 | 欧美午夜精品一区二区三区| 精品无人码麻豆乱码1区2区 | 国产一区二区三区在线观看免费视频 | 色狠狠综合天天综合综合| 裸体歌舞表演一区二区| 亚洲人成在线播放网站岛国| 精品久久久久久亚洲综合网| 91影院在线观看| 精品一区中文字幕| 亚洲国产一区视频| 国产人久久人人人人爽| 欧美日韩国产123区| 不卡电影免费在线播放一区| 伦理电影国产精品| 亚洲午夜久久久久久久久电影院| 久久久久久久一区| 日韩一区二区三区免费看| 色94色欧美sute亚洲线路一久 | 国产麻豆视频一区| 婷婷丁香久久五月婷婷| 自拍偷拍亚洲综合|