AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas.TextOut zentrieren

Ein Thema von Nicodius · begonnen am 14. Dez 2011 · letzter Beitrag vom 22. Mär 2012
Antwort Antwort
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#1

AW: Canvas.TextOut zentrieren

  Alt 14. Dez 2011, 18:36
Hi! Vielen Dank für eure Antworten,

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

lg Nico
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Canvas.TextOut zentrieren

  Alt 14. Dez 2011, 18:43
Du musst vorher Canvas.Font.Style einstellen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#3

AW: Canvas.TextOut zentrieren

  Alt 14. Dez 2011, 18:46
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
Nico Müller
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#4

AW: Canvas.TextOut zentrieren

  Alt 14. Dez 2011, 18:56
@Bummi, das ist leider mit Delphi 7 nicht möglich, da ist die Graphics wohl aufgewertet worden.
Nico Müller
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Canvas.TextOut zentrieren

  Alt 14. Dez 2011, 22:41
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;
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#6

AW: Canvas.TextOut zentrieren

  Alt 15. Dez 2011, 08:30
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
Angehängte Grafiken
Dateityp: jpg error.jpg (43,3 KB, 67x aufgerufen)
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#7

AW: Canvas.TextOut zentrieren

  Alt 15. Dez 2011, 08:48
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:06 Uhr.
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