Ir para conteúdo
Fórum Script Brasil
  • 0

Duplo Clique


Guest Piccini

Pergunta

Guest Piccini

Ola Pessoal,

Tenho quatro Componetes do Tipo TPanel que efetuo DragDrop entre eles, porém os mesmos também possuem evento DblClick...

Se habilito o DragDrop o DblClick não funciona e vice-versa..

alguém pode me ajudar uma vez que preciso destes dois eventos???

:rolleyes:

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Alguém teria uma sugestão ??

:ph34r:

Fernando, imagino que você esteja propriedade DragMode = dmAutomatic. Fiz uma gambiarra encima de uma teste com drag-and-drop manual que eu tinha. Aparentemente funciona, então experimente e veja se funciona para o que você quer.

1) Primeiramente as propriedades DragMode dos componentes envolvidos deve ser colocada em dmManual;

2) Os eventos OnStartDrag, OnDragOver, OnDragDrop e OnDragEnd continuam valendo;

3) Declaramos, na sessão private do form, duas variáveis para controle do mouse pressionado (Pressed :boolean) e do duplo-click(DblClick :boolean);

4) No evento OnMouseDown, a ser utilizados pelos componentes envolvidos, colocamos o seguinte código:

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Pressed := True;
end;
5) No evento OnMouseUp, o seguinte código:
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if DblClick then
    DblClick := False;
  Pressed := False;
end;
6) No evento OnMouseMove, o seguinte código:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Pressed and not ((Sender as TControl).Dragging) then
    (Sender as TControl).BeginDrag(True);
end;
7) No evento OnDblClick, inicializamos a variável DblClick para indicar que o evento ocorreu:
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  DblClick := True;
 // seu código continua logo abaixo
  ...
end;
8) No evento OnStartDrag, adicionamos o código que verificará se o click do mouse que iniciou o processo foi gerado a partir do duplo click do mouse. Em caso afirmativo, cancelamos o processo:
procedure TForm1.Panel1StartDrag(Sender: TObject; var DragObject: TDragObject);
begin
  if DblClick then
  begin
    CancelDrag;
    Exit;
  end;
 // seu código continua logo abaixo
  ...
end;

A idéia é que se você dá um duplo click então o mouse não se move (99,99% das vezes isso ocorre - rsrs) eu você não está tentando fazer o drag-and-drop. Já se o mouse for pressionado e movido, iniciamos manualmente o processo.

No meu exemplo, ambos os Panels compartilharam os mesmos eventos. Confira se funciona.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...