📄 uadatanav.pas
字号:
{******************************************************************************************}
{ }
{ Universal Agent on demond SDK }
{ }
{ }
{ COPYRIGHT }
{ ========= }
{ The UA SDK (software) is Copyright (C) 2001-2003, by vinson zeng(曾胡龙). }
{ All rights reserved. }
{ The authors - vinson zeng (曾胡龙), }
{ exclusively own all copyrights to the Advanced Application }
{ Controls (AppControls) and all other products distributed by Utilmind Solutions(R). }
{ }
{ LIABILITY DISCLAIMER }
{ ==================== }
{ THIS SOFTWARE IS DISTRIBUTED "AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE }
{ OF MERCHANTABILITY OR ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED. }
{ YOU USE IT AT YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, }
{ DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS SOFTWARE.}
{ }
{ RESTRICTIONS }
{ ============ }
{ You may not attempt to reverse compile, modify, }
{ translate or disassemble the software in whole or in part. }
{ You may not remove or modify any copyright notice or the method by which }
{ it may be invoked. }
{******************************************************************************************}
unit UADataNav;
interface
uses
Windows, Classes, SysUtils, Messages, Controls,
Buttons, ComCtrls, ExtCtrls,StdCtrls,DB,Math,
UAClientDataSet;
type
TUANavDataLink = class;
TUANavBtnType = (nbFirst,nbPrior,nbNext,nbLast);
TUADataNav = class (TCustomPanel)
private
FPageEdit:TEdit;
FFirstBtn:TSpeedButton;
FLastBtn:TSpeedButton;
FPriorBtn:TSpeedButton;
FNextBtn:TSpeedButton;
ButtonWidth: Integer;
FDataLink:TUANavDataLink;
FFlat: Boolean;
MinBtnSize: TPoint;
FAllPage:Cardinal;
FCurrPage:Cardinal;
procedure InitCtrls;
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;
function GetDataSource: TDataSource;
function GetHints: TStrings;
procedure SetDataSource(const Value: TDataSource);
procedure SetFlat(const Value: Boolean);
procedure SetHints(const Value: TStrings);
procedure SetSize(var W: Integer; var H: Integer);
procedure CalcMinSize(var W, H: Integer);
protected
procedure DataChanged;
procedure EditingChanged;
procedure ActiveChanged;
procedure Loaded; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
procedure PageChange(Sender:TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
property AllPage:Cardinal read FAllPage;
property CurrPage:Cardinal read FCurrPage;
published
property DataSource: TDataSource read GetDataSource write SetDataSource;
property Align;
property Anchors;
property Constraints;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Flat: Boolean read FFlat write SetFlat default False;
property Ctl3D;
property Hints: TStrings read GetHints write SetHints;
property ParentCtl3D;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnResize;
property OnStartDock;
property OnStartDrag;
end;
TUANavDataLink = class(TDataLink)
private
FDataNav: TUADataNav;
protected
procedure EditingChanged; override;
procedure DataSetChanged; override;
procedure ActiveChanged; override;
public
constructor Create(ANav: TUADataNav);
destructor Destroy; override;
end;
implementation
//{$R UADataNav.Res}
{ TUADataNav }
procedure TUADataNav.ActiveChanged;
begin
end;
procedure TUADataNav.CalcMinSize(var W, H: Integer);
begin
if (csLoading in ComponentState) then Exit;
W := Max(W, 5 * MinBtnSize.X);
H := Max(H, MinBtnSize.Y);
if Align = alNone then W := (W div 5) * 5;
end;
procedure TUADataNav.CMEnabledChanged(var Message: TMessage);
begin
inherited;
if not (csLoading in ComponentState) then
ActiveChanged;
end;
constructor TUADataNav.Create(AOwner: TComponent);
begin
inherited;
inherited Create(AOwner);
ControlStyle := ControlStyle - [csAcceptsControls, csSetCaption] + [csOpaque];
if not NewStyleControls then ControlStyle := ControlStyle + [csFramed];
FDataLink := TUANavDataLink.Create(Self);
BevelOuter := bvNone;
BevelInner := bvNone;
Width := 121;
Height := 25;
FullRepaint := False;
InitCtrls;
end;
procedure TUADataNav.DataChanged;
begin
end;
destructor TUADataNav.Destroy;
begin
FDataLink.Free;
FDataLink := nil;
{ if Assigned(FPageEdit) then
FreeAndNil(FPageEdit);
if Assigned(FFirstBtn) then
FreeAndNil(FFirstBtn);
if Assigned(FLastBtn) then
FreeAndNil(FLastBtn);
if Assigned(FPriorBtn) then
FreeAndNil(FPriorBtn);
if Assigned(FNextBtn) then
FreeAndNil(FNextBtn);
}
inherited Destroy;
end;
procedure TUADataNav.EditingChanged;
begin
end;
procedure TUADataNav.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
inherited;
end;
function TUADataNav.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
function TUADataNav.GetHints: TStrings;
begin
end;
procedure TUADataNav.InitCtrls;
var
X: Integer;
ResName: string;
begin
MinBtnSize := Point(20, 18);
X := 0;
FFirstBtn := TSpeedButton.Create(Self);
FFirstBtn.SetBounds(X,0 ,MinBtnSize.X, MinBtnSize.Y);
// FFirstBtn.Glyph.LoadFromResourceName(HInstance, 'DATA_FIRST');
FFirstBtn.Enabled := True;
FFirstBtn.Parent := Self;
X := X + MinBtnSize.X;
FFirstBtn.Caption := '<<';
FFirstBtn.Parent := Self;
FPriorBtn := TSpeedButton.Create(Self);
FPriorBtn.SetBounds(X,0 ,MinBtnSize.X, MinBtnSize.Y);
// FPriorBtn.Glyph.LoadFromResourceName(HInstance, 'DATA_PRIOR');
FPriorBtn.Enabled := True;
FPriorBtn.Parent := Self;
X := X + MinBtnSize.X;
FPriorBtn.Caption := '<';
FPriorBtn.Parent := Self;
FPageEdit := TEdit.Create(Self);
FPageEdit.SetBounds(X,0 ,MinBtnSize.X+20, MinBtnSize.Y);
FPageEdit.Enabled := True;
FPageEdit.Parent := Self;
FPageEdit.Visible := true;
X := X + MinBtnSize.X+20;
FPageEdit.Parent := Self;
FNextBtn := TSpeedButton.Create(Self);
FNextBtn.SetBounds(X,0 ,MinBtnSize.X, MinBtnSize.Y);
// FNextBtn.Glyph.LoadFromResourceName(HInstance, 'DATA_NEXT');
FNextBtn.Enabled := True;
FNextBtn.Parent := Self;
X := X + MinBtnSize.X;
FNextBtn.Caption := '>';
FNextBtn.Parent := Self;
FLastBtn := TSpeedButton.Create(Self);
FLastBtn.SetBounds(X,0 ,MinBtnSize.X, MinBtnSize.Y);
// FLastBtn.Glyph.LoadFromResourceName(HInstance, 'DATA_LAST');
FLastBtn.Enabled := True;
FLastBtn.Parent := Self;
X := X + MinBtnSize.X;
FLastBtn.Caption := '>>';
FLastBtn.Parent := Self;
end;
procedure TUADataNav.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
end;
procedure TUADataNav.Loaded;
var
W, H: Integer;
begin
inherited Loaded;
W := Width;
H := Height;
SetSize(W, H);
if (W <> Width) or (H <> Height) then
inherited SetBounds (Left, Top, W, H);
ActiveChanged;
end;
procedure TUADataNav.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (TUANavDataLink <> nil) and
(AComponent = DataSource) then
begin
//TUANavDataLink. := nil;
if not (csLoading in ComponentState) then
ActiveChanged;
end;
if Operation = opRemove then
if AComponent = FPageEdit then FPageEdit := nil ;
if Operation = opRemove then
if AComponent = FFirstBtn then FFirstBtn := nil;
if Operation = opRemove then
if AComponent = FLastBtn then FLastBtn := nil ;
if Operation = opRemove then
if AComponent = FPriorBtn then FPriorBtn := nil ;
if Operation = opRemove then
if AComponent = FNextBtn then FNextBtn := nil ;
end;
procedure TUADataNav.PageChange(Sender: TObject);
begin
end;
procedure TUADataNav.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var
W, H: Integer;
begin
W := AWidth;
H := AHeight;
if not HandleAllocated then SetSize(W, H);
inherited SetBounds (ALeft, ATop, W, H);
end;
procedure TUADataNav.SetDataSource(const Value: TDataSource);
begin
FDataLink.DataSource := Value;
if not (csLoading in ComponentState) then
ActiveChanged;
if Value <> nil then Value.FreeNotification(Self);
end;
procedure TUADataNav.SetFlat(const Value: Boolean);
begin
FFlat := Value;
end;
procedure TUADataNav.SetHints(const Value: TStrings);
begin
end;
procedure TUADataNav.SetSize(var W, H: Integer);
var
Space, Temp, Remain: Integer;
X: Integer;
I:integer;
Count:integer;
begin
if (csLoading in ComponentState) then Exit;
CalcMinSize(W, H);
Count := 5;
ButtonWidth := W div Count;
Temp := Count * ButtonWidth;
if Align = alNone then W := Temp;
X := 0;
Remain := W - Temp;
Temp := Count div 2;
for I := 0 to ComponentCount -1 do
begin
if Components[I] is TControl then
begin
Space := 0;
if Remain <> 0 then
begin
Dec(Temp, Remain);
if Temp < 0 then
begin
Inc(Temp, Count);
Space := 1;
end;
end;
TControl(Components[I]).SetBounds(X, 0, ButtonWidth + Space, Height);
Inc(X, ButtonWidth + Space);
end;
end;
end;
procedure TUADataNav.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
Message.Result := DLGC_WANTARROWS;
end;
procedure TUADataNav.WMKillFocus(var Message: TWMKillFocus);
begin
end;
procedure TUADataNav.WMSetFocus(var Message: TWMSetFocus);
begin
end;
procedure TUADataNav.WMSize(var Message: TWMSize);
var
W, H: Integer;
begin
inherited;
W := Width;
H := Height;
SetSize(W, H);
end;
procedure TUADataNav.WMWindowPosChanging(
var Message: TWMWindowPosChanging);
begin
inherited;
if (SWP_NOSIZE and Message.WindowPos.Flags) = 0 then
CalcMinSize(Message.WindowPos.cx, Message.WindowPos.cy);
end;
{ TUANavDataLink }
procedure TUANavDataLink.ActiveChanged;
begin
if FDataNav <> nil then FDataNav.ActiveChanged;
end;
constructor TUANavDataLink.Create(ANav: TUADataNav);
begin
inherited Create;
FDataNav := ANav;
VisualControl := True;
end;
procedure TUANavDataLink.DataSetChanged;
begin
if FDataNav <> nil then FDataNav.DataChanged;
end;
destructor TUANavDataLink.Destroy;
begin
FDataNav := nil;
inherited Destroy;
end;
procedure TUANavDataLink.EditingChanged;
begin
if FDataNav <> nil then FDataNav.EditingChanged;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -