Newsgroup: it.comp.lang.visual-basic
Titolo: Tasto destro

Come faccio a selezionare una voce in una listbox con il tasto destro del
mouse?
Thankssssssss
bark


Devi intercettare l'evento MouseUp della list view e poi verificare se il
pulsante cliccato e' effettivamente quello destro (codice = 2). Ad esempio
Private Sub myListView_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
...
    if Button = 2 then  ' ho utilizzato il tasto destro...
        ...
    else
        ...
    end if
end Sub
--
Massimo Fauro

 end Sub
ma se metti una listbox in un form e cerchi di selezionare qualcosa col
tasto destro non ci riesci. Quello che voglio è appunto selezionare una riga
della listbox col tasto destro, qualche idea?
ciao, bark

 wrote in message
news:9glvso$kkf$1...@lacerta.tiscalinet.it...
...
Hai ragione, hai scritto listbox... ho assolutamente bisogno di ferie...
Sicuro di non aver bisogno di una list view??? ;)))
--
Massimo Fauro

 ha scritto nel messaggio
news:3b2ef64e$1...@news.bluewin.ch...

Sei uno specialista in listview? :))
Appro-posito, in un altro programmino ho due listview affiancate, mi è
venuto in mente di dimensionarle run-time. Hai presente OE che a cavallo tra
le pseudo-listview se ci metti il mouse si vede la freccetta a due code,
così si possono ridimensionare le listview col mouse, come si fa ad ottenere
lo stesso effetto con VB?
ciao, bark


Credo che con il solo vb non ci si riesca.
Ho fatto qualche prova, ma ne sono venuto fuori solo con l' API
(devo ammettere che senza di essa mi sentirei nudo).
Allora, in un nuovo progetto vb metti una listbox nel form di default
ed aggiungi un modulo.
Nel form scrivi questo codice, tanto per caricare il listbox con qualcosa:
Private Sub Form_Load()
    Dim m As Long
    With List1
        .Clear
        For m = 1 To 12
            .AddItem Format$(DateSerial(2001, m, 1), "Mmmm")
        Next m
    End With
End Sub
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If (Button = vbRightButton) Then
        List1.ListIndex = GetLBItemUnderCursor(List1.hwnd)
    End If
End Sub
-- Nel modulo .bas, invece, copia questo:
Option Explicit
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Const LB_GETITEMRECT = &H198
Private Const LB_GETTOPINDEX = &H18E
Private Const LB_GETCOUNT = &H18B
Private Declare Function GetCursorPos Lib "user32" ( _
                            ByRef lpPoint As POINTAPI _
                            ) As Long
Private Declare Function ScreenToClient Lib "user32" ( _
                            ByVal hwnd As Long, lpPoint As POINTAPI _
                            ) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
                            ByVal hwnd As Long, ByVal wMsg As Long, _
                            ByVal wParam As Long, ByRef lParam As Any _
                            ) As Long
Private Declare Function GetClientRect Lib "user32" ( _
                            ByVal hwnd As Long, ByRef lpRect As RECT _
                            ) As Long
'// =======================================================
Public Function GetLBItemUnderCursor(ByVal hwndList As Long) As Long
    Dim ntop As Long, nCount As Long, nRectheight As Long
    Dim rc As RECT, itemrect As RECT
    Dim pt As POINTAPI
    Dim nProgrHeight As Long
    '// legge la posizione del cursore del mouse
    Call GetCursorPos(pt)
    '// e la converte in coordinate della listbox
    Call ScreenToClient(hwndList, pt)
    '// primo item visibile
    ntop = SendMessage(hwndList, LB_GETTOPINDEX, 0, 0)
    '// numero degli item complessivi
    nCount = SendMessage(hwndList, LB_GETCOUNT, 0, 0)
    '// legge il rettangolo della listbox
    Call GetClientRect(hwndList, rc)
    '// calcola l' altezza della listbox
    nRectheight = rc.Bottom - rc.Top
    '// cicla fino alla fine della listbox
    '// o finche' raggiunge l' ultimo item
    nProgrHeight = 0
    While ((nRectheight >= nProgrHeight) And (ntop < nCount))
 
        '// ottiene il rettangolo dell' item corrente
        Call SendMessage(hwndList, LB_GETITEMRECT, ntop, itemrect)
 
        '// aggiorna il progressivo dell' altezza raggiunta
        nProgrHeight = nProgrHeight + (itemrect.Bottom - itemrect.Top)
 
        '// verifica se l' ordinata del mouse e' contenuta nel
        '// progressivo dell' altezza, allora abbiamo trovato l' item
        If (pt.Y <= nProgrHeight) Then
            GetLBItemUnderCursor = ntop
            Exit Function
        End If
 
        '// muove alla riga successiva
        ntop = ntop + 1
    Wend
 
    '// esito negativo
    GetLBItemUnderCursor = -1
 
End Function    '// GetLBItemUnderCursor
Bene, premi F5, seleziona un item col tasto destro e ...
have fun !
hth, hal

Grazie hal per la dritta; se non ti è molto disturbo volevo chiederti se sia
possibile dimensionare listbox, listview, o altri controlli con il mouse a
run-time, ad esempio come con OE che quando avvicino il mouse sul bordo a
cavallo tra due pseudo-listview compare la frecca a due code col quale posso
ridimensionarle.
Spero di non essere stato troppo ostico
ciao, grazie, bark


guarda un po' se ti va bene questo:
http://www.mvps.org/vbvision/_samples/Resize_Handles_Demo.zip
hth, hal