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

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

?? sdbnavigator.pas

?? AlphaControls是一個Delphi標(biāo)準(zhǔn)控件的集合
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit sDBNavigator;
{$I sDefs.inc}
{$R SDBRES.RES}

interface
              
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, sPanel, dbctrls, sconst, sCustomButton, db, dbconsts, math;

type
  TsNavButton = class;
  TsNavDataLink = class;

  TsDBNavigator = class(TsPanel)
  private
    FDataLink: TsNavDataLink;
    FVisibleButtons: TButtonSet;
    FHints: TStrings;
    FDefHints: TStrings;
    MinBtnSize: TPoint;
    FOnNavClick: ENavClick;
    FBeforeAction: ENavClick;
    FocusedButton: TNavigateBtn;
    FConfirmDelete: Boolean;
    function ButtonWidth : integer;
    function ButtonsCount : integer;
    procedure BtnMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure ClickHandler(Sender: TObject);
    function GetDataSource: TDataSource;
    function GetHints: TStrings;
    procedure HintsChanged(Sender: TObject);
    procedure InitButtons;
    procedure InitHints;
    procedure SetDataSource(Value: TDataSource);
    procedure SetHints(Value: TStrings);
    procedure SetSize(var W: Integer; var H: Integer);
    procedure SetVisible(Value: TButtonSet);
    procedure WMSize(var Message: TWMSize);  message WM_SIZE;
    procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
    procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
    procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
    procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
    procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
  protected
    Buttons: array[TNavigateBtn] of TsNavButton;
    procedure DataChanged;
    procedure EditingChanged;
    procedure ActiveChanged;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
    procedure CalcMinSize(var W, H: Integer);
    function MarginWidth : integer;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
    procedure BtnClick(Index: TNavigateBtn); virtual;
    procedure Loaded; override;
  published
    property DataSource: TDataSource read GetDataSource write SetDataSource;
    property VisibleButtons: TButtonSet read FVisibleButtons write SetVisible
      default [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete,
        nbEdit, nbPost, nbCancel, nbRefresh];
    property Hints: TStrings read GetHints write SetHints;
    property ConfirmDelete: Boolean read FConfirmDelete write FConfirmDelete default True;
    property BeforeAction: ENavClick read FBeforeAction write FBeforeAction;
    property OnClick: ENavClick read FOnNavClick write FOnNavClick;
    property Width default 240;
    property Height default 25;
  end;

{ TsNavButton }

  TsNavButton = class(TsSpeedButton)
  private
    FIndex: TNavigateBtn;
    FNavStyle: TNavButtonStyle;
    FRepeatTimer: TTimer;
    procedure TimerExpired(Sender: TObject);
  protected
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
  public
    constructor Create (AOwner: TComponent); override;
    destructor Destroy; override;
    property NavStyle: TNavButtonStyle read FNavStyle write FNavStyle;
    procedure Paint; override;
    property Index : TNavigateBtn read FIndex write FIndex;
  end;

{ TsNavDataLink }

  TsNavDataLink = class(TDataLink)
  private
    FNavigator: TsDBNavigator;
  protected
    procedure EditingChanged; override;
    procedure DataSetChanged; override;
    procedure ActiveChanged; override;
  public
    constructor Create(ANav: TsDBNavigator);
    destructor Destroy; override;
  end;

implementation

uses sDefaults;

resourcestring
  SFirstRecord = 'First record';
  SPriorRecord = 'Prior record';
  SNextRecord = 'Next record';
  SLastRecord = 'Last record';
  SInsertRecord = 'Insert record';
  SDeleteRecord = 'Delete record';
  SEditRecord = 'Edit record';
  SPostEdit = 'Post edit';
  SCancelEdit = 'Cancel edit';
  SRefreshRecord = 'Refresh data';
  SDeleteRecordQuestion = 'Delete record?';
//  SDeleteMultipleRecordsQuestion = 'Delete all selected records?';
//  SRecordNotFound = 'Record not found';
//  SDataSourceFixed = 'Operation not allowed in a DBCtrlGrid';
//  SNotReplicatable = 'Control cannot be used in a DBCtrlGrid';
//  SPropDefByLookup = 'Property already defined by lookup field';
//  STooManyColumns = 'Grid requested to display more than 256 columns';

var
  BtnTypeName: array[TNavigateBtn] of PChar = ('FIRST', 'PRIOR', 'NEXT',
    'LAST', 'INSERT', 'DELETE', 'EDIT', 'POST', 'CANCEL', 'REFRESH');
  BtnHintId: array[TNavigateBtn] of Pointer = (@SFirstRecord, @SPriorRecord,
    @SNextRecord, @SLastRecord, @SInsertRecord, @SDeleteRecord, @SEditRecord,
    @SPostEdit, @SCancelEdit, @SRefreshRecord);

  SDBN_FIRST, SDBN_PRIOR, SDBN_NEXT, SDBN_LAST, SDBN_INSERT, SDBN_DELETE, SDBN_EDIT,
  SDBN_POST, SDBN_CANCEL, SDBN_REFRESH : TBitmap;

{ TsDBNavigator }

procedure LoadGlyph(Btn : TsNavButton; TypeName : string);
begin
  if TypeName = 'FIRST' then begin
    Btn.Glyph.Assign(SDBN_FIRST);
  end
  else if TypeName = 'PRIOR' then begin
    Btn.Glyph.Assign(SDBN_PRIOR);
  end
  else if TypeName = 'NEXT' then begin
    Btn.Glyph.Assign(SDBN_NEXT);
  end
  else if TypeName = 'LAST' then begin
    Btn.Glyph.Assign(SDBN_LAST);
  end
  else if TypeName = 'INSERT' then begin
    Btn.Glyph.Assign(SDBN_INSERT);
  end
  else if TypeName = 'DELETE' then begin
    Btn.Glyph.Assign(SDBN_DELETE);
  end
  else if TypeName = 'EDIT' then begin
    Btn.Glyph.Assign(SDBN_EDIT);
  end
  else if TypeName = 'POST' then begin
    Btn.Glyph.Assign(SDBN_POST);
  end
  else if TypeName = 'CANCEL' then begin
    Btn.Glyph.Assign(SDBN_CANCEL);
  end
  else if TypeName = 'REFRESH' then begin
    Btn.Glyph.Assign(SDBN_REFRESH);
  end;
end;

procedure TsDBNavigator.ActiveChanged;
var
  I: TNavigateBtn;
begin
  if not (Enabled and FDataLink.Active) then
    for I := Low(Buttons) to High(Buttons) do
      Buttons[I].Enabled := False
  else
  begin
    DataChanged;
    EditingChanged;
  end;
end;

procedure TsDBNavigator.BtnClick(Index: TNavigateBtn);
begin
  if (DataSource <> nil) and (DataSource.State <> dsInactive) then
  begin
    if not (csDesigning in ComponentState) and Assigned(FBeforeAction) then
      FBeforeAction(Self, Index);
    with DataSource.DataSet do
    begin
      case Index of
        nbPrior: Prior;
        nbNext: Next;
        nbFirst: First;
        nbLast: Last;
        nbInsert: Insert;
        nbEdit: Edit;
        nbCancel: Cancel;
        nbPost: Post;
        nbRefresh: Refresh;
        nbDelete:
          if not FConfirmDelete or
            (MessageDlg(SDeleteRecordQuestion, mtConfirmation,
            mbOKCancel, 0) <> idCancel) then Delete;
      end;
    end;
  end;
  if not (csDesigning in ComponentState) and Assigned(FOnNavClick) then
    FOnNavClick(Self, Index);
end;

procedure TsDBNavigator.BtnMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  OldFocus: TNavigateBtn;
begin
  OldFocus := FocusedButton;
  FocusedButton := TsNavButton (Sender).Index;
  if TabStop and (GetFocus <> Handle) and CanFocus then
  begin
    SetFocus;
    if (GetFocus <> Handle) then
      Exit;
  end
  else if TabStop and (GetFocus = Handle) and (OldFocus <> FocusedButton) then
  begin
    Buttons[OldFocus].Invalidate;
    Buttons[FocusedButton].Invalidate;
  end;
end;

function TsDBNavigator.ButtonsCount: integer;
var
  i : TNavigateBtn;
begin
  Result := 0;
  for I := Low(Buttons) to High(Buttons) do begin
    if Buttons[I].Visible then begin
      Inc(Result);
    end;
  end;
  if Result = 0 then Inc(Result);
end;

function TsDBNavigator.ButtonWidth: Integer;
begin
  ButtonWidth := (Width - 2 * MarginWidth) div ButtonsCount;
end;

procedure TsDBNavigator.CalcMinSize(var W, H: Integer);
begin
  if (csLoading in ComponentState) then Exit;
  if Buttons[nbFirst] = nil then Exit;

  W := Max(W, ButtonsCount * MinBtnSize.X + 2 * MarginWidth);
  H := Max(H, MinBtnSize.Y + 2 * MarginWidth);
end;

procedure TsDBNavigator.ClickHandler(Sender: TObject);
begin
  BtnClick(TsNavButton(Sender).Index);
end;

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

constructor TsDBNavigator.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle - [csAcceptsControls, csSetCaption];// + [csOpaque];
//  if not NewStyleControls then ControlStyle := ControlStyle + [csFramed];
  FDataLink := TsNavDataLink.Create(Self);
  FVisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
    nbDelete, nbEdit, nbPost, nbCancel, nbRefresh];
  FHints := TStringList.Create;
  TStringList(FHints).OnChange := HintsChanged;
  InitButtons;
  InitHints;
  if (csDesigning in ComponentState) and (sStyle.Background.Gradient.Data = '') then begin
    sStyle.Background.Gradient.Data := GradientTsDBNavigator;
  end;
  Width := 240;
  Height := 25;
  FocusedButton := nbFirst;
  FConfirmDelete := True;
  FullRepaint := False;
end;

procedure TsDBNavigator.DataChanged;
var
  UpEnable, DnEnable: Boolean;
begin
  UpEnable := Enabled and FDataLink.Active and not FDataLink.DataSet.BOF;
  DnEnable := Enabled and FDataLink.Active and not FDataLink.DataSet.EOF;
  Buttons[nbFirst].Enabled := UpEnable;
  Buttons[nbPrior].Enabled := UpEnable;
  Buttons[nbNext].Enabled := DnEnable;
  Buttons[nbLast].Enabled := DnEnable;
  Buttons[nbDelete].Enabled := Enabled and FDataLink.Active and
    FDataLink.DataSet.CanModify and
    not (FDataLink.DataSet.BOF and FDataLink.DataSet.EOF);
end;

destructor TsDBNavigator.Destroy;
begin
  FDefHints.Free;
  FDataLink.Free;
  FHints.Free;
  FDataLink := nil;
  inherited Destroy;
end;

procedure TsDBNavigator.EditingChanged;
var
  CanModify: Boolean;
begin
  CanModify := Enabled and FDataLink.Active and FDataLink.DataSet.CanModify;
  Buttons[nbInsert].Enabled := CanModify;
  Buttons[nbEdit].Enabled := CanModify and not FDataLink.Editing;
  Buttons[nbPost].Enabled := CanModify and FDataLink.Editing;
  Buttons[nbCancel].Enabled := CanModify and FDataLink.Editing;
  Buttons[nbRefresh].Enabled := CanModify;
end;

procedure TsDBNavigator.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
end;

function TsDBNavigator.GetDataSource: TDataSource;
begin
  Result := FDataLink.DataSource;
end;

function TsDBNavigator.GetHints: TStrings;
begin
  if (csDesigning in ComponentState) and not (csWriting in ComponentState) and
     not (csReading in ComponentState) and (FHints.Count = 0) then
    Result := FDefHints else
    Result := FHints;
end;

procedure TsDBNavigator.HintsChanged(Sender: TObject);
begin
  InitHints;
end;

procedure TsDBNavigator.InitButtons;
var
  I: TNavigateBtn;
  Btn: TsNavButton;
  X: Integer;
begin
  MinBtnSize := Point(6, 6);
  X := MarginWidth;
  for I := Low(Buttons) to High(Buttons) do begin
    Btn := TsNavButton.Create (Self);
    Btn.Index := I;
    Btn.Visible := I in FVisibleButtons;
    Btn.Enabled := True;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品在线播放| 夜夜精品浪潮av一区二区三区| 精品一区在线看| 欧美一区日韩一区| 麻豆精品视频在线观看视频| 精品国产欧美一区二区| 国产99精品视频| 亚洲三级电影全部在线观看高清| 在线视频国内一区二区| 天天综合色天天| 久久综合国产精品| 不卡电影一区二区三区| 亚洲18影院在线观看| 欧美精品一区二区三区很污很色的| 国产成人在线视频网址| 亚洲一区在线电影| 日韩三级.com| 成人美女在线观看| 亚洲成人久久影院| 久久久亚洲精华液精华液精华液| 国产成人综合自拍| 亚洲精品成人天堂一二三| 日韩视频一区二区在线观看| 成人晚上爱看视频| 五月天久久比比资源色| 久久―日本道色综合久久| 色偷偷久久人人79超碰人人澡| 男男视频亚洲欧美| 亚洲蜜臀av乱码久久精品蜜桃| 91精品国产高清一区二区三区蜜臀| 国产美女一区二区三区| 亚洲午夜久久久久久久久电影院| 久久蜜桃av一区二区天堂| 色偷偷88欧美精品久久久| 国产中文一区二区三区| 亚洲成人资源在线| 中文字幕在线免费不卡| 精品美女被调教视频大全网站| 色哟哟精品一区| 国产精品夜夜嗨| 日本在线不卡视频一二三区| 国产精品电影一区二区| 2023国产一二三区日本精品2022| 91成人看片片| 北条麻妃一区二区三区| 开心九九激情九九欧美日韩精美视频电影 | 亚洲一二三四区| 精品国产网站在线观看| 欧美三级电影精品| av在线这里只有精品| 国内精品伊人久久久久av影院 | 亚洲一二三区视频在线观看| 国产拍欧美日韩视频二区| 日韩一区二区中文字幕| 欧美午夜精品一区二区三区| 95精品视频在线| 国产精品综合在线视频| 老色鬼精品视频在线观看播放| 亚洲观看高清完整版在线观看| 中文字幕日韩精品一区| 国产日韩欧美一区二区三区乱码 | 欧美色倩网站大全免费| 波多野结衣一区二区三区| 国产黄色精品视频| 激情成人综合网| 国产综合色在线| 激情欧美一区二区| 久久国产婷婷国产香蕉| 美女看a上一区| 图片区日韩欧美亚洲| 五月综合激情网| 亚洲精品国产品国语在线app| 中文字幕一区二区三区视频| 国产精品久久国产精麻豆99网站| 国产欧美日韩亚州综合| 久久精品免费在线观看| 国产亚洲精品资源在线26u| 久久亚洲私人国产精品va媚药| 精品国产一区二区在线观看| 日韩欧美国产一区二区在线播放| 欧美成人伊人久久综合网| 精品久久久网站| 国产日韩欧美精品综合| 欧美国产精品劲爆| 综合电影一区二区三区| 亚洲欧洲精品成人久久奇米网| 亚洲色欲色欲www在线观看| 亚洲精品国产a久久久久久| 亚洲精品你懂的| 日韩中文字幕一区二区三区| 日韩国产一二三区| 国产真实乱对白精彩久久| 成人国产一区二区三区精品| 不卡av电影在线播放| 欧美亚洲精品一区| 911国产精品| 久久久久久久久岛国免费| 国产精品理伦片| 亚洲高清在线精品| 久久福利资源站| 成人动漫视频在线| 欧美日韩免费高清一区色橹橹| 在线播放91灌醉迷j高跟美女| 欧美成人三级在线| 亚洲欧洲一区二区三区| 视频一区二区中文字幕| 国产福利不卡视频| 一本大道久久精品懂色aⅴ| 91精品国产综合久久福利软件 | 欧美福利一区二区| 日韩欧美国产午夜精品| 中文字幕精品三区| 午夜精品福利一区二区三区蜜桃| 韩国v欧美v日本v亚洲v| 色8久久人人97超碰香蕉987| 91精品国产一区二区三区| 欧美国产1区2区| 天堂久久久久va久久久久| 国产精品一区免费在线观看| 在线精品视频免费播放| 久久美女艺术照精彩视频福利播放| 亚洲色图在线看| 韩国毛片一区二区三区| 欧美性猛片xxxx免费看久爱| 国产亚洲人成网站| 日韩经典中文字幕一区| 成人免费视频一区二区| 91麻豆精品91久久久久久清纯| 国产亚洲精品7777| 日本在线不卡视频| 91国偷自产一区二区开放时间 | 综合久久综合久久| 蜜臀av性久久久久av蜜臀妖精| 成人aa视频在线观看| 欧美一级午夜免费电影| 一区二区中文视频| 国产精品99久久久久久久女警| 欧美人动与zoxxxx乱| 亚洲欧美日韩精品久久久久| 国产成人精品在线看| 日韩欧美在线123| 亚洲综合激情另类小说区| 99久久伊人精品| 欧美精品一区二区三区四区| 日韩成人免费电影| 欧美日韩国产高清一区二区| 亚洲免费在线看| k8久久久一区二区三区| 国产网站一区二区三区| 精品午夜一区二区三区在线观看| 欧美挠脚心视频网站| 亚洲精品亚洲人成人网| av午夜精品一区二区三区| 国产日韩欧美亚洲| 国产精品一区二区在线看| 精品国产123| 喷水一区二区三区| 欧美喷潮久久久xxxxx| 午夜久久久久久电影| 欧美日韩国产成人在线免费| 亚洲精品国产成人久久av盗摄 | 色婷婷激情综合| 亚洲卡通动漫在线| 成人久久视频在线观看| 欧美国产1区2区| 成人av中文字幕| 国产精品久久一级| eeuss影院一区二区三区| 国产精品久久久久9999吃药| 成人av在线网| 亚洲欧美日韩国产中文在线| 色先锋久久av资源部| 一区二区三区在线视频观看| 日本韩国欧美一区| 天天射综合影视| 91精选在线观看| 九一久久久久久| 久久久久国产成人精品亚洲午夜| 国产精品911| 亚洲视频精选在线| 欧美影视一区在线| 亚洲bdsm女犯bdsm网站| 欧美大片在线观看| 国内国产精品久久| 国产精品超碰97尤物18| 色婷婷一区二区| 日韩精品成人一区二区三区 | 一本一道波多野结衣一区二区| 亚洲欧美国产三级| 7777女厕盗摄久久久| 国产精品一区二区在线播放| 国产精品久线观看视频| 欧美色综合天天久久综合精品| 免费观看在线色综合| 国产精品伦理一区二区| 欧美精品色一区二区三区| 国产一区二区三区高清播放| 国产精品久久久一本精品| 欧美夫妻性生活| 国产激情视频一区二区在线观看|