Autor Beitrag
CarstenP
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 16.08.05 12:06 
Hallo!

Ich habe vor ca. 7 Jahre in Borland Pascal programmiert und wollte jetzt wieder mal ein Programm in Delphi schreiben.
Heißt: Ich bin Anfänger!!

Ich stehe jetzt vor dem Problem, dass ich einen Text zentriert auf der Seite mit Printer.Canvas.TextOut drucken wollte. Aber irgendwie komme ich da nicht weiter.

Auszüge aus meinem bis jetzt erschaffenen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);  //in mm arbeiten
DPI := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX); //DPI ermitteln
...
TitelX := Printer.Canvas.TextWidth('Überschrift'); // Weite für den zu druckenen Text ermitteln
TitelX := (TitelX div (Round(DPI))) * 25// Weite in mm umwandeln
Printer.Canvas.TextOut(((297 div 2) - (TitelX div 2)), -15'Überschrift'); // Sitenbreite durch 2 - Text mm durch 2 = x Koordinate


Irgendwo muss ich derbe einen (oder mehrere) Denkfehler drin haben!

Ich hoffe ihr könnt mir helfen!

Gruß und Danke
Carsten
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 16.08.05 12:20 
Moin!

Bist du sicher, dass "-15" als Y-Koordinate korrekt ist?

cu
Narses
CarstenP Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 16.08.05 13:03 
Titel: re
Hallo Nares!

Erst mal Danke für deine Antwort!
Aber wenn ich es richtig sehe, ist y der Bereich von "oben". Der Wert muss negativ sein - soweit ich mich nicht vertue.
Es kommt mir aber mehr auf die x-Koordinate an.
Denn der Text soll mittig auf dem Blatt positioniert werden.

Und dafür brauch ich ja eigentlich die Breite des Blattes (BB) und die Breites des Textes (BT). Beide in der selben Maßeinheit. Woraus sich doch dann folgende Gleichung ergibt:

(BB / 2) - (BT / 2) = y --> Anfang des Textes!

Klappt aber alles irgendwie nicht!
Ich bin am verzweifeln!!!

Gruß Carsten
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 16.08.05 13:31 
Moin!

user profile iconCarstenP hat folgendes geschrieben:
Aber wenn ich es richtig sehe, ist y der Bereich von "oben". Der Wert muss negativ sein - soweit ich mich nicht vertue.

Mag sein, war nur beim Hinsehen ungewöhnlich... :wink:

user profile iconCarstenP hat folgendes geschrieben:
Es kommt mir aber mehr auf die x-Koordinate an.
Und dafür brauch ich ja eigentlich die Breite des Blattes (BB) und die Breites des Textes (BT). Beide in der selben Maßeinheit. Woraus sich doch dann folgende Gleichung ergibt:

(BB / 2) - (BT / 2) = x --> Anfang des Textes!

Die Gleichung würde ich auch als korrekt ansehen.

Kann dann ja nur noch am Skalieren liegen. Lass dir doch mal z.B. mit ShowMessage(IntToStr(DPI));ausgeben, was da als dpi-Angabe rauskommt. Ansonsten wäre es doch auch noch mal ein Versuch, statt in MM in Pixeln zu rechnen; warum nicht, kann ja - zumindest zum Testen - nicht schaden.

cu
Narses
CarstenP Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 16.08.05 13:51 
Titel: Endlich Geschafft!
Hallo Nares!

Nochmal Danke für deine Antoworten!

Folgender Code hat geklappt

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);
Breite := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
 GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
with Printer.Canvas do
begin
   TitelX := Printer.Canvas.TextWidth('Überschrift');
   TextOut(((Round(Breite) * 10 div 2) - (TitelX div 2)), -15'Überschrift');
end


Gruß Carsten