2011-03-17 85 views
2

當我將鼠標移動到其位置上時,如何使面板顯示其中的所有內容?如何在鼠標移過面板時顯示面板? delphi

當我再次移動它時,它會消失嗎?

當它看起來不是問題(除了淡出),我可以用onmouseleaves做到這一點。

但是,當它是隱形的,你如何使它可見?

thankssss

+0

您是否使用Delphi的適當對接庫而不是製作kludge(部分工作解決方案)? – 2011-03-17 12:45:47

回答

4

把面板另一個(空白)面板上。當鼠標移動到空白麪板上時,使「魔術」面板顯示出來。


編輯,因爲我現在瞭解到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; 
+0

等一下。這傢伙想讓整個地區的鼠標重新變回面板?這有點違背了強制實用性的「約定」。 – 2011-03-17 12:44:03

+1

我想他想要的是某種信息面板,只有當您將鼠標移動到該區域時纔會顯示,並在您移出時消失。這不是非常規的,而不是停靠。那麼,至少我是這樣理解這個問題的! – 2011-03-17 13:44:52

+0

你理解正確,我感謝你的回答。 – frum 2011-03-17 13:52:35

1

如果您有您的面板會出現在一個地區,你可以捕捉潛在的形式或父面板的鼠標移動事件,並檢查它是你看不見的面板將出現在範圍內。

例如。 (僞代碼)

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; 
+0

這將是有道理的謝謝,但如果我的德爾福不承認權利和底部? – frum 2011-03-17 10:07:27

+0

用'(mypanel.Left + mypanel.Width)替換'mypanel.right'' – 2011-03-17 10:20:34

+0

Thx,儘管在它背後有某種東西似乎不起作用。 – frum 2011-03-17 10:33:07