Jump to content
Fórum Script Brasil
  • 0

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


Danleonhart

Question

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

Edited by Danleonhart
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 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
      152.2k
    • Total Posts
      652k
×
×
  • Create New...