![]() |
rotiertes Label zentrieren
Hallo allerseits,
ich habe ein TOvcRotatedLabel, welches einen Schriftzug vertikal darstellt (um 90° nach links gedreht). Nun fehlt mir jedoch die Möglichkeit, den Text vertikal zu zentrieren. Momentan beginnt der Text immer ganz unten im Label, was aber eher unschön ist. Wie kann ich das bewerkstelligen? Mir reicht auch ein Beispiel für jede andere Art von Label, ich brauche erstmal nur den Ansatz. |
Re: rotiertes Label zentrieren
Wenn es keine fertige Funktion gibt, könntest du versuchen die Pixelbreite deines Wortes zu berechnen und dann passend Leerzeichen einfügen. Praktisch wäre dabei ein Schrift, in der alle Zeichen gleich groß sind, dann würde es etwas schneller gehen, aber ich glaube es gibt schon eine Funktion, die die Pixelbreite (höhe?) eines Strings in einer gegebenen Schrift zurückgibt.
:twisted: <- hat nichts mit dem Post zu tun, aber das Teil find ich einfach stark -> :evil: |
Re: rotiertes Label zentrieren
Eine vorgefertigte Einstellung hat das Teil nicht, mein aktueller ansatz ist genau der, den du vorgeschlagen hast. Der Fonttype ist "Arial 10", ich hänge aber nun auch genau bei dem Problem , wie ich die Höhe in Pixeln berechne. Der Rest ist dann wieder einfach, da ich Das Offset (Orign_x und Orign_y) der Schrift angeben kann und die Höhe des Labels fest ist.
Folgendes Beispiel habe ich in einem anderen Forum gefunden, damit kann ich baer nicht viel anfangen, denn woher bekomme ich mein Canvas?
Delphi-Quellcode:
procedure CharWH(Canvas: TCanvas; Chr: Char; var Width, Height: Integer);
begin Width := Canvas.TextWidth(Chr); Height := Canvas.TextHeight(Chr); end; Beispiel: Die Länge und Höhe des Zeichens "W" ermitteln:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Buchstabe: Char; W, H: Integer; begin Buchstabe := 'W'; CharWH(Canvas, Buchstabe, W, H); ShowMessage(Format('Buchstabe: "%s"' + ^j^j + 'Breite: %d Pixel'+ ^j + 'Höhe: %d Pixel', [Buchstabe, W, H])); end; |
Re: rotiertes Label zentrieren
Wo hast Du denn die Komponente her?
Also ich würde den Author der Komponente erst mal "belästigen". Er kann Dir vermutlich am Besten weiterhelfen... |
Re: rotiertes Label zentrieren
Ein Canvas ist auch nur ein Datentyp. Ich hab schon lang nicht mehr mit Delphi programmiert, aber so in etwa
Delphi-Quellcode:
var
mycanvas = TCanvas.create; (ganz grob) w: integer; h: integer; begin CharWh(mycanvas,"f", w,h); mycanvas.free; (?) end; |
Re: rotiertes Label zentrieren
Zitat:
Er meinte da, dass er auf dem Canvas nicht zeichnen kann (warum auch immer er das will). Ich habe jetzt einfach ein Bild in die Ecke gelegt, es unsichtbar gemacht und übergebe dessen Canvas. Dann funktioniert es. |
Re: rotiertes Label zentrieren
Hallo,
zeig doch mal die Paint-Methode des Labels. Ich bin mir ziemlich sicher, dass da irgendwo ein Canvas rumfliegt. Und wenn Du da die Textlänge hast, ist das Zentrieren auch ganz leicht: Y := (LabelHöhe - TextLänge) div 2; Also nichts mit Leerzeichen :shock: . Gruß xaromz |
Re: rotiertes Label zentrieren
Zitat:
|
Re: rotiertes Label zentrieren
Hallo,
Zitat:
Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 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 by Thomas Breitkreuz