Jump to content
Fórum Script Brasil
  • 0

(Resolvido) OnMouseLeave


João Paulo Taraciuk

Question

4 answers to this question

Recommended Posts

  • 0
Bom Dia a todos, Alguém sabe como poderia fazer para ativar o evento OnMouseLeave em um TPanel ?

Pois tal evento não existe no TPanel, utilizo Delphi 7

Valeu!!!

Substitua o TPanel pelo TGroupBox. O TGroupBox tem o evento que você precisa.

Link to comment
Share on other sites

  • 0

Infelizmente não deu, aqui não tem este evento no groupbox, pelo menos no Delphi 7 não, o que eu quero fazer é que ao sair com o mouse de dentro do TPanel ou TgroupBox, o componente fique invisível, pois é um painel que informa atalhos, como um popup, então fica alguns segundos e some, a não ser que o mouse esteja dentro dele.

Falow!!!!

Link to comment
Share on other sites

  • 0

João Paulo Taraciuk, você pode simular o efeito LeaveOut manipulando o evento OnMouseMove e capturando os eventos do mouse ao entrar na área do seu panel.

Segue um exemplo para entender como funciona o efeito:

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 // conferimos se já não estamos monitorando a saída da área do panel
  if GetCaptureControl <> Sender then  // se não estavamos...
  begin
   // capturamos os evento do mouse para este componente
    SetCaptureControl(TPanel(Sender));
   // alteramos o caption para perceber o que ocorre
    TPanel(Sender).Caption := 'Mouse na área do panel';
  end else
  begin
   // alteramos o caption para perceber o que ocorre
    TPanel(Sender).Caption := Format('%d,%d', [X, Y]);
   // caso o cursor do mouse não esteja na área do panel, está fora do mesmo
    if not PtInRect(TPanel(Sender).ClientRect, Point(X, Y)) then
    begin
     // encerramos a captura dos evento do mouse para este componente
      SetCaptureControl(nil);
     // alteramos o caption para perceber o que ocorre
      TPanel(Sender).Caption := 'Mouse fora da área do panel';
    end;
  end;
end;
No seu caso, basta algo como:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if GetCaptureControl <> Sender then
    SetCaptureControl(TPanel(Sender));
  else
    if not PtInRect(TPanel(Sender).ClientRect, Point(X, Y)) then
    begin
      SetCaptureControl(nil);
      TPanel(Sender).Visible := False;
    end;
end;

Abraços

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...