📄 gmpreview.pas
字号:
var
Values: TGmValueList;
begin
// return the version of a TGmPreview which created the file referenced by
// the AFileName paramater...
Values := TGmValueList.Create;
try
Values.LoadFromFile(AFileName);
Result := Values.ReadExtValue(C_V, 0);
finally
Values.Free;
end;
end;
function TGmPreview.GetPageSize(Measurement: TGmMeasurement): TGmSize;
begin
Result := ConvertGmSize(FPages.PageSizeInch, gmInches, Measurement);
end;
function TGmPreview.HeaderRect: TGmValueRect;
begin
Result := FPages.HeaderRect;
end;
function TGmPreview.InsertPage(index: integer): TGmPage;
begin
Result := FPages.InsertPage(index);
end;
function TGmPreview.NewPage: TGmPage;
begin
Result := FPages.AddPage;
end;
function TGmPreview.GmObjectAtPos(x, y: Extended; Measurement: TGmMeasurement): TGmVisibleObject;
begin
CurrentPage.ObjectAtPos(x, y, Measurement, Result);
end;
function TGmPreview.GmObjectRect(AObject: TGmVisibleObject): TRect;
var
ARect: TRect;
Data: TGmObjectDrawData;
begin
if not Assigned(AObject) then Exit;
Data.Page := CurrentPageNum;
Data.NumPages := NumPages;
Data.PpiX := SCREEN_PPI;
Data.PpiY := SCREEN_PPI;
ARect := GmRectPointsToRect(AObject.BoundingRect(Data));
ARect := ScaleRect(ARect, Zoom/100);
OffsetRect(ARect,
(FPaper.PageRect.Left - HorzScrollBar.Position),
(FPaper.PageRect.Top - VertScrollBar.Position));
ARect.Left := ARect.Left-1;
ARect.Top := ARect.Top -1;
Result := ARect;
end;
function TGmPreview.Tokenize(AText: string; APage: integer): string;
begin
Result := GmFuncs.Tokenize(AText, APage, NumPages, DateTokenFormat, TimeTokenFormat);
end;
procedure TGmPreview.AddAssociatedComponent(AComponent: TComponent);
begin
if FRegisteredComponents.IndexOf(AComponent) = -1 then
FRegisteredComponents.Add(AComponent);
end;
procedure TGmPreview.RemoveAssociatedComponent(AComponent: TComponent);
begin
if FRegisteredComponents.IndexOf(AComponent) <> -1 then
FRegisteredComponents.Delete(FRegisteredComponents.IndexOf(AComponent));
end;
procedure TGmPreview.Assign(Source: TPersistent);
begin
//
end;
procedure TGmPreview.BeginUpdate;
begin
MessageToControls(GM_BEGINUPDATE, 0, 0);
FPages.BeginUpdate;
FPaper.BeginUpdate;
end;
procedure TGmPreview.CenterOnClick(x, y: integer);
var
CenterPoint: TPoint;
begin
// center the page on the X,Y coordinates when the scroll bars are visible...
CenterPoint.X := Width div 2;
CenterPoint.Y := Height div 2;
HorzScrollBar.Position := (x - CenterPoint.X);
VertScrollBar.Position := (y - CenterPoint.y);
end;
procedure TGmPreview.Clear;
begin
FSelectedObject := nil;
FPages.ClearPages;
end;
procedure TGmPreview.DeleteCurrentPage;
begin
DeletePage(CurrentPageNum-1);
end;
procedure TGmPreview.DeletePage(index: integer);
begin
FPages.DeletePage(index);
end;
procedure TGmPreview.DeleteSelectedGmObject;
var
AObject: TGmBaseObject;
begin
if Assigned(FSelectedObject) then
begin
AObject := FSelectedObject;
FSelectedObject := nil;
CurrentPage.DeleteGmObject(AObject);
end;
end;
procedure TGmPreview.DragDrawCancel;
begin
FPaper.DragDrawStop;
end;
procedure TGmPreview.DragDrawStart;
begin
FPaper.DragDrawStart;
end;
procedure TGmPreview.DragDrawToCanvas;
var
ARect: TGmRect;
begin
if not FPaper.IsDragDrawing then Exit;
DragDrawCancel;
ARect := FPaper.DragDrawInchRect;
if EqualGmPoints(ARect.TopLeft, ARect.BottomRight) then Exit;
case FPaper.DragDrawShape of
gmDragLine : Canvas.Line(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom, gmInches);
gmDragEllipse : Canvas.Ellipse(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom, gmInches);
gmDragRectangle: Canvas.Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom, gmInches);
end;
end;
procedure TGmPreview.DragDrawZoom;
var
Area: TRect;
DragRect: TRect;
begin
if not FPaper.IsDragDrawing then Exit;
DragDrawCancel;
DragRect := FPaper.DragDrawRect;
Area.Left := MinInt(DragRect.Left, DragRect.Right);
Area.Top := MinInt(DragRect.Top, DragRect.Bottom);
Area.Right := MaxInt(DragRect.Left, DragRect.Right);
Area.Bottom := MaxInt(DragRect.Top, DragRect.Bottom);
ZoomToArea(Area);
end;
procedure TGmPreview.DragGmObjectStart(AObject: TGmVisibleObject);
begin
if (not Assigned(AObject)) or (AObject.AllowDrag = False) then Exit;
FObjectDragging := True;
FSelectedObject := AObject;
FDragObjectStart := FMousePosInch;
FDragObjectRect := GmObjectRect(FSelectedObject);
FLastObjectRect := Rect(0,0,0,0);
FPaper.Invalidate;
end;
procedure TGmPreview.DragGmObjectEnd;
var
Offset: TGmPoint;
begin
if not FObjectDragging then Exit;
Offset.X := (FDragObjectStart.X - FMousePosInch.X);
Offset.Y := (FDragObjectStart.Y - FMousePosInch.Y);
FObjectDragging := False;
if not Assigned(FSelectedObject) then Exit;
FSelectedObject.OffsetObject(0-Offset.X, 0-Offset.Y, gmInches);
FPaper.Invalidate;
MessageToControls(GM_PAGE_CONTENT_CHANGED, 0, 0);
end;
procedure TGmPreview.EndUpdate;
begin
FPages.EndUpdate;
FPaper.EndUpdate;
MessageToControls(GM_ENDUPDATE, 0, 0);
end;
procedure TGmPreview.FindText(AText: string; CaseSensative: Boolean; AList: TList);
begin
FPages.FindText(AText, CaseSensative, AList);
end;
procedure TGmPreview.FirstPage;
begin
FPages.CurrentPage := 1;
end;
procedure TGmPreview.FitHeight;
begin
Zoom := Trunc(GetFitHeightScale * 100);
end;
procedure TGmPreview.FitWholePage;
begin
Zoom := Trunc(MinFloat(GetFitWidthScale, GetFitHeightScale) * 100);
end;
procedure TGmPreview.FitWidth;
begin
Zoom := Trunc(GetFitWidthScale * 100);
end;
procedure TGmPreview.LastPage;
begin
FPages.CurrentPage := NumPages;
end;
procedure TGmPreview.LoadFromFile(AFilename: string);
var
AFileStream: TFileStream;
begin
try
AFileStream := TFileStream.Create(AFileName, fmOpenRead);
try
LoadFromStream(AFileStream);
finally
AFileStream.Free;
end;
except
// display an error!
end;
end;
procedure TGmPreview.LoadFromStream(Stream: TStream);
begin
FPages.LoadFromStream(Stream);
end;
procedure TGmPreview.NextPage;
begin
FPages.CurrentPage := FPages.CurrentPage + 1;
end;
procedure TGmPreview.PaperSizes(AStrings: TStrings);
var
ICount: TGmPaperSize;
begin
AStrings.BeginUpdate;
AStrings.Clear;
for ICount := Low(TGmPaperSize) to High(TGmPaperSize) do
AStrings.Add(PaperSizeToStr(ICount));
AStrings.EndUpdate;
end;
procedure TGmPreview.PrevPage;
begin
FPages.CurrentPage := FPages.CurrentPage - 1;
end;
procedure TGmPreview.Print;
begin
PrintRange(1, NumPages);
end;
procedure TGmPreview.PrintCurrentPage;
begin
FPages.PrintRange(CurrentPageNum, CurrentPageNum);
end;
procedure TGmPreview.PrintRange(APageFrom, APageTo: integer);
begin
BeginUpdate;
FPages.PrintRange(APageFrom, APageTo);
EndUpdate;
end;
procedure TGmPreview.PrintToFile(AFileName: string);
begin
FPages.PrintToFile(AFileName);
end;
procedure TGmPreview.SaveToFile(AFileName: string);
var
AFileStream: TFileStream;
begin
try
AFileStream := TFileStream.Create(AFileName, fmCreate);
try
SaveToStream(AFileStream);
finally
AFileStream.Free;
end;
except
// display an error!
end;
end;
procedure TGmPreview.SaveToStream(Stream: TStream);
begin
FPages.SaveToStream(Stream);
end;
procedure TGmPreview.ScrollToPosition(xPercent, yPercent: Extended);
begin
HorzScrollBar.Position := Round((xPercent/100) * (HorzScrollBar.Range - ClientWidth));
VertScrollBar.Position := Round((yPercent/100) * (VertScrollBar.Range - ClientHeight));
end;
procedure TGmPreview.SelectGmObject(AObject: TGmVisibleObject);
begin
FSelectedObject := AObject;
if FDrawSelectedBorder then Invalidate;
end;
procedure TGmPreview.SetCursor(ACursor: TGmCursor);
begin
// change the preview page cursor...
case ACursor of
gmDefault : Cursor := crDefault;
gmZoomIn : Cursor := crZoomIn;
gmZoomOut : Cursor := crZoomOut;
end;
end;
procedure TGmPreview.SetCustomPageSize(AWidth, AHeight: Extended; Measurement: TGmMeasurement);
begin
FPages.SetPageSize(AWidth, AHeight, Measurement);
end;
procedure TGmPreview.StartPanning;
begin
if FPanning then Exit;
FPanning := True;
GetCursorPos(FPanningOrigin);
FPanningOrigin := ScreenToClient(FPanningOrigin);
FPanningScrollOrigin := Point(HorzScrollBar.Position, VertScrollBar.Position);
Screen.Cursor := crHandPoint;
end;
procedure TGmPreview.StopPanning;
begin
if not FPanning then Exit;
FPanning := False;
Screen.Cursor := crDefault;
end;
procedure TGmPreview.UsePrinterPageSize;
begin
FPages.UsePrinterPageSize;
end;
procedure TGmPreview.ZoomIn;
var
ICount: integer;
begin
if FZoomStyle = gmFixedZoom then
begin
Zoom := Zoom + FZoomIncrement;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -