2 Stimmen

Wie ein Panel erscheinen, wenn die Maus über sie bewegt? delphi

Wie kann ich erreichen, dass ein Bereich mit allen darin befindlichen Elementen angezeigt wird, wenn ich mit der Maus darüber fahre?

Wenn ich sie wieder ausschalte, wird sie wieder ausgeblendet?

Es zu tun, wenn es sichtbar ist, ist kein Problem (außer das Ausblenden), ich kann dies mit onmouseleaves tun.

Aber wenn sie unsichtbar ist, wie macht man sie dann sichtbar?

Dankeschön

4voto

Cosmin Prund Punkte 25218

Legen Sie die Platte auf eine andere (leere) Platte. Lassen Sie das "magische" Panel auftauchen, wenn Sie die Maus über das leere Panel bewegen.


Bearbeitet, weil ich jetzt erfahren habe, dass der OP das Panel über einen WebBrowser hat. Meine Lösung der Platzierung eines Dummy / leere Panel funktioniert nicht mehr; Interfering mit Maus-Nachrichten gehen an den WebBrowser ist auch keine gute Idee, so hier ist eine einfache Möglichkeit, dies zu beheben. Ich verwende einen TTimer mit es ist Intervall auf "100" und ich bin Pooling die Maus-Koordinaten.

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;

1voto

Toby Allen Punkte 10652

Wenn Sie einen Bereich haben, in dem Ihr Panel erscheinen soll, können Sie das Mausbewegungsereignis für das darunter liegende Formular oder übergeordnete Panel erfassen und überprüfen, ob es innerhalb der Grenzen liegt, in denen Ihr unsichtbares Panel erscheinen soll.

z.B. (Pseudocode)

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;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X