Duplo-Clique em um Panel da StatusBar...
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
Curtidas 0
Respostas
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
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
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
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
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