Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Nicodius 14. Dez 2011 17:45

Canvas.TextOut zentrieren
 
Hallo Leute,

ich würde gerne eine Ausgabe per TextOut auf dem Form zentrieren.
Delphi-Quellcode:
x := Form1.Width div 2 - (Canvas.TextWidth(text) div 2);
kommt bei der Schriftgröße schon einigermaßen hin, aber bei manchen texten hängt es.
Habt ihr da vl eine schöne Lösung oder irgendwelche Parameter die ich hier gebrauchen könnte?

lg Nico

Nicodius 14. Dez 2011 17:52

AW: Canvas.TextOut zentrieren
 
sorry alter code
Delphi-Quellcode:
x := round((Form1.Width - Canvas.TextWidth(text)) / 2);
ist der aktuelle. Leider genau das gleiche problem.
canvas.TextOut(round((form1.ClientWidth - canvas.TextWidth('ZENTRIERT')) / 2),200,'ZENTRIERT');
von http://www.delphipraxis.net/2634-tex...usrichten.html
bringt leider nicht das gewünschte ergebnis

EDIT: Das Problem scheint nur bei bold texten zu bestehen. da geht anscheinend die textwidth nicht richtig drauf?

DeddyH 14. Dez 2011 17:53

AW: Canvas.TextOut zentrieren
 
IMHO geht das mit MSDN-Library durchsuchenDrawText wesentlich einfacher.

Bummi 14. Dez 2011 18:07

AW: Canvas.TextOut zentrieren
 
Delphi-Quellcode:
var
 r:TRect;
 s:String;
begin
  r.Left := 0;
  r.Top := 0;
  r.Right := 300;
  r.Bottom := 100;
  s := 'Testtest';
  Canvas.TextRect(r,s,[tfVerticalCenter,tfCenter,tfSingleLine]);
end;

Nicodius 14. Dez 2011 18:36

AW: Canvas.TextOut zentrieren
 
Hi! Vielen Dank für eure Antworten,

beide Möglichkeiten scheinen aber Formatierungen wie bold/underline nicht zuzulassen oder?

lg Nico

stahli 14. Dez 2011 18:43

AW: Canvas.TextOut zentrieren
 
Du musst vorher Canvas.Font.Style einstellen.

Nicodius 14. Dez 2011 18:46

AW: Canvas.TextOut zentrieren
 
Ah schon müde :)
Danke für die Antwort, gerade selber gesehen dass das eh ganz normal über die Canvas lauft.

Vielen Dank erstmal an alle!

lg und einen schönen Abend


Nico

Nicodius 14. Dez 2011 18:56

AW: Canvas.TextOut zentrieren
 
@Bummi, das ist leider mit Delphi 7 nicht möglich, da ist die Graphics wohl aufgewertet worden.

ASM 14. Dez 2011 22:41

AW: Canvas.TextOut zentrieren
 
Zitat:

Zitat von Nicodius (Beitrag 1141416)
das ist leider mit Delphi 7 nicht möglich, da ist die Graphics wohl aufgewertet worden.

Ja leider. Die Möglichkeit zur Übergabe der Formatierung ist erst in den neueren Delphiversionen durch Overload-Prozeduren vorhanden.

Man kann sich das aber für Delphi 7 leicht selber zusammenbauen:
Code:
procedure TextOutEx(canvas: TCanvas; r: TRect; s: string; Font: TFont = nil);
var
  x, y: integer;
  StringWidthInPixel, StringHeightInPixel: integer;
begin
  if Font <> nil then Canvas.Font := Font;
  StringWidthInPixel := Canvas.Textwidth(s);
  StringHeightInPixel := Canvas.Textheight(s);
  with r do
  begin
    x := (right - left - StringWidthInPixel) div 2;
    y := (bottom - top - StringHeightInPixel) div 2;
  end;
  Canvas.TextOut(x, y, s);
end;
In der Anwendung:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  r: TRect;
  Font: TFont;
begin
  // hier ist der Canvas der eines TImage
  r:=Image1.ClientRect;
  // falls benötigt:
  Font := TFont.Create;
  try
    with Font do
    begin
      color := clRed;
      Style := [fsbold, fsItalic];
      size := 14;
    end;
    // oder Font als Parameter weglassen, falls nichts Spezielles gewünscht
    TextOutEx(Image1.canvas, r, 'Test-Test', Font);
  finally
    Font.Free;
  end;
end;

Nicodius 15. Dez 2011 08:30

AW: Canvas.TextOut zentrieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Erstens: Vielen Dank für eure Bemühungen.

Hab es jetzt auch mit deiner Methode probiert asm aber leider kommt folgendes heraus(Anhang)

Der Bold Text wird verschoben, da kommt anscheinend das Textwidth nicht zusammen, kann das sein?

lg Nico


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

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