📄 teenavigator.pas
字号:
Inc(X, ButtonWidth + Space);
end
else
Buttons[I].SetBounds (Width + 1, 0, ButtonWidth, Height);
end;
end;
procedure TCustomTeeNavigator.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var W : Integer;
H : Integer;
begin
W:=AWidth;
H:=AHeight;
if not HandleAllocated then SetSize(W,H);
inherited SetBounds(ALeft,ATop,W,H);
end;
procedure TCustomTeeNavigator.CheckSize;
var W : Integer;
H : Integer;
begin
{ check for minimum size }
W:=Width;
H:=Height;
SetSize(W,H);
if (W<>Width) or (H<>Height) then inherited SetBounds(Left,Top,W,H);
end;
{$IFNDEF CLX}
procedure TCustomTeeNavigator.WMSize(var Message: TWMSize);
begin
inherited;
CheckSize;
Message.Result := 0;
end;
{$ENDIF}
procedure TCustomTeeNavigator.BtnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var OldFocus: TTeeNavigateBtn;
begin
OldFocus:=FocusedButton;
FocusedButton:=TTeeNavButton(Sender).Index;
if TabStop {$IFNDEF CLX}and (GetFocus<>Handle){$ENDIF} and CanFocus then
begin
SetFocus;
{$IFNDEF CLX}if (GetFocus<>Handle) then Exit;{$ENDIF}
end
else if TabStop {$IFNDEF CLX}and (GetFocus=Handle){$ENDIF} and (OldFocus<>FocusedButton) then
begin
Buttons[OldFocus].Invalidate;
Buttons[FocusedButton].Invalidate;
end;
end;
{$IFNDEF CLX}
procedure TCustomTeeNavigator.WMSetFocus(var Message: TWMSetFocus);
begin
Buttons[FocusedButton].Invalidate;
end;
procedure TCustomTeeNavigator.WMKillFocus(var Message: TWMKillFocus);
begin
Buttons[FocusedButton].Invalidate;
end;
{$ENDIF}
procedure TCustomTeeNavigator.KeyDown(var Key: Word; Shift: TShiftState);
var NewFocus : TTeeNavigateBtn;
OldFocus : TTeeNavigateBtn;
begin
OldFocus:=FocusedButton;
case Key of
TeeKey_Right :
begin
NewFocus := FocusedButton;
repeat
if NewFocus < High(Buttons) then NewFocus := Succ(NewFocus);
until (NewFocus = High(Buttons)) or (Buttons[NewFocus].Visible);
if NewFocus <> FocusedButton then
begin
FocusedButton := NewFocus;
Buttons[OldFocus].Invalidate;
Buttons[FocusedButton].Invalidate;
end;
end;
TeeKey_Left :
begin
NewFocus := FocusedButton;
repeat
if NewFocus > Low(Buttons) then
NewFocus := Pred(NewFocus);
until (NewFocus = Low(Buttons)) or (Buttons[NewFocus].Visible);
if NewFocus <> FocusedButton then
begin
FocusedButton := NewFocus;
Buttons[OldFocus].Invalidate;
Buttons[FocusedButton].Invalidate;
end;
end;
TeeKey_Space :
if Buttons[FocusedButton].Enabled then Buttons[FocusedButton].Click;
end;
end;
{$IFNDEF CLX}
procedure TCustomTeeNavigator.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
Message.Result:=DLGC_WANTARROWS;
end;
{$ENDIF}
procedure TCustomTeeNavigator.ClickHandler(Sender: TObject);
begin
BtnClick(TTeeNavButton(Sender).Index);
end;
{$IFNDEF CLX}
procedure TCustomTeeNavigator.CMEnabledChanged(var Message: TMessage);
begin
inherited;
if not (csLoading in ComponentState) then EnableButtons;
end;
{$ENDIF}
procedure TCustomTeeNavigator.BtnClick(Index: TTeeNavigateBtn);
begin
EnableButtons;
if Assigned(FOnButtonClicked) then FOnButtonClicked(Index);
end;
procedure TCustomTeeNavigator.Loaded;
begin
inherited;
CheckSize;
InitHints;
EnableButtons;
end;
procedure TCustomTeeNavigator.EnableButtons;
begin
end;
{$R TeeNavig.res}
procedure TCustomTeeNavigator.InitButtons;
var I : TTeeNavigateBtn;
X : Integer;
ResName : string;
begin
MinBtnSize:=TeePoint(20,18);
X:=0;
for I:=Low(Buttons) to High(Buttons) do
begin
Buttons[I]:=TTeeNavButton.Create(Self);
With Buttons[I] do
begin
Flat:=True;
Index:=I;
Visible:=True;
Enabled:=False;
SetBounds(X, 0, MinBtnSize.X, MinBtnSize.Y);
FmtStr(ResName, 'TeeNav_%s', [BtnTypeName[I]]);
Glyph.LoadFromResourceName(HInstance, ResName);
NumGlyphs:=2;
OnClick:=ClickHandler;
OnMouseDown:=BtnMouseDown;
Parent:=Self;
Inc(X,MinBtnSize.X);
end;
end;
Buttons[nbInsert].Visible:=False;
Buttons[nbDelete].Visible:=False;
Buttons[nbEdit].Visible:=False;
Buttons[nbPost].Visible:=False;
Buttons[nbCancel].Visible:=False;
end;
type TTeePanelAccess=class(TCustomTeePanel);
procedure TCustomTeeNavigator.SetPanel(const Value: TCustomTeePanel);
begin
if FPanel<>Value then
begin
if Assigned(FPanel) then
begin
{$IFDEF D5}
FPanel.RemoveFreeNotification(Self);
{$ENDIF}
TTeePanelAccess(FPanel).RemoveListener(Self);
end;
FPanel:=Value;
if Assigned(FPanel) then
begin
FPanel.FreeNotification(Self);
TTeePanelAccess(FPanel).Listeners.Add(Self);
end;
EnableButtons;
end;
end;
procedure TCustomTeeNavigator.TeeEvent(Event: TTeeEvent);
begin
DoTeeEvent(Event);
end;
procedure TCustomTeeNavigator.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if (Operation=opRemove) and Assigned(FPanel) and (AComponent=FPanel) then
Panel:=nil;
end;
{$IFDEF CLX}
procedure TCustomTeeNavigator.BoundsChanged;
var W, H: Integer;
begin inherited; W := Width; H := Height; SetSize(W, H);end;
{$ENDIF}
procedure TCustomTeeNavigator.DoTeeEvent(Event: TTeeEvent);
begin
end;
Function TCustomTeeNavigator.PageCount:Integer;
begin
result:=1; // abstract
end;
procedure TCustomTeeNavigator.Print;
begin
end;
{ TTeeNavButton }
Destructor TTeeNavButton.Destroy;
begin
FRepeatTimer.Free;
inherited;
end;
procedure TTeeNavButton.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
inherited;
if FRepeatTimer = nil then
FRepeatTimer := TTimer.Create(Self);
FRepeatTimer.OnTimer := TimerExpired;
FRepeatTimer.Interval := InitRepeatPause;
FRepeatTimer.Enabled := True;
end;
procedure TTeeNavButton.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
inherited;
if Assigned(FRepeatTimer) then FRepeatTimer.Enabled:=False;
end;
procedure TTeeNavButton.TimerExpired(Sender: TObject);
begin
FRepeatTimer.Interval:=RepeatPause;
if (FState=bsDown) and MouseCapture then
begin
try
Click;
except
FRepeatTimer.Enabled:=False;
raise;
end;
end;
end;
procedure TTeeNavButton.Paint;
var R : TRect;
begin
inherited;
if {$IFNDEF CLX}(GetFocus=Parent.Handle) and{$ENDIF}
(FIndex=TCustomTeeNavigator(Parent).FocusedButton) then
begin
R:=TeeRect(3,3,Width-3,Height-3);
if FState=bsDown then OffsetRect(R,1,1);
{$IFDEF CLX}
Canvas.DrawFocusRect(R);
{$ELSE}
DrawFocusRect(Canvas.Handle,R);
{$ENDIF}
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -