
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@585 8e941d3f-bd1b-0410-a28a-d453659cc2b4
181 lines
4.4 KiB
ObjectPascal
181 lines
4.4 KiB
ObjectPascal
{*
|
|
* << P o w e r P d f >> -- PRAnnotation.pas
|
|
*
|
|
* Copyright (c) 1999-2001 Takezou. <takeshi_kanno@est.hi-ho.ne.jp>
|
|
*
|
|
* This library is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU Library General Public License as published
|
|
* by the Free Software Foundation; either version 2 of the License, or any
|
|
* later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public License
|
|
* along with this library.
|
|
*
|
|
* 2001.07.07 Create
|
|
* 2001.08.12 Changed the implementation of annotation.
|
|
*
|
|
*}
|
|
{$IFDEF LAZ_POWERPDF}
|
|
{$H+}
|
|
{$ENDIF}
|
|
unit PRAnnotation;
|
|
|
|
interface
|
|
|
|
uses
|
|
{$ifdef LAZ_POWERPDF}
|
|
LCLIntf, LCLType, LMessages,
|
|
{$ELSE}
|
|
Windows, Messages,
|
|
{$endif}
|
|
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
PReport, PdfDoc, PdfFonts, PdfTypes;
|
|
|
|
type
|
|
TPRAnnotation = class(TPRItem)
|
|
private
|
|
FLines: TStrings;
|
|
FOpened: boolean;
|
|
procedure SetLines(Value: TStrings);
|
|
procedure SetText(Value: string);
|
|
function GetText: string;
|
|
function GetLines: TStrings;
|
|
protected
|
|
{$IFDEF LAZ_POWERPDF}
|
|
procedure CMTextChanged(var Message: TLMessage); message CM_TEXTCHANGED;
|
|
{$ELSE}
|
|
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
|
|
{$ENDIF}
|
|
procedure Paint; override;
|
|
procedure Print(ACanvas: TPRCanvas; ARect: TRect); override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
property Text: string read GetText write SetText;
|
|
published
|
|
property Caption;
|
|
property Lines: TStrings read GetLines write SetLines;
|
|
property Opened: boolean read FOpened write FOpened;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TPRAnnotation }
|
|
|
|
// SetLines
|
|
procedure TPRAnnotation.SetLines(Value: TStrings);
|
|
begin
|
|
FLines.Assign(Value);
|
|
Invalidate;
|
|
end;
|
|
|
|
// GetLines
|
|
function TPRAnnotation.GetLines: TStrings;
|
|
begin
|
|
result := FLines;
|
|
end;
|
|
|
|
// SetText
|
|
procedure TPRAnnotation.SetText(Value: string);
|
|
begin
|
|
FLines.Text := Value;
|
|
end;
|
|
|
|
// GetText
|
|
function TPRAnnotation.GetText: string;
|
|
begin
|
|
result := Trim(FLines.Text);
|
|
end;
|
|
|
|
// Create
|
|
constructor TPRAnnotation.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FLines := TStringList.Create;
|
|
end;
|
|
|
|
// Destroy
|
|
destructor TPRAnnotation.Destroy;
|
|
begin
|
|
FLines.Free;
|
|
inherited;
|
|
end;
|
|
|
|
// CMTextChanged
|
|
{$IFDEF LAZ_POWERPDF}
|
|
procedure TPRAnnotation.CMTextChanged(var Message: TLMessage);
|
|
{$ELSE}
|
|
procedure TPRAnnotation.CMTextChanged(var Message: TMessage);
|
|
{$ENDIF}
|
|
begin
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TPRAnnotation.Paint;
|
|
var
|
|
W: Integer;
|
|
tmpRect: TRect;
|
|
const
|
|
PDF_ANNOT_TITLE_HEIGHT = 15;
|
|
begin
|
|
with Canvas do
|
|
begin
|
|
tmpRect := GetClientRect;
|
|
tmpRect.Top := PDF_ANNOT_TITLE_HEIGHT;
|
|
InflateRect(tmpRect, -5, -1);
|
|
tmpRect.Right := tmpRect.Right - 24;
|
|
Brush.Color := clWindow;
|
|
Font.Size := 10;
|
|
Font.Style := [];
|
|
Rectangle(0, PDF_ANNOT_TITLE_HEIGHT, self.Width-1, self.Height-1);
|
|
DrawText(Handle, PChar(Text), -1, TmpRect, DT_WORDBREAK);
|
|
|
|
Brush.Color := clYellow;
|
|
Rectangle(0, 0, self.Width-1, PDF_ANNOT_TITLE_HEIGHT + 1);
|
|
Font.Size := 8;
|
|
Font.Style := [fsBold];
|
|
W := TextWidth(Caption);
|
|
TextOut((self.Width - W) div 2, 4, Caption);
|
|
end;
|
|
end;
|
|
|
|
procedure TPRAnnotation.Print(ACanvas: TPRCanvas; ARect: TRect);
|
|
var
|
|
FAnnotation: TPdfDictionary;
|
|
S: string;
|
|
APos: integer;
|
|
NewRect: TRect;
|
|
begin
|
|
// omitting LF charactors from CRLF sequence.
|
|
S := Text;
|
|
APos := pos(#13#10, S);
|
|
while APos > 0 do
|
|
begin
|
|
S := Copy(S, 1, APos) + Copy(S, APos+2, Length(S) - APos-2);
|
|
APos := pos(#13#10, S);
|
|
end;
|
|
|
|
// creating annotation object and setting properties.
|
|
with NewRect do
|
|
begin
|
|
Top := Page.ClientHeight - ARect.Bottom;
|
|
Bottom := Page.ClientHeight - ARect.Top;
|
|
Left := ARect.Left;
|
|
Right := ARect.Right;
|
|
end;
|
|
with NewRect do
|
|
FAnnotation := ACanvas.PdfCanvas.Doc.CreateAnnotation(asTextNotes,
|
|
_PdfRect(Left, Top, Right, Bottom));
|
|
FAnnotation.AddItem('Contents', TPdfText.CreateText(S));
|
|
FAnnotation.AddItem('S', TPdfText.CreateText(Caption));
|
|
if Opened then
|
|
FAnnotation.AddItem('Open', TPdfBoolean.CreateBoolean(true));
|
|
end;
|
|
|
|
end.
|