Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Canvas.TextOut zentrieren (https://www.delphipraxis.net/165093-canvas-textout-zentrieren.html)

DeddyH 15. Dez 2011 08:48

AW: Canvas.TextOut zentrieren
 
Also bei mir sieht das hier ganz ordentlich aus:
Delphi-Quellcode:
procedure TFormTest.FormPaint(Sender: TObject);
const
  DRAWFLAGS = DT_SINGLELINE or DT_CENTER or DT_VCENTER;
  YOffset = 35;
var
  s: string;
  R: TRect;
  OldFont: TFont;

  procedure DrawRect;
  begin
    R.Top := R.Top + YOffset;
    R.Bottom := R.Bottom + YOffset;
    DrawText(Canvas.Handle, PChar(s), -1, R, DRAWFLAGS);
  end;

begin
  OldFont := TFont.Create;
  try
    //alten Font sichern
    OldFont.Assign(Canvas.Font);
    R := Rect(0, 0, ClientWidth, YOffset);
    s := 'Erste Zeile';
    DrawRect;
    Canvas.Font.Size := 14;
    Canvas.Font.Style := [fsBold];
    s := 'Zweite Zeile';
    DrawRect;
    Canvas.Font.Size := 12;
    Canvas.Font.Style := [fsBold, fsItalic];
    s := 'Dritte Zeile';
    DrawRect;
    Canvas.Font.Size := 20;
    Canvas.Font.Name := 'Times New Roman';
    Canvas.Font.Style := [fsItalic];
    s := 'Vierte Zeile';
    DrawRect;
    //Gesicherten Font wiederherstellen
    Canvas.Font.Assign(OldFont);
  finally
    OldFont.Free;
  end;
end;

Nicodius 15. Dez 2011 09:10

AW: Canvas.TextOut zentrieren
 
Danke DeddyH! Das hat prima funktioniert.

Würde mich trotzdem itneressieren warum das TextWidth mit dem fsbold nicht umgehen kann.

lg Nico

DeddyH 15. Dez 2011 09:13

AW: Canvas.TextOut zentrieren
 
Das kann ich aus dem Hut leider auch nicht sagen. Evtl. bringt ein Blick in die Delphi-Sourcen Licht ins Dunkel.

Bummi 15. Dez 2011 09:23

AW: Canvas.TextOut zentrieren
 
kann es sein dass Du TextWidth nicht neu berechnen lässt nach der Umstellung auf Bold ?

FrankJ28 15. Dez 2011 09:30

AW: Canvas.TextOut zentrieren
 
Vielleicht ein Reihenfolgeproblem,
erst Bold, dann TextWidth setzen?
Ciao
Frank

EDIT: Thomas war schneller

DeddyH 15. Dez 2011 09:34

AW: Canvas.TextOut zentrieren
 
Wenn er ASMs Code 1:1 übernommen hat, kann es daran ja eigentlich nicht liegen, da dort der Font erzeugt, übergeben und anschließend ausgewertet wird.

Nicodius 15. Dez 2011 10:46

AW: Canvas.TextOut zentrieren
 
Nein wurde zuerst bold gesetzt und dann berechnet. Wirklich seltsam.

mz23 22. Mär 2012 17:55

AW: Canvas.TextOut zentrieren
 
Zitat:

Zitat von Nicodius (Beitrag 1141545)
Nein wurde zuerst bold gesetzt und dann berechnet. Wirklich seltsam.

Vielleicht hat der Canvas nicht mehr dieselbe Breite nach dem Style
setzen?!

Nur Vermutung:
Image1.Picture.Graphic.Width := Image1.Width;
Image1.Picture.Graphic.Height := Image1.Height;
neu setzen.

Schöne Grüße aus Nürnberg,
Manfred

DeddyH 22. Mär 2012 18:08

AW: Canvas.TextOut zentrieren
 
Wieso Image? Er hat doch direkt auf das Formular gezeichnet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz