AGB  ·  Datenschutz  ·  Impressum  







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

gedrehter Text verändert Font

Ein Thema von WS1976 · begonnen am 13. Jan 2009 · letzter Beitrag vom 13. Jan 2009
Antwort Antwort
WS1976
(Gast)

n/a Beiträge
 
#1

gedrehter Text verändert Font

  Alt 13. Jan 2009, 07:14
Hallo,

ich benutze den folgenden Code zum gedrehten ausgeben von Texten( stammt aus dem Delphi-Treff ):

Delphi-Quellcode:
procedure TextOutAngle(const Canvas: TCanvas; X, Y: Integer; const AText: string; AAngle: Integer);
var
  hCurFont: HFONT;
  LogFont: TLogFont;
begin
  with Canvas do
  begin
    hCurFont := Font.Handle;
    try
      GetObject(Font.Handle, SizeOf(LogFont), @LogFont);
      LogFont.lfEscapement := AAngle;
      LogFont.lfOrientation := AAngle;
      Font.Handle:= CreateFontIndirect(LogFont);
      try
        TextOut(X, Y, AText);
      finally
        DeleteObject(Font.Handle);
      end;
    finally
      Font.Handle := hCurFont;
    end;
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var n:integer;
begin
  TextOutAngle(PB1.Canvas,100,100,'hallo',900);
end;
Funktioniert alles problemlos, nur mit dem Schönheitsfehler, dass das Steuerelement das danach den Fokus hat seinen Font verändert.
Ich zeichne auf eine Tpaintbox.
Weiss jemand warum das so ist?

Grüsse
Rainer
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: gedrehter Text verändert Font

  Alt 13. Jan 2009, 08:00
Der Font an sich ändert sich doch nicht, nur sieht er gedreht 'ein wenig' anders aus. Ich finde das auch häßlich, aber imho ist das bei der relativ geringen Auflösung einfach nicht anders zu rendern. Vergrößere den Font mal auf 20-30 pt und schau Dir das Ergebnis an. Bei mir ändert sich dann Nichts mehr.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#3

Re: gedrehter Text verändert Font

  Alt 13. Jan 2009, 08:03
Hallo alzaimar,

ich habe nicht das Problem, dass sich der Font des angezeigten Textes ändert.
Es ändert sich der Font des Steuerelements das den Fokus hat.
Beispiel:
Ich habe die Textausgabe mit einem Tbutton ausgelöst.
Nach dem ausführen dieser Prozedur ändert sich der Font des caption von Tbutton.

Grüsse
Rainer
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: gedrehter Text verändert Font

  Alt 13. Jan 2009, 08:15
Ach ja, da war doch was...

Versuchs mal damit
Delphi-Quellcode:
Procedure DrawRotated (x,y,Rotation : Integer; Const aText : String);
var
   lf: LOGFONT; // Windows native font structure

begin
  GetObject (MyCanvas.Font.Handle, SizeOf (lf), @lf);
  lf.lfEscapement := 10 * Rotation;
  lf.lfOrientation := lf.lfEscapement;
  MyCanvas.Font.Handle := CreateFontIndirect(lf);
  MyCanvas.TextOut(x,y,aaText);
end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#5

Re: gedrehter Text verändert Font

  Alt 13. Jan 2009, 08:32
Hallo alzaimar,

danke für deine Antwort. Es funktioniert jetzt.
Aber ich bin neugierig. Warum klappt das jetzt?
Hast du eine Ahnung?

Grüsse
Rainer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: gedrehter Text verändert Font

  Alt 13. Jan 2009, 12:18
in D2009 geht es auch so (ich weiß nur nicht ab wann .Orientation in TFont drin ist ... D7 kennt es noch nicht)

Delphi-Quellcode:
Procedure TextOutAngle(const Canvas: TCanvas; X, Y: Integer;
  const AText: string; AAngle: Integer);

var
  OldOrientation: Integer;

begin
  OldOrientation := Canvas.Font.Orientation;
  Canvas.Font.Orientation := AAngle;
  Canvas.TextOut(x, y, AText);
  Canvas.Font.Orientation := OldOrientation;
end;


// oder


Procedure TextOutAngle(const Canvas: TCanvas; X, Y: Integer;
  const AText: string; AAngle: Integer);

var
  OldFont: TFont;

begin
  OldFont := TFont.Create;
  Try
    OldFont.Assign(Canvas.Font);
    Canvas.Font.Orientation := AAngle;
    // hier ließe sich dann noch mehr ändern und es würde auch wieder zurückgesetzt
    Canvas.TextOut(x, y, AText);
  Finally
    Canvas.Font.Assign(OldFont);
    OldFont.Free;
  End;
end;

Warum der Fehler bei dir auftritt, weiß ich nicht, aber eventuell gibt eine Zuweisung auf Font.Handle das alte Handle frei
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

Re: gedrehter Text verändert Font

  Alt 13. Jan 2009, 13:03
Das geht übrigens auch sehr elegant so:

Delphi-Quellcode:
Procedure TextOutAngle(const Canvas: TCanvas; X, Y: Integer;
    const AText: string; AAngle: Integer);
var
  Recall: TRecall;
begin
  Recall := TFontRecall.Create(Canvas.Font);
  Try
    Canvas.Font.Orientation := AAngle;
    // hier ließe sich dann noch mehr ändern und es würde auch wieder zurückgesetzt
    Canvas.TextOut(x, y, AText);
  Finally
    Recall.Free;
  End;
end;
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: gedrehter Text verändert Font

  Alt 13. Jan 2009, 13:17
ach dafür war TFontRecall ... hatte mich vorhin schon etwas gefragt, als ich es zufällig in den Sourcen (nach TFont) sah ... nja, aber vielleicht hätt ich och mal sin de OH nachsehn können)
$2B or not $2B
  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 20:07 Uhr.
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