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: Panel-Breite herausfinden (https://www.delphipraxis.net/26843-statusbar-panel-breite-herausfinden.html)

Quake 30. Jul 2004 09:23


StatusBar: Panel-Breite herausfinden
 
Hallo,

wie kann man die Breite des letzten (rechten) Panels eines StatusBar herausfinden.
"StatusBar.Panels[x].Width" bringt nicht das gewünschte Ergebnis, da die tatsächlich angezeigte Breite viel größer ist als die, die "StatusBar.Panels[x].Width" steht. Ausserdem kann sich die Größe des Panels auch verändern, wenn ich das Fester vergrößere.

bye

shmia 30. Jul 2004 09:57

Re: StatusBar: Panel-Breite herausfinden
 
Delphi-Quellcode:
// liefert die Abmessungen eines Panels auf einem Statusbar
function GetStatusbarPanelRect(sb: TStatusBar; idx:Integer):TRect;
begin
   SendMessage(sb.Handle,SB_GETRECT, idx, integer(@Result));
end;

// findet das Panel unter dem Punkt Pt
// nützlich, um das angeklickte Statusbar Panel zu ermitteln
function GetStatusBarPanel(sb: TStatusBar; const Pt: TPoint): Integer;
var i: Integer; rcPanel: TRect;
begin
   Result := -1;
   for i := sb.Panels.Count-1 to 0 do
   begin
      GetStatusbarPanelRect(sb, i);
      if PtInRect(rcPanel,Pt) then
      begin
      Result := i;
      Break;
      end;
   end;
end;

Quake 30. Jul 2004 10:34

Re: StatusBar: Panel-Breite herausfinden
 
Danke :bounce2:

Ich habe ebend auch noch gesehen, das bei der Procedure "OnDrawPanel" das Rect mitgeliefert wird.

ciao

Delphi-Freak 21. Aug 2005 20:42

Re: StatusBar: Panel-Breite herausfinden
 
Zitat:

Zitat von shmia
Delphi-Quellcode:
// liefert die Abmessungen eines Panels auf einem Statusbar
function GetStatusbarPanelRect(sb: TStatusBar; idx:Integer):TRect;
begin
   SendMessage(sb.Handle,SB_GETRECT, idx, integer(@Result));
end;

// findet das Panel unter dem Punkt Pt
// nützlich, um das angeklickte Statusbar Panel zu ermitteln
function GetStatusBarPanel(sb: TStatusBar; const Pt: TPoint): Integer;
var i: Integer; rcPanel: TRect;
begin
   Result := -1;
   for i := sb.Panels.Count-1 to 0 do
   begin
      GetStatusbarPanelRect(sb, i);
      if PtInRect(rcPanel,Pt) then
      begin
      Result := i;
      Break;
      end;
   end;
end;

Wenn auch schon etwas viel später ... ich habe nämlich den Code verwendet, nur hat er nicht und nicht funktioniert.
Die Funktion GetStatusBarPanel war nämlich irgenwie fehlerhaft: verbesserte Version
Result := -1;
for i := sb.Panels.Count - 1 downto 0 do begin
rcPanel := GetStatusbarPanelRect(sb, i);
if PtInRect(rcPanel, Pt) then begin
Result := i;
Break;
end;
end;


LG

Peeters 28. Dez 2005 15:53

Re: StatusBar: Panel-Breite herausfinden
 
Habe das o.g. Beispiel bei mir mal versucht anzuwenden, bekomme aber eine Fehlermeldung:

Undefinierter Bezeichner "SB_GETRECT"

Warum?

dfried 28. Dez 2005 15:59

Re: StatusBar: Panel-Breite herausfinden
 
Du musst vermutlich die Unit "CommCtrl" noch in deine Uses-Klausel mit aufnehmen

FLINKER_FINGER 10. Mär 2007 18:22

Re: StatusBar: Panel-Breite herausfinden
 
hallo,
ich stehe gerade irgendie auf dem Schlauch. :gruebel:
Bekomme es einfach nicht hin die funktion aufzurufen. Es fehlen mir die Übergabeparameter. Wäre jmd. so nett das zu posten ?!
Also wie der Aufruf der Funktion in einer Procedure aussieht. Nach Möglichkeit kurz zu den Übergabeparametern was sagen.
Ich wäre echt dankbar !

Gruß
FLINKER_FINGER


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