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

(Resolvido) Selecionar Ítem com Botão Direito em ListBox


Danleonhart

Pergunta

Seguinte...

Utilizo o mesmo script em um FlexGrid para apresentar um PopUpMenu e funciona 100%...

agora se utilizo na ListBox, o PopUpMenu aparece,mas o ítem não recebe o foco...ou seja, tenho de primeiro selecionar o ítem com o botão esquerdo e depois apertar o botão direito para ser apresentado o PopUpMenu...como faço para o ítem receber o foco igual quando se pressiona o botão esquerdo ? :mellow:

Meu script:

Private Sub Lst1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 On Error Resume Next
With Lst1
  If Button = 2 Then
   .SetFocus
   PopupMenu FrmPrincipal.M_Oculto, , .Left + X, .Top + Y
  End If
End With
End Sub

sml13.gif

Editado por Danleonhart
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

é mesmo, tb já tive problema com isso. na epoca eu tinha feito o seguinte, eu medi mais ou menos qtos pixels na vertical a fonte q eu estava usando ocupava, e na hora do MouseDown, baseado no Y do mouse, eu conseguia descobrir em qual item ele estava em cima, e ai eu mudava o ListIndex.

na verdade, era uma solucao muito besta, tb porque se eu mudasse a fonte não funcionava mais. e agora não lembro se eu consegui achar uma solucao pra quando ele movesse a barra de rolagem na vertical.

mas na verdade é muito mais facil, quando ele clicar com o botao direito, você simular um clique do botao esquerdo, o q vai levar o item a ser selecionado:

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Private Const MOUSEEVENTF_MOVE = &H1          ' mouse move
Private Const MOUSEEVENTF_LEFTDOWN = &H2      ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4        ' left button up
Private Const MOUSEEVENTF_RIGHTDOWN = &H8     ' right button down
Private Const MOUSEEVENTF_RIGHTUP = &H10      ' right button up
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20   ' middle button down
Private Const MOUSEEVENTF_MIDDLEUP = &H40     ' middle button up
Private Const MOUSEEVENTF_WHEEL = &H800       ' wheel button rolled
Private Const MOUSEEVENTF_ABSOLUTE = &H8000   ' absolute move

Private Sub Lst1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
With Lst1
  If Button = 2 Then
   mouse_event MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
   .SetFocus
   PopupMenu FrmPrincipal.M_Oculto, , .Left + X, .Top + Y
  End If
End With
End Sub[/code]

de uma testada e veja se não ocorre nenhum transtorno.

de qualquer modo, uma outra opcao seria usar ListView porque ele já seleciona automaticamente com o clique direito sem nenhum trabalho adicional pra nos.

Link para o comentário
Compartilhar em outros sites

  • 0

é mesmo, isso acontece porque o mouse_event() leva um certo tempo pra acontecer. enquanto o clique ainda esta sendo simulado, o menu já apareceu. então o clique acontece em cima do menu e não na ListBox.

então, mostre o menu no MouseUp q deve funcionar. ate o MouseUp ser chamado, o mouse_event() já deve ter acabado. alem do mais, tem mais sentido mostrar o menu no MouseUp, já q normalmente é assim nos demais componentes no windows:

Private Sub Lst1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 2 Then
   mouse_event MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
  End If
End Sub
Private Sub Lst1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
With Lst1
  If Button = 2 Then
   .SetFocus
   PopupMenu FrmPrincipal.M_Oculto, , .Left + X, .Top + Y
  End If
End With
End Sub[/code]

outra solucao seria usar um Timer pra esperar um tempo (uns 10 milisegundos devem ser suficientes) entre o mouse_event() e o PopupMenu(). mas a forma acima deve funcionar sem mtos problemas.

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...