Duplo-Clique em um Panel da StatusBar...

Delphi

20/02/2011

Olá!   Tem algum evento que possa detectar um "duplo-clique" em um determinado Panel da StatusBar ?   Tenho 3 Panels: [0] - mensagens em geral [1] - usuário logado [2] - hora atual   gostaria de verificar quando ocorre o duplo-clique sobre o panels[1] (usuário logado) para abrir um form para login/logout.  
Elvio Lampugnani

Elvio Lampugnani

Curtidas 0

Respostas

Marco Salles

Marco Salles

20/02/2011

Aqui um exemplo que pode dar certo para vc  
var
mouseInStatusBar:Tpoint;
begin
with StatusBar1 do
  begin
    mouseInStatusBar:=ScreenToClient(Mouse.CursorPos);
    if mouseInStatusBar.x <= Panels[0].Width then
       showmessage('clicou no Primeiro')
    else
       if mouseInStatusBar.x <= (Panels[0].Width+Panels[1].Width) then
          showmessage('clicou no Segundo')
       else
          showmessage('clicou no Terceiro');
    end;
end;
GOSTEI 0
Marco Salles

Marco Salles

20/02/2011

O Exemplo que lhe postei antes é um caso particular para Tres Paneis .. Caso um dia vc precise , segue um Exemplo para n_esimos Paneis  
procedure TForm1.StatusBar1DblClick(Sender: TObject);
var
mouseInStatusBar:Tpoint;
pWidth,i:integer;
begin
with StatusBar1 do
  begin
     if (SimplePanel) OR (StatusBar1.Panels.Count = 0) then
       i:=0
     else
       begin
        mouseInStatusBar:=ScreenToClient(Mouse.CursorPos);
        pWidth:=0;
          for i := 0 to StatusBar1.Panels.Count - 2 do
            begin
               pWidth := pWidth + Panels[i].Width;
                if mouseInStatusBar.x <= pWidth then
                  Break;
            end;
     end;
showmessage('Clicou no Panel '+Panels[i].Text);
end;
end;
GOSTEI 0
Elvio Lampugnani

Elvio Lampugnani

20/02/2011


O Exemplo que lhe postei antes é um caso particular para Tres Paneis .. Caso um dia vc precise , segue um
Exemplo para n_esimos Paneis
 
procedure TForm1.StatusBar1DblClick(Sender: TObject);
var
mouseInStatusBar:Tpoint;
pWidth,i:integer;
begin
with StatusBar1 do
  begin
     if (SimplePanel) OR (StatusBar1.Panels.Count = 0) then
       i:=0
     else
       begin
        mouseInStatusBar:=ScreenToClient(Mouse.CursorPos);
        pWidth:=0;
          for i := 0 to StatusBar1.Panels.Count - 2 do
            begin
               pWidth := pWidth + Panels[i].Width;
                if mouseInStatusBar.x <= pWidth then
                  Break;
            end;
     end;
showmessage('Clicou no Panel '+Panels[i].Text);
end;
end;
 

Grato.Funcionou 100%.Fiz uma pequena modificação no código.
  with StatusBar1 do  begin    if (SimplePanel) OR (StatusBar1.Panels.Count = 0) then      ShowMessage('Clicou na StatusBar...')    else begin      mouseInStatusBar:=ScreenToClient(Mouse.CursorPos);      pWidth:=0;      for i := 0 to StatusBar1.Panels.Count - 2 do begin        pWidth := pWidth + Panels[i].Width;        if mouseInStatusBar.x <= pWidth then          Break;      end;      ShowMessage('Clicou no Panel['+IntToStr(i)+'] = '+QuotedStr(Panels[i].Text));    end;  end;

GOSTEI 0
Elvio Lampugnani

Elvio Lampugnani

20/02/2011


Aqui um exemplo que pode dar certo para vc
 
var
mouseInStatusBar:Tpoint;
begin
with StatusBar1 do
  begin
    mouseInStatusBar:=ScreenToClient(Mouse.CursorPos);
    if mouseInStatusBar.x <= Panels[0].Width then
       showmessage('clicou no Primeiro')
    else
       if mouseInStatusBar.x <= (Panels[0].Width+Panels[1].Width) then
          showmessage('clicou no Segundo')
       else
          showmessage('clicou no Terceiro');
    end;

end;
 

Blz! Funcionando 100%.
Fiz um pequeno ajuste a minha necessidade:
  with sb_principal do begin    mouseInStatusBar:=ScreenToClient(Mouse.CursorPos);    if ( mouseInStatusBar.x > Panels[0].Width) and (mouseInStatusBar.x < (Panels[0].Width+Panels[1].Width)) then      showmessage('clicou no segundo panel - Usuários...');  end;

Grato.
GOSTEI 0
POSTAR