⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmpagenavigator.pas

📁 GmPrintSuite 2.96.7] a
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    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 + -