放一個 Memo(在 Standard 頁), 一個 StatusBar(在 Win32 頁), 並將 StatusBar 的 Panel 分成三部份
procedure TForm1.StatusBar1Click(Sender: TObject);
var
mpoint: TPoint;
x, i, panel: integer;
begin
// StatusPanels 未分區 或 StatusBar 的 SimplePanel 設為 true
if (StatusBar1.SimplePanel) or (StatusBar1.Panels.Count=0) then
begin
Memo1.Lines.Add('StatusBar 未分區') ;
exit;
end;
// 取得滑鼠在整個螢幕的座標
mpoint := Mouse.CursorPos;
// 將滑鼠位置由整個螢幕座標轉換為 StatusBar 內座標
mpoint := StatusBar1.ScreenToClient(mpoint) ;
panel := -1;
x := 0;
for i := 0 to StatusBar1.Panels.Count - 1 do
begin
x := x + StatusBar1.Panels[i].Width;
if mpoint.X < x then
begin
panel := i;
break;
end;
end;
// 若滑鼠點在最後一區之外
// 則當做點在最後一區處理
if panel = -1 then
panel := -1 + StatusBar1.Panels.Count;
Memo1.Lines.Add(Format('滑鼠點在第 %d 區',[panel])) ;
end;
沒有留言:
張貼留言