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 mit getrennten hints? (https://www.delphipraxis.net/88240-statusbar-mit-getrennten-hints.html)

easteregg 12. Mär 2007 13:23


Statusbar mit getrennten hints?
 
Heyho,

ich möchte meine mehrgeteilte Statusbar mit unterschiedlichen hints ausstatten.
allerdings bekomme ich das nicht hin, habs bis dato nur geschafft, einen globalen hint für die ganze bar zu setzen.

bei mir sieht das so aus

Delphi-Quellcode:
-------------------------------
| zeit | was passierte? | kb |
-------------------------------
und bei dem "kb" würde ich gerne als hint "bytes send" erstellen, für die anderen zwei soll es allerdings kein hint geben.
wie bekpomm ich sowas hin?


Danke schonmal für eure hilfe ;)

sirius 12. Mär 2007 13:34

Re: Statusbar mit getrennten hints?
 
Ich würd ja im Ereignis onHint die Mausposition abfragen.

(Allerdings dürfte dann noch ein Problem übrig bleiben)

easteregg 12. Mär 2007 13:57

Re: Statusbar mit getrennten hints?
 
welches problem bleibt da übrig?
und hast du vlt. ne idee wie man das macht? ;) weil wenn du das weist, bist du schneller im erklären, als ich im googlen ;)

marabu 12. Mär 2007 16:38

Re: Statusbar mit getrennten hints?
 
Hallo Richi,

so oder ähnlich sollte es funktionieren:

Delphi-Quellcode:
function GetPanelAt(sb: TStatusBar; x, y: Integer; var index: Integer): Boolean;
var
  r: TRect;
  pt: TPoint;
begin
  Result := not sb.SimplePanel;
  if Result then
  begin
    pt := Point(x, y);
    index := sb.Panels.Count;
    Result := False;
    repeat
      Dec(index);
      if index < 0 then
        Exit;
      sb.Perform(SB_GETRECT, index, Integer(@r));
      Result := PtInRect(r, pt);
    until Result;
  end;
end;

procedure TDemoForm.AppShowHint(var HintStr: string; var CanShow: boolean;
  var HintInfo: THintInfo);
var
  index: integer;
  sb: TStatusBar;
  pt: TPoint;
begin
  if (HintInfo.HintControl is TStatusBar) then
  begin
    sb := TStatusBar(HintInfo.HintControl);
    pt := sb.ScreenToClient(Mouse.CursorPos);
    if GetPanelAt(sb, pt.X, pt.Y, index) then
    begin
      HintStr := IntToStr(index);
      HintInfo.ReshowTimeout := 50;
    end;
  end;
end;

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  Application.OnShowHint := AppShowHint;
end;
Grüße vom marabu


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