📄 gmpagenavigator.pas
字号:
end;
end;
end;
procedure TGmPageNavigator.RedrawButtons;
var
ICount: TGmNavigateBtn;
InternalWidth: integer;
AOrigin: TPoint;
CurrentX: integer;
LastGroup: TGmButtonGroup;
begin
if not HasParent then Exit;
InternalWidth := GetTotalWidth;
AOrigin.x := (ClientWidth - InternalWidth) div 2;
AOrigin.y := ((ClientHeight - FBtnHeight) div 2);
if AOrigin.x < 0 then AOrigin.x := 0;
if AOrigin.y < 0 then AOrigin.y := 0;
CurrentX := AOrigin.x;
LastGroup := gmNavigateGroup;
for ICount := Low(Buttons) to High(Buttons) do
begin
if (ICount in FVisibleButtons) then
begin
if FGroupButtons then
begin
if (LastGroup <> ButtonGroup(Buttons[ICount].ButtonKind)) and (CurrentX > 0) then
Inc(CurrentX, FGroupSpacing);
end;
Buttons[ICount].Height := FBtnHeight;
Buttons[ICount].Width := FBtnWidth;
Buttons[ICount].Flat := FFlat;
Buttons[ICount].Left := CurrentX;
Buttons[ICount].Top := AOrigin.y;
Inc(CurrentX, FBtnWidth);
Buttons[ICount].Parent := Self;
LastGroup := ButtonGroup(Buttons[ICount].ButtonKind);
end
else
Buttons[ICount].Left := Width+1;
end;
if FAutoSize then
begin
Width := InternalWidth+BevelWidth;
Height := FBtnHeight+BevelWidth;
end;
end;
procedure TGmPageNavigator.SetAutoSize(Value: Boolean);
begin
if FAutoSize = Value then Exit;
FAutoSize := Value;
RedrawButtons;
end;
procedure TGmPageNavigator.SetCaption(var Message: TMessage);
begin
//
end;
procedure TGmPageNavigator.SetBorderWidth(Value: integer);
begin
if FBorderWidth = Value then Exit;
FBorderWidth := Value;
RedrawButtons;
end;
procedure TGmPageNavigator.SetBtnHeight(AHeight: integer);
begin
if FBtnHeight = AHeight then Exit;
FBtnHeight := AHeight;
RedrawButtons;
end;
procedure TGmPageNavigator.SetBtnWidth(AWidth: integer);
begin
if FBtnWidth = AWidth then Exit;
FBtnWidth := AWidth;
RedrawButtons;
end;
procedure TGmPageNavigator.SetFlat(AValue: Boolean);
begin
if FFlat = AValue then Exit;
FFlat := AValue;
RedrawButtons;
end;
procedure TGmPageNavigator.SetGroupButtons(Value: Boolean);
begin
if Value = FGroupButtons then Exit;
FGroupButtons := Value;
RedrawButtons;
end;
procedure TGmPageNavigator.SetGroupSpacing(Value: integer);
begin
if Value = FGroupSpacing then Exit;
FGroupSpacing := Value;
RedrawButtons;
end;
procedure TGmPageNavigator.SetPreview(APreview: TGmPreview);
begin
if Assigned(FPreview) then FPreview.RemoveAssociatedComponent(Self);
FPreview := APreview;
if Assigned(FPreview) then FPreview.AddAssociatedComponent(Self);
UpdateButtonStates;
end;
procedure TGmPageNavigator.SetShowButtonHints(Value: Boolean);
var
ICount: TGmNavigateBtn;
begin
if Value = FShowButtonHints then Exit;
for ICount := Low(Buttons) to High(Buttons) do
Buttons[ICount].ShowHint := Value;
FShowButtonHints := Value;
end;
procedure TGmPageNavigator.SetVisibleButtons(AButtons: TGmNavButtonSet);
var
ICount: TGmNavigateBtn;
begin
FVisibleButtons := AButtons;
for ICount := Low(Buttons) to High(Buttons) do
Buttons[ICount].Visible := (ICount in FVisibleButtons);
RedrawButtons;
end;
procedure TGmPageNavigator.UpdateButtonStates;
var
ICount: TGmNavigateBtn;
begin
if not Assigned(FPreview) then
begin
for ICount := Low(TGmNavigateBtn) to High(TGmNavigateBtn) do
Buttons[ICount].Enabled := False;
Exit;
end;
Buttons[gmFirstPage].Enabled := (FPreview.CurrentPageNum > 1);
Buttons[gmPrevPage].Enabled := (FPreview.CurrentPageNum > 1);
Buttons[gmNextPage].Enabled := (FPreview.CurrentPageNum < FPreview.NumPages);
Buttons[gmLastPage].Enabled := (FPreview.CurrentPageNum < FPreview.NumPages);
Buttons[gmAddPage].Enabled := True;
Buttons[gmDeletePage].Enabled := True;
Buttons[gmClear].Enabled := True;
Buttons[gmZoomIn].Enabled := (FPreview.Zoom < FPreview.MaxZoom);
Buttons[gmZoomOut].Enabled := (FPreview.Zoom > FPreview.MinZoom);
Buttons[gmActualSize].Enabled := True;
Buttons[gmFitHeight].Enabled := True;
Buttons[gmFitWidth].Enabled := True;
Buttons[gmFitWholePage].Enabled := True;
end;
//------------------------------------------------------------------------------
procedure TGmPageNavigator.CMColorChanged(var Message: TMessage);
begin
inherited;
{$IFDEF D4+}
Perform(CM_BORDERCHANGED, 0, 0);
{$ENDIF}
end;
procedure TGmPageNavigator.ButtonClicked(Sender: TObject);
var
ButtonKind: TGmNavigateBtn;
begin
if not Assigned(FPreview) then Exit;
ButtonKind := (Sender as TGmNavButton).ButtonKind;
case ButtonKind of
gmFirstPage : FPreview.FirstPage;
gmPrevPage : FPreview.PrevPage;
gmNextPage : FPreview.NextPage;
gmLastPage : FPreview.LastPage;
gmAddPage : FPreview.NewPage;
gmDeletePage : FPreview.DeleteCurrentPage;
gmClear : FPreview.Clear;
gmZoomIn : FPreview.ZoomIn;
gmZoomOut : FPreview.ZoomOut;
gmActualSize : FPreview.Zoom := 100;
gmFitWidth : FPreview.FitWidth;
gmFitHeight : FPreview.FitHeight;
gmFitWholePage: FPreview.FitWholePage;
end;
if Assigned(FOnClickNavButton) then FOnClickNavButton(Self, ButtonKind);
end;
procedure TGmPageNavigator.BeginUpdate(var Message: TMessage);
begin
Enabled := False;
end;
procedure TGmPageNavigator.EndUpdate(var Message: TMessage);
begin
if not FPreview.IsUpdating then
begin
Enabled := True;
UpdateButtonStates;
end;
end;
procedure TGmPageNavigator.Loaded;
var
ICount: TGmNavigateBtn;
ButtonHint: string;
begin
inherited Loaded;
if Assigned(FOnGetButtonHint) then
begin
for ICount := Low(Buttons) to High(Buttons) do
begin
ButtonHint := Buttons[ICount].Hint;
FOnGetButtonHint(Self, ICount, ButtonHint);
Buttons[ICount].Hint := ButtonHint;
end;
end;
RedrawButtons;
UpdateButtonStates;
end;
procedure TGmPageNavigator.NumPagesChanged(var Message: TMessage);
begin
UpdateButtonStates;
end;
procedure TGmPageNavigator.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = FPreview) then Preview := nil;
end;
procedure TGmPageNavigator.PageChanged(var Message: TMessage);
begin
UpdateButtonStates;
end;
procedure TGmPageNavigator.PreviewUpdated(var Message: TMessage);
begin
UpdateButtonStates;
end;
procedure TGmPageNavigator.PreviewZoomChanged(var Message: TMessage);
begin
UpdateButtonStates;
end;
procedure TGmPageNavigator.NavigatorResize(var Message: TMessage);
begin
inherited;
RedrawButtons;
end;
//------------------------------------------------------------------------------
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -