mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 01:39:25 +02:00
parent
c69b4039cf
commit
17be5daa11
@ -1,30 +1,76 @@
|
|||||||
object Form1: TForm1
|
object Form1: TForm1
|
||||||
Left = 243
|
Left = 245
|
||||||
Height = 240
|
Height = 552
|
||||||
Top = 175
|
Top = 98
|
||||||
Width = 320
|
Width = 628
|
||||||
Caption = 'Form1'
|
Caption = 'Form1'
|
||||||
ClientHeight = 240
|
ClientHeight = 552
|
||||||
ClientWidth = 320
|
ClientWidth = 628
|
||||||
|
OnPaint = FormPaint
|
||||||
LCLVersion = '1.1'
|
LCLVersion = '1.1'
|
||||||
object Button1: TButton
|
object Button1: TButton
|
||||||
Left = 114
|
Left = 548
|
||||||
Height = 25
|
Height = 25
|
||||||
Top = 103
|
Top = 4
|
||||||
Width = 75
|
Width = 75
|
||||||
Caption = 'Do It'
|
Caption = 'Do It'
|
||||||
OnClick = Button1Click
|
OnClick = Button1Click
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
end
|
end
|
||||||
object Button2: TButton
|
object btn24217: TButton
|
||||||
Left = 114
|
Left = 548
|
||||||
Height = 25
|
Height = 25
|
||||||
Top = 193
|
Top = 36
|
||||||
Width = 75
|
Width = 75
|
||||||
Caption = 'Button2'
|
Caption = 'btn24217'
|
||||||
OnClick = Button2Click
|
OnClick = btn24217Click
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
end
|
end
|
||||||
|
object btn19435: TButton
|
||||||
|
Left = 548
|
||||||
|
Height = 25
|
||||||
|
Top = 68
|
||||||
|
Width = 75
|
||||||
|
Caption = 'btn19435'
|
||||||
|
OnClick = btn19435Click
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
object chkTests: TCheckGroup
|
||||||
|
Left = 528
|
||||||
|
Height = 80
|
||||||
|
Top = 100
|
||||||
|
Width = 97
|
||||||
|
AutoFill = True
|
||||||
|
Caption = 'Paint or Print'
|
||||||
|
ChildSizing.LeftRightSpacing = 6
|
||||||
|
ChildSizing.TopBottomSpacing = 6
|
||||||
|
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
|
||||||
|
ChildSizing.EnlargeVertical = crsHomogenousChildResize
|
||||||
|
ChildSizing.ShrinkHorizontal = crsScaleChilds
|
||||||
|
ChildSizing.ShrinkVertical = crsScaleChilds
|
||||||
|
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
||||||
|
ChildSizing.ControlsPerLine = 1
|
||||||
|
ClientHeight = 63
|
||||||
|
ClientWidth = 93
|
||||||
|
Items.Strings = (
|
||||||
|
'24217'
|
||||||
|
'19435'
|
||||||
|
'TestHola'
|
||||||
|
)
|
||||||
|
OnItemClick = chkTestsItemClick
|
||||||
|
TabOrder = 3
|
||||||
|
Data = {
|
||||||
|
03000000020202
|
||||||
|
}
|
||||||
|
end
|
||||||
|
object btnPrintAll: TButton
|
||||||
|
Left = 548
|
||||||
|
Height = 25
|
||||||
|
Top = 192
|
||||||
|
Width = 75
|
||||||
|
Caption = 'btnPrintAll'
|
||||||
|
TabOrder = 4
|
||||||
|
end
|
||||||
object PrintDialog1: TPrintDialog
|
object PrintDialog1: TPrintDialog
|
||||||
left = 129
|
left = 129
|
||||||
top = 28
|
top = 28
|
||||||
|
@ -6,7 +6,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs,
|
Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs,
|
||||||
StdCtrls, CairoPrinter;
|
StdCtrls, ExtCtrls, CairoPrinter;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -14,13 +14,20 @@ type
|
|||||||
|
|
||||||
TForm1 = class(TForm)
|
TForm1 = class(TForm)
|
||||||
Button1: TButton;
|
Button1: TButton;
|
||||||
Button2: TButton;
|
btn24217: TButton;
|
||||||
|
btn19435: TButton;
|
||||||
|
btnPrintAll: TButton;
|
||||||
|
chkTests: TCheckGroup;
|
||||||
PrintDialog1: TPrintDialog;
|
PrintDialog1: TPrintDialog;
|
||||||
|
procedure btn19435Click(Sender: TObject);
|
||||||
procedure Button1Click(Sender: TObject);
|
procedure Button1Click(Sender: TObject);
|
||||||
procedure Button2Click(Sender: TObject);
|
procedure btn24217Click(Sender: TObject);
|
||||||
|
procedure chkTestsItemClick(Sender: TObject; Index: integer);
|
||||||
|
procedure FormPaint(Sender: TObject);
|
||||||
private
|
private
|
||||||
{ private declarations }
|
procedure Draw19435(cnv: TCanvas; XDPI,YDPI: Integer);
|
||||||
procedure DrawSample(cnv: TCanvas; XDPI,YDPI: Integer);
|
procedure Draw24217(cnv: TCanvas; XDPI,YDPI: Integer);
|
||||||
|
procedure DrawTestBoth(cnv: TCanvas; XDPI,YDPI: Integer);
|
||||||
public
|
public
|
||||||
{ public declarations }
|
{ public declarations }
|
||||||
end;
|
end;
|
||||||
@ -46,28 +53,96 @@ begin
|
|||||||
Printer.BeginDoc;
|
Printer.BeginDoc;
|
||||||
|
|
||||||
with Printer do
|
with Printer do
|
||||||
DrawSample(Canvas, XDPI, YDPI);
|
Draw24217(Canvas, XDPI, YDPI);
|
||||||
|
|
||||||
Printer.EndDoc;
|
Printer.EndDoc;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TForm1.Button2Click(Sender: TObject);
|
procedure TForm1.btn19435Click(Sender: TObject);
|
||||||
var
|
var
|
||||||
CairoPrinter: TCairoFilePrinter;
|
CairoPrinter: TCairoFilePrinter;
|
||||||
begin
|
begin
|
||||||
CairoPrinter := TCairoFilePrinter.create;
|
CairoPrinter := TCairoFilePrinter.create;
|
||||||
CairoPrinter.CairoBackend:=cbPS;
|
//CairoPrinter.CairoBackend:=cbPS;
|
||||||
//CairoPrinter.CairoBackend:=cbPDF;
|
CairoPrinter.CairoBackend:=cbPDF;
|
||||||
CairoPrinter.FileName:='salida';
|
CairoPrinter.FileName:='19435';
|
||||||
CairoPrinter.BeginDoc;
|
CairoPrinter.BeginDoc;
|
||||||
with CairoPrinter do
|
with CairoPrinter do
|
||||||
DrawSample(Canvas, XDPI, YDPI);
|
Draw19435(Canvas, XDPI, YDPI);
|
||||||
CairoPrinter.EndDoc;
|
CairoPrinter.EndDoc;
|
||||||
CairoPrinter.Free;
|
CairoPrinter.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TForm1.DrawSample(cnv: TCanvas; XDPI, YDPI: Integer);
|
procedure TForm1.btn24217Click(Sender: TObject);
|
||||||
|
var
|
||||||
|
CairoPrinter: TCairoFilePrinter;
|
||||||
|
begin
|
||||||
|
CairoPrinter := TCairoFilePrinter.create;
|
||||||
|
//CairoPrinter.CairoBackend:=cbPS;
|
||||||
|
CairoPrinter.CairoBackend:=cbPDF;
|
||||||
|
CairoPrinter.FileName:='salida';
|
||||||
|
CairoPrinter.BeginDoc;
|
||||||
|
with CairoPrinter do
|
||||||
|
Draw24217(Canvas, XDPI, YDPI);
|
||||||
|
CairoPrinter.EndDoc;
|
||||||
|
CairoPrinter.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.chkTestsItemClick(Sender: TObject; Index: integer);
|
||||||
|
begin
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.FormPaint(Sender: TObject);
|
||||||
|
var
|
||||||
|
ResX,ResY: Integer;
|
||||||
|
begin
|
||||||
|
ResX := Screen.PixelsPerInch;
|
||||||
|
ResY := ResX;
|
||||||
|
if chkTests.Checked[0] then Draw24217(Canvas, ResX, ResY);
|
||||||
|
if chkTests.Checked[1] then Draw19435(Canvas, ResX, ResY);
|
||||||
|
if chkTests.Checked[2] then DrawTestBoth(Canvas, ResX, ResY);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.Draw19435(cnv: TCanvas; XDPI, YDPI: Integer);
|
||||||
|
const
|
||||||
|
prefix = 'Arabic: ';
|
||||||
|
var
|
||||||
|
sz: TSize;
|
||||||
|
x,y: Integer;
|
||||||
|
fx: Integer;
|
||||||
|
begin
|
||||||
|
with cnv do
|
||||||
|
begin
|
||||||
|
Font.Color := clDefault;
|
||||||
|
Font.Name := 'Sans';
|
||||||
|
Font.Size := 24;
|
||||||
|
cnv.Brush.Style := bsClear;
|
||||||
|
x := Round(XDPI);
|
||||||
|
y := Round(YDPI);
|
||||||
|
sz := TextExtent(PREFIX);
|
||||||
|
fx := Round(250*XDPI/300); // for demostration purposes this should make both
|
||||||
|
// texts overlap both in screen and in printer
|
||||||
|
TextOut(x, y, 'English with font ');
|
||||||
|
|
||||||
|
// alternative 1, depend on font size, for Size=24 both texts overlaps
|
||||||
|
inc(y, sz.cy);
|
||||||
|
TextOut(x, y, PREFIX);
|
||||||
|
TextOut(x+fx, y, 'اللغة العربية');
|
||||||
|
|
||||||
|
// alternative 2, measure prefix
|
||||||
|
inc(y, sz.cy);
|
||||||
|
TextOut(x, y, PREFIX);
|
||||||
|
TextOut(x+sz.cx, y, 'اللغة العربية');
|
||||||
|
|
||||||
|
// alternative 3, simpler
|
||||||
|
inc(y, sz.cy);
|
||||||
|
Textout(x, y, PREFIX + 'اللغة العربية');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.Draw24217(cnv: TCanvas; XDPI, YDPI: Integer);
|
||||||
var
|
var
|
||||||
sz:TSize;
|
sz:TSize;
|
||||||
r:tRect;
|
r:tRect;
|
||||||
@ -75,7 +150,10 @@ var
|
|||||||
kx,ky:double;
|
kx,ky:double;
|
||||||
begin
|
begin
|
||||||
|
|
||||||
|
cnv.Font.Color := clDefault;
|
||||||
|
cnv.Pen.Color := clBlack;
|
||||||
cnv.Font.Size:=24;
|
cnv.Font.Size:=24;
|
||||||
|
cnv.Brush.style := bsClear;
|
||||||
|
|
||||||
r.Left:=round(XDPI*0.5);
|
r.Left:=round(XDPI*0.5);
|
||||||
r.Top:=round(YDPI*0.5);
|
r.Top:=round(YDPI*0.5);
|
||||||
@ -134,5 +212,29 @@ begin
|
|||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.DrawTestBoth(cnv: TCanvas; XDPI, YDPI: Integer);
|
||||||
|
const
|
||||||
|
CTEXT='Hola';
|
||||||
|
var
|
||||||
|
R: TRect;
|
||||||
|
begin
|
||||||
|
|
||||||
|
R := Rect(XDPI, YDPI*2, XDPI*3, round(YDPI*2.5));
|
||||||
|
|
||||||
|
cnv.Font.Name := 'Arial';
|
||||||
|
cnv.Font.Size := 40;
|
||||||
|
cnv.Font.Color := clBlue;
|
||||||
|
cnv.Pen.Color := RGBToColor($AA, $CC, $FF);
|
||||||
|
cnv.Brush.Style := bsClear;
|
||||||
|
cnv.TextRect(R, R.Left, R.Top, CTEXT);
|
||||||
|
cnv.Rectangle(R);
|
||||||
|
|
||||||
|
OffsetRect(R, 5, 5);
|
||||||
|
cnv.Pen.Color := RGBToColor($FF, $AA, $AA);
|
||||||
|
cnv.Font.Color := clRed;
|
||||||
|
cnv.TextOut(R.left, R.Top, CTEXT);
|
||||||
|
cnv.Rectangle(R);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user