AGB  ·  Datenschutz  ·  Impressum  







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

Gedrehter Text nicht sichtbar?

Offene Frage von "Phoenix"
Ein Thema von Phoenix · begonnen am 4. Jul 2007 · letzter Beitrag vom 4. Jul 2007
Antwort Antwort
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#1

Gedrehter Text nicht sichtbar?

  Alt 4. Jul 2007, 08:53
Hi *.*

Ich habe aus diesem Tipp und diesem Thread hier ein Control gebaut, welches drehbaren Text enthalten soll.

Daraus ergab sich folgender Code in meiner Paint-Routine:

Delphi-Quellcode:
procedure TASCustomVisuPanel.Paint;
const
  Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
  Rect: TRect;
  FontHeight: Integer;
  Flags: Longint;
  LogFont: TLogFont; // drehbarer Text
  TempFont: TFont;
begin
  Rect := GetClientRect;

  // Hintergrund zeichnen:
  if not Assigned(FBackgroundBitmap)
    and not ThemeServices.ThemesEnabled
    or not ParentBackground then
  begin
    Canvas.Brush.Color := Color;
    Canvas.FillRect(Rect);
  end;

  // Hintergrundbild einzeichnen:
  if Assigned(FBackgroundBitmap) then
  begin
    BitBlt(Canvas.Handle, Rect.Left, Rect.Top, Self.ClientWidth,
      Self.ClientHeight, FBackgroundBitmap.Canvas.Handle, 0, 0, SRCCOPY);
  end;

  // Rahmen zeichnen
  if BevelOuter <> bvNone then
  begin
    Frame3D(Canvas, Rect, FColorBorder, FColorBorder, BevelWidth);
  end;

  Frame3D(Canvas, Rect, Color, Color, BorderWidth);

  if BevelInner <> bvNone then
  begin
    Frame3D(Canvas, Rect, FColorBorder, FColorBorder, BevelWidth);
  end;

  Canvas.Brush.Style := bsClear;
  Canvas.Font := Self.Font;
  FontHeight := Canvas.TextHeight('W');

  // Text ggf. drehen:
  if not (FTextAngle = 0) then
  begin
    TempFont := TFont.Create;
    try
      TempFont.Assign(Canvas.Font);

      GetObject(TempFont.Handle, SizeOf(LogFont), @LogFont);
      LogFont.lfEscapement := 10 * FTextAngle;
      LogFont.lfOrientation := 10 * FTextAngle;
      TempFont.Handle := CreateFontIndirect(LogFont);

      Canvas.Font.Assign(TempFont);
    finally
      FreeAndNil(TempFont);
    end;
  end;

  with Rect do
  begin
    Top := ((Bottom + Top) - FontHeight) div 2;
    Bottom := Top + FontHeight;
  end;

  Flags := DT_EXPANDTABS or DT_VCENTER or Alignments[FAlignment];
  Flags := DrawTextBiDiModeFlags(Flags);
  DrawText(Canvas.Handle, PChar(Caption), -1, Rect, Flags);
end;
Das funktioniert nur leider nicht.

Nehme ich als Font z.B. Courier - also einen Font der nicht TrueType ist, wird dieser ganz normal horizontal gezeichnet. - Schliesslich soll das ja auch lt. Jens gar nicht funktionieren.

Benutze ich nun aber einen TrueType-Font, so sehe ich gar keinen Text.

Was geht da schief?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Gedrehter Text nicht sichtbar?

  Alt 4. Jul 2007, 08:57
Probiere statt DrawText mal TextOut - ich habe irgendetwas im Kopf, dass DrawText nicht mit gedrehtem Text umgehen kann...
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Gedrehter Text nicht sichtbar?

  Alt 4. Jul 2007, 09:43
Zitat von Flocke:
Probiere statt DrawText mal TextOut - ich habe irgendetwas im Kopf, dass DrawText nicht mit gedrehtem Text umgehen kann...
Richtig, da DrawText in dem angegebenen Rechteck immer ab 0,0 zeichnet und bei z.B. 180° wird der Text "rückwärts" von 0,0 gezeichnet und daher nicht mehr sichtbar.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#4

Re: Gedrehter Text nicht sichtbar?

  Alt 4. Jul 2007, 11:14
Hrm. Also wenn ich DT_NOCLIP angebe zeichnet DrawText richtig.

Aber die Position stimmt nicht mehr so ganz, weil er bei der Berücksichtigung der Breite und der Höhe wohl die Rotation nicht berücksichtigt. Das tut TextOut allerdings auch nicht. Hilft mir also genau überhaupt nicht weiter.

Das heisst letzlich, dass ich die Startposition des Textes in jedem Fall selber berechnen muss.

Gibts da schon Formeln für? Ich Geometrie bin ich ne absolute Niete
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Gedrehter Text nicht sichtbar?

  Alt 4. Jul 2007, 13:05
Hi,

schau dir doch mal das an: Gedrehten Text ausgeben
Habe ich selber schon einmal verwendet und es hat hervorragend funktioniert
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#6

Re: Gedrehter Text nicht sichtbar?

  Alt 4. Jul 2007, 13:57


Les mal meine letzte Anmerkung: Wie berechnest Du die korrekte Position von x und y?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Gedrehter Text nicht sichtbar?

  Alt 4. Jul 2007, 14:41
Sinus/Cosinus zusammen mit dem Winkel?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Gedrehter Text nicht sichtbar?

  Alt 4. Jul 2007, 15:20
Zitat von Phoenix:


Les mal meine letzte Anmerkung: Wie berechnest Du die korrekte Position von x und y?
Sorry, ich dachte es ginge darum, dass der text nicht an die Stelle von x und y gezeichnet wird.
  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 23:34 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