Delphi-PRAXiS
Seite 2 von 2     12   

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)

himitsu 18. Jan 2009 16:29

Re: Caption vertikal zentrieren
 
du übergibst einfach nur das Canvas, worauf zu den Text zeichnen willst (der Font und sonstiges würde dann aus diesem Canvas ausgelesen) und natürlich noch den zu messenden Text.
Delphi-Quellcode:
// dieses
i := TBitBtn(Sender).Canvas.TextHeight('derText')

// würde dann so aussehn
i := TextHeightEx(TBitBtn(Sender).Canvas, 'derText');

Hawkeye219 18. Jan 2009 16:35

Re: Caption vertikal zentrieren
 
Hallo,

mit der API-Funktion MSDN-Library durchsuchenDrawTextEx kann man auch messen:

Delphi-Quellcode:
var
  s : string;
  R : TRect;
begin
  s := 'Dies ist ein Text,'#10'der sich über drei Zeilen erstreckt.'#10'Dies ist die letzte Zeile.';

  ZeroMemory(@R, SizeOf(R));
  DrawTextEx(Canvas.Handle, PChar(s), Length(s), R, DT_CALCRECT, nil);

  ShowMessage (Format('cx=%d, cy=%d', [R.Right, R.Bottom]));
end;
Gruß Hawkeye

MarvinM 18. Jan 2009 16:44

Re: Caption vertikal zentrieren
 
Das müsste dann ja so im OnDrawButton-Event aussehen:
Delphi-Quellcode:
TextHeightEx(TBitBtn(Sender).Canvas, TBitBtn(Sender).Caption);
Bei TBitBtn(Sender).Canvas hat der Compiler ein Problem "undefinierter Bezeichner".

Was mir leider immernoch nicht klar ist, ist was ich mit dem Rückgabewert (TSize) der Funktion zu tun habe :gruebel:

himitsu 18. Jan 2009 16:53

Re: Caption vertikal zentrieren
 
Dafür müßter es es doch erstmal zeichen, um die größe zu bekommen, aber er möchte ja erst messsen, um an der richtigen Stelle zu zeichnen.

für TBitBtn(Sender).Canvas mußt du natürlich das Canvas angeben, worauf du zeichnest (wußte ja nicht wie deine Zeichenroutine bisher aussieht)

MarvinM 18. Jan 2009 17:02

Re: Caption vertikal zentrieren
 
Ich sollte vielleicht erwähnen, dass meine Canvas-Kenntnisse nicht der Brüller sind :oops:

Ich denke mal, dass ich die Rückgabewerte deiner beiden Funktionen in ButtonGroup1.Canvas.TextOut als Parameter packen muss, richtig?

Das geht mit einer Zeile auch wunderbar, bei zwei ignoriert er dann einfach den Umbruch.

himitsu 18. Jan 2009 17:26

Re: Caption vertikal zentrieren
 
Delphi-Quellcode:
var ts: TSize;
  S: String;

S := 'derText';

ts := DrawTextEx(ButtonGroup1.Canvas, S);
ButtonGroup1.Canvas.TextOut(X - ts.cx div 2, Y - ts.cy div 2, S);
hierbei wären X und Y die Position, an welcher der Text zentriert gezeichnet werden soll

MarvinM 18. Jan 2009 17:43

Re: Caption vertikal zentrieren
 
Jetzt ignoriert er leider jedlichen Zeilenumbruch.

Wie kann ich denn in der Methode sagen, dass er das Bild an die ursprüngliche Stelle und den Text in der Mitte 5 oder 10 Pixel daneben zentriert. Ich hatte es mit x := ButtonGroup1.Images.Width + 15; probiert, das hat allerdings nicht funktioniert. Y hab ich unter Kontrolle!

Ich hätte nie gedacht, dass das so kompliziert ist...

MarvinM 18. Jan 2009 19:31

Re: Caption vertikal zentrieren
 
Vielen, vielen Dank für Eure Hilfe, aber das wird mir ein wenig zu komplex. Ich werde die Anzahl der Buttons reduzieren, sodass ich die einzelne Spalte breiter machen kann.

Danke nocheinmal!


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

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