Sign in Join
Wiki copytemporary

printing strings/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: printing strings/de

OldNewLine
1+Zurück zur Seite [[code examples/de|Code Beispiele]].
2+
3+Dieser Artikel handelt vom Drucken unter Windows7 und Windows XP.
4+
5+Das Programm wurde auf beiden Betriebssystemen getestet.
6+
7+## Drucken
8+
9+Das Beispiel zeigt, wie man im eigenen Programm den Inhalt eines Strings oder einer Stringliste auf dem Drucker ausgeben kann.
10+
11+In diesem Beispiel wird die Klasse vom Typ Object abgeleitet.
12+
13+``` pascal
14+unit uDrucken;
15+
16+{$mode objfpc}{$H+}{$WRITEABLECONST ON}
17+
18+// Verwendung:
19+// Var
20+// ...
21+// Drucken: TDrucken;
22+// ...
23+// begin
24+// ...
25+// Drucken.setOrientierung('LandScape');
26+// ...
27+// end;
28+
29+interface
30+
31+uses
32+ Classes, Printers, Graphics, SysUtils;
33+
34+type { TDrucken }
35+ TDrucken = object
36+ private
37+ public
38+ procedure StringDrucken(const conText: string);
39+ procedure StringlisteDrucken(strList: TStrings);
40+ procedure setSchriftName(strSchrift: string);
41+ procedure setSchriftGroesse(intSchriftGroesse: integer);
42+ procedure setSchriftFarbe(intSchriftFarbe: integer);
43+ procedure setPapierformat(strPapierformatSet: string);
44+ procedure setOrientierung(strOrientierung: string);
45+ end;
46+
47+implementation
48+
49+type
50+ TSchrift = record
51+ Name: string;
52+ Size: word;
53+ Color: integer;
54+ end;
55+
56+const
57+ conSchrift: TSchrift = (
58+ Name: 'Arial';
59+ Size: 12;
60+ Color: clBlack);
61+
62+var
63+ strPapierformat: string = 'A4';
64+ enmOrientierung: TPrinterOrientation;
65+
66+procedure TDrucken.setSchriftName(strSchrift: string);
67+begin
68+ conSchrift.Name := strSchrift;
69+end;
70+
71+procedure TDrucken.setSchriftGroesse(intSchriftGroesse: integer);
72+begin
73+ if intSchriftGroesse > 7 then
74+ conSchrift.Size := intSchriftGroesse;
75+end;
76+
77+procedure TDrucken.setSchriftFarbe(intSchriftFarbe: integer);
78+begin
79+ if intSchriftFarbe > -1 then
80+ conSchrift.Color := intSchriftFarbe;
81+end;
82+
83+procedure TDrucken.setPapierformat(strPapierformatSet: string);
84+begin
85+ case LowerCase(strPapierformatSet) of
86+ 'a4':
87+ strPapierformat := strPapierformatSet;
88+ 'letter':
89+ strPapierformat := strPapierformatSet;
90+ 'legal':
91+ strPapierformat := strPapierformatSet;
92+ else
93+ strPapierformat := 'a4';
94+ end;
95+end;
96+
97+procedure TDrucken.setOrientierung(strOrientierung: string);
98+begin
99+ case LowerCase(strOrientierung) of
100+ 'portrait':
101+ Printer.Orientation := enmOrientierung.poPortrait;
102+ 'landscape':
103+ Printer.Orientation := enmOrientierung.poLandscape;
104+ else
105+ Printer.Orientation := enmOrientierung.poPortrait;
106+ end;
107+end;
108+
109+procedure TDrucken.StringDrucken(const conText: string);
110+// Ausdruck unter Ausnutzung des vollständigen druckbaren Bereichs
111+var
112+ strList: TStringList;
113+
114+begin
115+
116+ strList := TStringList.Create;
117+
118+ try
119+ strList.Add(conText);
120+ StringlisteDrucken(strList);
121+ finally
122+ strList.Free;
123+ end;
124+
125+end;
126+
127+procedure TDrucken.StringlisteDrucken(strList: TStrings);
128+// Kann z. B. mit:
129+// subStringlisteDrucken(Memo1.Lines);
130+// und
131+// subStringlisteDrucken(Listbox1.Items);
132+// verwendet werden.
133+// Ausdruck unter Ausnutzung des vollständigen druckbaren Bereichs
134+
135+var
136+ intZeilenhoehe: longint;
137+ PaperWorkRect: TRect;
138+ intZeilen: longint;
139+ intAktuelleZeile: longint;
140+ I: longint;
141+
142+ strListNeu: TStringList;
143+ intElement: longint;
144+ strBuffer: string;
145+ intBreite: longint;
146+ intMaxStringBreite: longint;
147+ intZeichenPosition: longint;
148+begin
149+
150+ with Printer.Canvas.Font do
151+ begin
152+ PixelsPerInch := 300;
153+ Name := conSchrift.Name;
154+ Size := conSchrift.Size;
155+ Color := conSchrift.Color;
156+ end;
157+
158+ with Printer do
159+ begin
160+
161+ PaperSize.PaperName := strPapierformat;
162+ PaperWorkRect := Printer.PaperSize.PaperRect.WorkRect;
163+
164+ // ************************************************
165+ // Erstellt eine neue Stringliste, deren Elemente an die Papierbreite
166+ // angepasst sind
167+
168+ intZeichenPosition := 0;
169+ strBuffer := '';
170+ intMaxStringBreite := PaperWorkRect.Right - PaperWorkRect.Left;
171+
172+ strListNeu := TStringList.Create;
173+ for intElement := 0 to (strList.Count - 1) do
174+ begin
175+ for I := 1 to Length(strList[intElement]) do
176+ begin
177+ strBuffer := strBuffer + strList[intElement][I];
178+ intBreite := Canvas.TextWidth(strBuffer);
179+ if intBreite > (intMaxStringBreite - 30) then
180+ begin
181+ strListNeu.Add(strBuffer);
182+ intZeichenPosition := I - 1;
183+ strBuffer := '';
184+ end;
185+ end;
186+ if length(strBuffer) > 0 then
187+ strListNeu.Add(strBuffer);
188+ end;
189+ // ************************************************
190+ // Berechnet wieviele Zeilen auf eine Seite passen
191+
192+ // Berechnet die Zeilenhöhe
193+ intZeilenhoehe := Round(1.2 * Abs(Canvas.TextHeight('I')));
194+ // Berechnet, wieviele Zeilen auf eine Seite passen
195+ intZeilen := PaperWorkRect.Bottom div intZeilenhoehe;
196+
197+ // ************************************************
198+ // Steuert den Ausdruck
199+ try
200+
201+ BeginDoc;
202+
203+ intAktuelleZeile := 0;
204+ for I := 0 to strListNeu.Count - 1 do
205+ begin
206+ // *** Steuert die Druckausgabe über mehrere Seiten ***
207+ if I > 0 then
208+ if (i mod intZeilen) = 0 then
209+ begin
210+ intAktuelleZeile := 0;
211+ NewPage;
212+ end
213+ else
214+ intAktuelleZeile := intAktuelleZeile + 1;
215+
216+ // Druckvorgang
217+ Canvas.TextOut(PaperWorkRect.Left,
218+ PaperWorkRect.Top + (intZeilenhoehe * intAktuelleZeile),
219+ strListNeu.Strings[I]);
220+ end;
221+ finally
222+ EndDoc;
223+ strListNeu.Free;
224+ end;
225+ end;
226+
227+end;
228+
229+end.
230+```
231+
232+---
233+*From the Free Pascal wiki, page "printing strings/de", as it stood on 2020-02-28 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history