gpt4 book ai didi

delphi - 如何获取 TStatusPanel 的索引(StatusBar - Delphi)?

转载 作者:行者123 更新时间:2023-12-03 15:39:10 26 4
gpt4 key购买 nike

我正在尝试获取 TStatusPanel 的索引(TStatusBar 的面板)在 OnDblClick 中事件将其与 ShowMessage() 一起使用,例如,但我不知道如何获取索引。

我知道像 OnDrawPanel 这样的事件有一个Panel: TStatusPanel参数,但我需要 OnDblClick 中相同的东西但只有一个参数,Sender: TObject .

没有像 if StatusBar.Panel = 1 这样的命令, 例如。我可以使用StatusBar.Panels[0]但我不知道如何比较点击显示我的消息的索引。

嗯,这就是我需要的简单方法:

if StatusBar.Panel = 0 then
showmessage('0')
else if StatusBar.Panel = 1 then
showmessage('1');

我知道上面的代码不起作用,这只是一个例子。应该是这样的:

if StatusBar.Panels[0].'SOMETHING' = 0 then
showmessage('0')
else if StatusBar.Panels[0].'SOMETHING' = 1 then
showmessage('1');

最佳答案

当检索到触发双击处理程序的 WM_LBUTTONDBLCLK 消息时,您可以在 OnDblClick 事件处理程序中使用 GetMessagePos 来获取鼠标位置,并且转换为客户坐标。然后,您可以遍历状态栏的面板来定位鼠标所在的部分。示例:

procedure TForm1.StatusBar1DblClick(Sender: TObject);
var
Pt: TPoint;
i, w: Integer;
begin
Pt := SmallPointToPoint(TSmallPoint(DWORD(GetMessagePos)));
MapWindowPoints(HWND_DESKTOP, StatusBar1.Handle, Pt, 1);
w := 0;
for i := 0 to StatusBar1.Panels.Count - 1 do begin
w := w + StatusBar1.Panels[i].Width;
if Pt.X < w then begin
ShowMessage(IntToStr(i));
Break;
end;
end;
end;

您也可以选择使用 OnMouseDown 事件处理程序,其中单击鼠标的客户端坐标已通过,并在事件处理程序中测试双击,然后定位面板。使用 OnMouseDown 处理程序没有副作用,因为双击时它是从同一个 WM_LBUTTONDBLCLK 触发的。

procedure TForm1.StatusBar1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i, w: Integer;
begin
if (Button = mbLeft) and (ssDouble in Shift) then begin
w := 0;
for i := 0 to StatusBar1.Panels.Count - 1 do begin
w := w + StatusBar1.Panels[i].Width;
if X < w then begin
ShowMessage(IntToStr(i));
Break;
end;
end;
end;
end;

关于delphi - 如何获取 TStatusPanel 的索引(StatusBar - Delphi)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39666201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com