Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi rotiertes Label zentrieren (https://www.delphipraxis.net/105406-rotiertes-label-zentrieren.html)

Trille 21. Dez 2007 09:05


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.

Nikolas 21. Dez 2007 09:18

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:

Trille 21. Dez 2007 09:23

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;

RavenIV 21. Dez 2007 09:36

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...

Nikolas 21. Dez 2007 09:36

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;

Trille 21. Dez 2007 09:46

Re: rotiertes Label zentrieren
 
Zitat:

Zitat von Nikolas
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;

Ganz so einfach war es nicht, das hatte ich schon probiert.
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.

xaromz 21. Dez 2007 09:56

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

Trille 21. Dez 2007 10:00

Re: rotiertes Label zentrieren
 
Zitat:

Zitat von xaromz
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

Haben Labels eine Paint-Methode?

xaromz 21. Dez 2007 10:11

Re: rotiertes Label zentrieren
 
Hallo,
Zitat:

Zitat von Trille
Haben Labels eine Paint-Methode?

wie sollen sie sich sonst zeichnen?

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