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 [Statusbar] Breite eines Panels (https://www.delphipraxis.net/110602-%5Bstatusbar%5D-breite-eines-panels.html)

xZise 20. Mär 2008 16:40


[Statusbar] Breite eines Panels
 
Hallo DP,
ich habe ein Problem mit meiner Statusbar. Da ich die Breite des Textes nicht kenne, muss ich diese erst ermitteln.
Mir stellt sich jetzt die Frage, wie man das aber macht?
Zuerst dachte ich, nehme die TextWidth Eigenschaft. Und netterweise hat die Statusbar ein Canvas. Aber damit sind alle Panel etwas zu klein.
Also habe ich hier gesucht, und bin darauf gestoßen:
Breite der Panels in der StatusBar
Aber weder mit noch ohne eingeschalteter Eigenschaft ist es zu klein!

MfG
xZise

toms 20. Mär 2008 16:45

Re: [Statusbar] Breite eines Panelss
 
Hallo,

Mache diese Font Zuweisung vor dem Aufrufen des TextWidth(...)
Delphi-Quellcode:
StatusBar.Canvas.Font := StatusBar.Font;

xZise 20. Mär 2008 16:48

Re: [Statusbar] Breite eines Panelss
 
Zitat:

Zitat von toms
Hallo,

Mache diese Font Zuweisung vor dem Aufrufen des TextWidth(...)
Delphi-Quellcode:
StatusBar.Canvas.Font := StatusBar.Font;

Danke :) Damit tuts

MfG
xZise

xZise 20. Mär 2008 23:58

Re: [Statusbar] Breite eines Panels
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bins nochmal, und zwar sieht das ein bisschen "gedrängt" aus?

Als fehle da der Rahmen um die "Rahmen".

MfG
xZise

toms 21. Mär 2008 06:40

Re: [Statusbar] Breite eines Panels
 
Angelehnt an die Funktion von shima könnte die AutoResize Funktion so aussehen.
(verwendet anstatt die von shima verwendete TrueFontWidth Funktion Canvas.Font := Font)

Delphi-Quellcode:
uses
  CommCtrl;

procedure AutoSizeStatusbarPanels(sb: TStatusbar);
var
  iPanel: Word;
  borders : array[0..2] of Integer;
begin
  With sb do
  begin
    // Don't deal with simple panels
    if SimplePanel then Exit;
    // Assign the Font to Canvas.Font
    Canvas.Font := Font;
    // get the Borders of the Statusbar
    // border[2] = Width of the Border between Rectangles
    SendMessage(Handle, SB_GETBORDERS, 0, Integer(@borders));
    for iPanel := 0 to Panels.Count -2 do // Don't resize the last panel
    begin
     // Calculate the Width of the Panel
      Panels.Items[iPanel].Width := Canvas.TextWidth(Panels.Items[iPanel].Text) +
      borders[2] * 2 + 3; // Vertical Border * 2 + 3 extra Pixels
    end;
  end;
end;

xZise 21. Mär 2008 07:04

Re: [Statusbar] Breite eines Panels
 
Damit funktioniert es jedenfalls unter Vista.

Ich weiß nicht wie das nachher mit anderen Styles ist.

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 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