2011-03-17 1 views
2

마우스를 해당 위치로 움직일 때 패널에있는 모든 항목으로 패널을 표시하려면 어떻게합니까?마우스를 움직일 때 패널을 표시하는 방법은 무엇입니까? 델파이

내가 다시 움직이면 다시 페이드 아웃됩니까?

표시 될 때 문제가 발생하지 않습니다 (페이드 아웃 제외). onmouseleaves를 사용하여이 작업을 수행 할 수 있습니다.

하지만 보이지 않는데 어떻게 보이게 할 수 있습니까?

+0

kludge (부분 작동 솔루션) 대신 Delphi 용 도킹 라이브러리를 사용 했습니까? –

답변

4

thankssss 다른 (빈) 패널의 패널을 넣습니다. 빈 패널 위에 마우스를 움직이면 "마법"패널이 나타나게하십시오.


편집자는 OP에 WebBrowser를 통해 Panel이 있다는 것을 알았 기 때문에 편집되었습니다. 더미/빈 패널을 배치하는 내 솔루션이 더 이상 작동하지 않습니다. 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

기다려주십시오. 이 사람은 마우스를 전체 지역에 올려 놓으면 패널이 다시 올라올 수 있습니다. 유용성을 강요하는 "컨벤션"도킹에 반대하는 것입니다. –

+1

나는 정보 패널을 원한다고 생각합니다. 마우스를 움직이면 나타납니다. 그것은 틀에 얽매이지 않고 도킹에 관한 것이 아닙니다. 글쎄, 적어도 내가 그 질문을 어떻게 이해 했는가! –

+0

당신이 옳았다는 것을 이해했습니다. 당신의 대답에 감사드립니다. – frum

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

+0

'mypanel.right'를'(mypanel.Left + mypanel.Width) '로 바꾸십시오. –

+0

Thx, 뒤에 뭔가가있을 때 작동하지 않는 것 같습니다. – frum