當我將鼠標移動到其位置上時,如何使面板顯示其中的所有內容?如何在鼠標移過面板時顯示面板? delphi
當我再次移動它時,它會消失嗎?
當它看起來不是問題(除了淡出),我可以用onmouseleaves做到這一點。
但是,當它是隱形的,你如何使它可見?
thankssss
當我將鼠標移動到其位置上時,如何使面板顯示其中的所有內容?如何在鼠標移過面板時顯示面板? delphi
當我再次移動它時,它會消失嗎?
當它看起來不是問題(除了淡出),我可以用onmouseleaves做到這一點。
但是,當它是隱形的,你如何使它可見?
thankssss
把面板另一個(空白)面板上。當鼠標移動到空白麪板上時,使「魔術」面板顯示出來。
編輯,因爲我現在瞭解到OP有面板通過WebBrowser。我放置虛擬/空白麪板的解決方案不再有效;干涉鼠標消息到WebBrowser也不是一個好主意,所以這裏有一個簡單的方法來解決這個問題。我正在使用TTimer,它的間隔設置爲「100」,我正在合併鼠標座標。
procedure TForm25.Timer1Timer(Sender: TObject);
var PR: TRect; // Panel Rect (in screen coordinates)
CP: TPoint; // Cursor Position (always in screen coordinates)
begin
// Get the panel's coordinates and convert them to Screen coordinates.
PR.TopLeft := Panel1.ClientToScreen(Panel1.ClientRect.TopLeft);
PR.BottomRight := Panel1.ClientToScreen(Panel1.ClientRect.BottomRight);
// Get the mouse cursor position
CP := Mouse.CursorPos;
// Is the cursor over the panel?
if (CP.X >= PR.Left) and (CP.X <= PR.Right) and (CP.Y >= PR.Top) and (CP.Y <= PR.Bottom) then
begin
// Panel should be made visible
Panel1.Visible := True;
end
else
begin
// Panel should be hidden
Panel1.Visible := False;
end;
end;
等一下。這傢伙想讓整個地區的鼠標重新變回面板?這有點違背了強制實用性的「約定」。 – 2011-03-17 12:44:03
我想他想要的是某種信息面板,只有當您將鼠標移動到該區域時纔會顯示,並在您移出時消失。這不是非常規的,而不是停靠。那麼,至少我是這樣理解這個問題的! – 2011-03-17 13:44:52
你理解正確,我感謝你的回答。 – frum 2011-03-17 13:52:35
如果您有您的面板會出現在一個地區,你可以捕捉潛在的形式或父面板的鼠標移動事件,並檢查它是你看不見的面板將出現在範圍內。
例如。 (僞代碼)
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ((X > MyPanel.Left) and (Y > MyPanel.Top) and (X < mypanel.right) and
(Y < mypanel.bottom)) then
begin
mypanel.visible := true;
end;
end;
您是否使用Delphi的適當對接庫而不是製作kludge(部分工作解決方案)? – 2011-03-17 12:45:47