📄 gmpreview.pas
字号:
Exit;
end;
for ICount := 0 to High(GM_VARIABLE_ZOOM) do
if GM_VARIABLE_ZOOM[ICount] > Zoom then
begin
Zoom := GM_VARIABLE_ZOOM[ICount];
Exit;
end;
end;
procedure TGmPreview.ZoomOut;
var
ICount: integer;
begin
if FZoomStyle = gmFixedZoom then
begin
Zoom := Zoom - FZoomIncrement;
Exit;
end;
for ICount := High(GM_VARIABLE_ZOOM) downto 0 do
if GM_VARIABLE_ZOOM[ICount] < Zoom then
begin
Zoom := GM_VARIABLE_ZOOM[ICount];
Exit;
end;
end;
procedure TGmPreview.ReadData(Reader: TReader);
var
AMargins: TStringList;
begin
AMargins := TStringList.Create;
try
AMargins.CommaText := Reader.ReadString;
FPages.Margins.Left.AsTwips := StrToInt(AMargins[0]);
FPages.Margins.Top.AsTwips := StrToInt(AMargins[1]);
FPages.Margins.Right.AsTwips := StrToInt(AMargins[2]);
FPages.Margins.Bottom.AsTwips := StrToInt(AMargins[3]);
if AMargins.Count = 4 then Exit;
PenFromString(FPages.Margins.Pen, AMargins[4]);
PenFromString(FPages.Margins.PrinterMarginPen, AMargins[5]);
finally
AMargins.Free;
end;
end;
procedure TGmPreview.WriteData(Writer: TWriter);
var
AMargins: TStringList;
begin
AMargins := TStringList.Create;
try
AMargins.Add(IntToStr(FPages.Margins.Left.AsTwips));
AMargins.Add(IntToStr(FPages.Margins.Top.AsTwips));
AMargins.Add(IntToStr(FPages.Margins.Right.AsTwips));
AMargins.Add(IntToStr(FPages.Margins.Bottom.AsTwips));
AMargins.Add(PenToString(FPages.Margins.Pen));
AMargins.Add(PenToString(FPages.Margins.PrinterMarginPen));
Writer.WriteString(AMargins.CommaText);
finally
AMargins.Free;
end;
end;
function TGmPreview.GetAvailablePageRect: TGmValueRect;
begin
Result := FPages.AvailablePageRect;
end;
function TGmPreview.GetAvailablePageHeight(Measurement: TGmMeasurement): Extended;
var
ARect: TGmRect;
begin
ARect := GetAvailablePageRect.AsInchRect;
Result := ConvertValue(ARect.Bottom - ARect.Top, gmInches, Measurement);
end;
function TGmPreview.GetAvailablePageGmRect(Measurement: TGmMeasurement): TGmRect;
begin
Result := ConvertGmRect(GetAvailablePageRect.AsInchRect, gmInches, Measurement);
end;
function TGmPreview.GetAvailablePageWidth(Measurement: TGmMeasurement): Extended;
var
ARect: TGmRect;
begin
ARect := GetAvailablePageRect.AsInchRect;
Result := ConvertValue(ARect.Right - ARect.Left, gmInches, Measurement);
end;
function TGmPreview.GetCurrentPage: TGmPage;
begin
Result := FPages[CurrentPageNum];
end;
function TGmPreview.GetCurrentPageNum: integer;
begin
Result := FPages.CurrentPage;
end;
function TGmPreview.GetDateFormat: string;
begin
Result := GlobalDateTokenFormat;
end;
function TGmPreview.GetDragDrawShape: TGmDragDrawing;
begin
Result := FPaper.DragDrawShape;
end;
function TGmPreview.GetFitHeightScale: Extended;
begin
Result := ((Height-(FPaper.Gutters.Top + FPaper.Gutters.Bottom)-20)) / (CurrentPage.PageSize[gmInches].Height * SCREEN_PPI);
end;
function TGmPreview.GetFitWidthScale: Extended;
begin
Result := ((Width-(FPaper.Gutters.Left + FPaper.Gutters.Right)-20)) / (CurrentPage.PageSize[gmInches].Width * SCREEN_PPI);
end;
function TGmPreview.GetFooter: TGmFooter;
begin
Result := FPages.Footer;
end;
function TGmPreview.GetGmPrinter: TGmPrinter;
begin
Result := FPages.GmPrinter;
end;
function TGmPreview.GetGutter: integer;
begin
Result := FPaper.Gutters.Left;
end;
function TGmPreview.GetHeader: TGmHeader;
begin
Result := FPages.Header;
end;
function TGmPreview.GetIsUpdating: Boolean;
begin
Result := FPages.Updating;
end;
function TGmPreview.GetMargins: TGmMargins;
begin
Result := FPages.Margins;
end;
function TGmPreview.GetNumPages: integer;
begin
Result := FPages.Count;
end;
function TGmPreview.GetPagesPerSheet: TGmPagesPerSheet;
begin
Result := FPages.PagesPerSheet;
end;
function TGmPreview.GetOrientation: TGmOrientation;
begin
Result := FPages.Orientation;
end;
function TGmPreview.GetPage(index: integer): TGmPage;
begin
Result := FPages[index];
end;
function TGmPreview.GetPageHeight(Measurement: TGmMeasurement): Extended;
begin
Result := CurrentPage.PageSize[Measurement].Height;
end;
function TGmPreview.GetPageWidth(Measurement: TGmMeasurement): Extended;
begin
Result := CurrentPage.PageSize[Measurement].Width;
end;
function TGmPreview.GetResourceTable: TObject;
begin
Result := FPages.ResourceTable;
end;
function TGmPreview.GetScratchCanvas: TCanvas;
begin
Result := FPaper.Canvas;
Result.Brush.Style := bsClear;
end;
function TGmPreview.GetTimeFormat: string;
begin
Result := GlobalTimeTokenFormat;
end;
function TGmPreview.GetZoom: integer;
begin
Result := FPaper.Zoom;
end;
procedure TGmPreview.DoAbortPrint(Sender: TObject);
begin
if Assigned(FOnAbortPrint) then FOnAbortPrint(Self);
end;
procedure TGmPreview.DoAfterPrint(Sender: TObject);
begin
if Assigned(FAfterPrint) then FAfterPrint(Self);
end;
procedure TGmPreview.DoBeforeLoad(Sender: TObject; Version: Extended; var LoadFile: Boolean);
begin
if Assigned(FBeforeLoad) then FBeforeLoad(Self, Version, LoadFile);
end;
procedure TGmPreview.DoBeforePrint(Sender: TObject);
begin
if Assigned(FBeforePrint) then FBeforePrint(Self);
end;
procedure TGmPreview.DoClear(Sender: TObject);
begin
if Assigned(FOnClear) then FOnClear(Self);
end;
procedure TGmPreview.DoPrintProgress(Sender: TObject; Printed, Total: integer);
begin
if Assigned(FOnPrintProgress) then FOnPrintProgress(Self, Printed, Total);
end;
procedure TGmPreview.DoMouseEnter(Sender: TObject);
begin
if Assigned(OnMouseEnter) then OnMouseEnter(Self);
end;
procedure TGmPreview.DoMouseLeave(Sender: TObject);
begin
if FPanning then StopPanning;
if Assigned(OnMouseLeave) then OnMouseLeave(Self);
end;
procedure TGmPreview.NewPageEvents(Sender: TObject);
begin
if Assigned(FOnNewPage) then FOnNewPage(Self);
if Assigned(FOnDrawHeader) then FOnDrawHeader(Self, HeaderRect, Canvas);
if Assigned(FOnDrawFooter) then FOnDrawFooter(Self, FooterRect, Canvas);
end;
procedure TGmPreview.EnablePaperMouseEvents;
begin
FPaper.OnMouseDown := DoMouseDown;
FPaper.OnMouseMove := DoMouseMove;
FPaper.OnMouseUp := DoMouseUp;
FPaper.OnPageMouseDown := DoPageMouseDown;
FPaper.OnPageMouseMove := DoPageMouseMove;
FPaper.OnPageMouseUp := DoPageMouseUp;
FPaper.OnPageDragDrop := DoPageDragDrop;
FPaper.OnPageDragOver := DoPageDragOver;
end;
procedure TGmPreview.HeaderFooterChanged(Sender: TObject);
begin
Invalidate;
MessageToControls(GM_HEADERFOOTER_CHANGED, 0, 0);
end;
procedure TGmPreview.LoadScrollPos;
begin
ScrollToPosition(FScrollPos.X, FScrollPos.Y);
end;
procedure TGmPreview.MessageToControls(AMessage: integer; Param1, Param2: integer);
var
ICount: integer;
AComponent: TComponent;
begin
// broadcast a message to all associated components...
if (not FPages.Updating) then
begin
for ICount := 0 to FRegisteredComponents.Count-1 do
begin
AComponent := FRegisteredComponents[ICount];
if (AComponent is TWinControl) and (AComponent.HasParent) then
SendMessage((AComponent as TWinControl).Handle, AMessage, Param1, Param2);
end;
end;
end;
procedure TGmPreview.NeedRichEdit(Sender: TObject; var ARichEdit: TCustomMemo);
begin
if Assigned(FOnNeedRichEdit) then FOnNeedRichEdit(Self, ARichEdit);
end;
procedure TGmPreview.SaveScrollPos;
begin
FScrollPos := GmPoint(0, 0);
if (HorzScrollBar.Range-ClientWidth) > 0 then
FScrollPos.X := 100 * (HorzScrollBar.Position / (HorzScrollBar.Range-ClientWidth));
if (VertScrollBar.Range-ClientHeight) > 0 then
FScrollPos.Y := 100 * (VertScrollBar.Position / (VertScrollBar.Range-ClientHeight));
end;
procedure TGmPreview.SetCurrentPageNum(Value: integer);
begin
FPages.CurrentPage := Value;
end;
procedure TGmPreview.SetDateFormat(Value: string);
begin
GlobalDateTokenFormat := Value;
end;
procedure TGmPreview.SetDragDrawShape(Value: TGmDragDrawing);
begin
FPaper.DragDrawShape := Value;
end;
procedure TGmPreview.SetFooter(Value: TGmFooter);
begin
FPages.Footer.Assign(Value);
end;
procedure TGmPreview.SetGutter(Value: integer);
begin
FPaper.Gutters := Rect(Value, Value, Value, Value);
end;
procedure TGmPreview.SetHeader(Value: TGmHeader);
begin
FPages.Header.Assign(Value);
end;
procedure TGmPreview.SetMargins(Value: TGmMargins);
begin
FPages.Margins.Assign(Value);
end;
procedure TGmPreview.SetMaxZoom(Value: integer);
begin
if FMaxZoom = Value then Exit;
if FMaxZoom < FMinZoom then
FMaxZoom := FMinZoom
else
FMaxZoom := Value;
if Zoom > FMaxZoom then Zoom := FMaxZoom;
end;
procedure TGmPreview.SetMinZoom(Value: integer);
begin
if FMinZoom = Value then Exit;
if FMinZoom > FMaxZoom then
FMinZoom := FMaxZoom
else
FMinZoom := Value;
if Zoom < FMinZoom then Zoom := FMinZoom;
end;
procedure TGmPreview.SetOrientation(Value: TGmOrientation);
begin
FPaper.BeginUpdate;
FPages.Orientation := Value;
FPaper.EndUpdate;
UpdateScrollBars;
end;
procedure TGmPreview.SetPagesPerSheet(Value: TGmPagesPerSheet);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -