Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Caption vertikal zentrieren (https://www.delphipraxis.net/127554-caption-vertikal-zentrieren.html)

MarvinM 15. Jan 2009 11:32


Caption vertikal zentrieren
 
Hallo zusammen,

ich stelle mir z.Zt. die Frage, wie es möglich ist, in einem TBitBtn die Caption vertikal zu zentrieren. In dem Fall bei einer TButtonList.

Ich bin mir sicher, dass die Antwort trivial ist, aber die Forensuche konnte mir nicht helfen ;-)

Danke!

QuickAndDirty 15. Jan 2009 11:46

Re: Caption vertikal zentrieren
 
Paint überschreiben

mimi 15. Jan 2009 16:49

Re: Caption vertikal zentrieren
 
Schau dir mal dazu die Methode: TextRect an. Die bietet einige nette Möglichkeiten dazu.
Am besten eine neue Klasse erstellen, die diese Funktion aufweist.

MarvinM 18. Jan 2009 15:14

Re: Caption vertikal zentrieren
 
Ok, also das muss in das Ereignis OnDrawButton rein, soviel ist klar.
Dann muss ich wahrscheinlich sehen, wie viele Zeilenumbrüche die Caption enthält und dementsprechend um n * Höhe_Zeile / 2 die Caption nach oben verschieben. Nur wie mache ich das? Ich werde aus den hier im Forum genannten Beispielen nicht schlau...

Danke für Eure Hilfe!

himitsu 18. Jan 2009 15:24

Re: Caption vertikal zentrieren
 
Canvas.TextLength, Canvas.TextHeight und Canvas.TextExtent rechnen inclusive Zeilenumbruch (TextHeight ist also die höhe aller Zeilen zusammen)

MarvinM 18. Jan 2009 15:46

Re: Caption vertikal zentrieren
 
Ich glaube mir steht wer auf der Leitung...

Ich habe jetzt mal mit Canvas.TextHeight rumprobiert und als Parameter mal ein, zwei und dreizeilige Strings eingefügt, aber immer kommt 13 als Höhe heraus, was nicht wirklich logisch ist :-(

himitsu 18. Jan 2009 15:49

Re: Caption vertikal zentrieren
 
:shock: ich glaub jetzt steh ich auf'm Schlauch ... dachte eigentlich das wäre Zeilenabängig :gruebel:

MarvinM 18. Jan 2009 15:53

Re: Caption vertikal zentrieren
 
Ich hab den folgenden "Test-Code" gebastelt:
Delphi-Quellcode:
Button6.Caption := IntToStr(Canvas.TextHeight('hallo' + slinebreak + 'hallo'));
Und egal wie viele sLineBreaks da drin sind, es kommt immer 13 raus.

PS: 42 wäre auch interessant ;-)

himitsu 18. Jan 2009 16:01

Re: Caption vertikal zentrieren
 
auch grad getestet :shock: ... muß ich ja eines meiner Programme mal schnell durchsehn/überarbeiten.

noch ungetestet!
Delphi-Quellcode:
Function TextExtentEx(Canvas: TCanvas; S: String): TSize;
  Var S2: String;
    i, i2: Integer;
    ts: TSize;

  Begin
    Result.cx := 0;
    Result.cy := 0;
    While S <> '' do Begin
      i := Pos(#13, S);
      i2 := Pos(#10, S);
      If (i > 0) and (i2 > 0) and (i2 < i) Then i := i2;
      If i = 0 Then i := Length(S) + 1;
      S2 := Copy(S, 1, i - 1);
      If Copy(S, i, 2) = #13#10 Then Delete(S, 1, i + 1)
      Else Delete(S, 1, i);
      If S2 <> '' Then Begin
        ts := Canvas.TextExtent(S2);
        Result.cx := Max(ts.cx, Result.cx);
        Inc(Result.cy, ts.cy);
      End Else Begin
        ts := Canvas.TextExtent('X');
        Inc(Result.cy, ts.cy);
      End;
    End;
  End;

Function TextWidthEx(Canvas: TCanvas; Const S: String): Integer;
  Begin
    Result := TextExtentEx(Canvas, S).cx;
  End;

Function TextHeightEx(Canvas: TCanvas; Const S: String): Integer;
  Begin
    Result := TextExtentEx(Canvas, S).cy;
  End;

MarvinM 18. Jan 2009 16:13

Re: Caption vertikal zentrieren
 
Danke für Deine Mühe!

Aber mir erschließt sich noch nicht ganz wie ich diese Funktionen aufrufen muss, stellen die einen Ersatz zu den Standard-Funktionen dar?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.
Seite 1 von 2  1 2      

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