AGB  ·  Datenschutz  ·  Impressum  







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

rotiertes Label zentrieren

Ein Thema von Trille · begonnen am 21. Dez 2007 · letzter Beitrag vom 21. Dez 2007
Antwort Antwort
Trille

Registriert seit: 25. Sep 2007
62 Beiträge
 
#1

rotiertes Label zentrieren

  Alt 21. Dez 2007, 09:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: rotiertes Label zentrieren

  Alt 21. Dez 2007, 09:18
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.

<- hat nichts mit dem Post zu tun, aber das Teil find ich einfach stark ->
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Trille

Registriert seit: 25. Sep 2007
62 Beiträge
 
#3

Re: rotiertes Label zentrieren

  Alt 21. Dez 2007, 09:23
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;
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: rotiertes Label zentrieren

  Alt 21. Dez 2007, 09:36
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...
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: rotiertes Label zentrieren

  Alt 21. Dez 2007, 09:36
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;
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Trille

Registriert seit: 25. Sep 2007
62 Beiträge
 
#6

Re: rotiertes Label zentrieren

  Alt 21. Dez 2007, 09:46
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.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: rotiertes Label zentrieren

  Alt 21. Dez 2007, 09:56
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 .

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Trille

Registriert seit: 25. Sep 2007
62 Beiträge
 
#8

Re: rotiertes Label zentrieren

  Alt 21. Dez 2007, 10:00
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 .

Gruß
xaromz
Haben Labels eine Paint-Methode?
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: rotiertes Label zentrieren

  Alt 21. Dez 2007, 10:11
Hallo,
Zitat von Trille:
Haben Labels eine Paint-Methode?
wie sollen sie sich sonst zeichnen?

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  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 22:10 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