Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    274

    [VB6] Combo - autoexpand

    Dovrei impostare in un combo di un form fatto con VB6 la funzione AutoExpand che solitamente utilizzo con ACCESS, come posso fare ?

    Grazie

  2. #2
    Cerca di spiegarti meglio, altrimenti nn ti risponderà nessuno

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    274
    OK, scusami, cerchero' di essere più chiaro.

    Su ACCESS la guida per la proprietà EXPAND di un controllo COMBO dice:

    Proprietà AutoExpand (Espansione automatica)
    È possibile utilizzare la proprietà AutoExpand per specificare se in Microsoft Access venga riempita automaticamente la parte casella di testo di una casella combinata con un valore dell'elenco della stessa, corrispondente ai caratteri che vengono digitati nella casella combinata. In tal modo è possibile immettere rapidamente in una casella combinata un valore esistente senza visualizzare la parte casella di riepilogo. Elemento Boolean in lettura e scrittura.


    Spero di essere stato abbastanza chiaro.

    Grazie

  4. #4
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Devi utilizzare l' API SendMessage.
    Ciao, Brainjar

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    274
    Grazie per la risposta, io ho provato ma non è lo stesso risultato.

    Ciaoe e grazie

  6. #6
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Quale 'risultato non è lo stesso' ?
    La SendMessage fa miracoli !

    Metti in un form una combo.
    Nel form 'schiaffaci' questo codice :
    codice:
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
       (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) _
       As Long
    Const CB_ERR = (-1)
    Const CB_FINDSTRING = &H14C
    
    Private Sub Form_Load()
        Combo1.AddItem "French fries"
        Combo1.AddItem "Hamburgers"
        Combo1.AddItem "Milkshakes"
        Combo1.AddItem "Onion rings"
        Combo1.AddItem "Ice"
        Combo1.AddItem "Ice cream"
    End Sub
    Private Sub Combo1_KeyPress(KeyAscii As Integer)
        Dim CB As Long
        Dim FindString As String
        
        If KeyAscii < 32 Or KeyAscii > 127 Then Exit Sub
        
        If Combo1.SelLength = 0 Then
            FindString = Combo1.Text & Chr$(KeyAscii)
        Else
            FindString = Left$(Combo1.Text, Combo1.SelStart) & Chr$(KeyAscii)
        End If
        
        CB = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal FindString)
        
        If CB <> CB_ERR Then
            Combo1.ListIndex = CB
            Combo1.SelStart = Len(FindString)
            Combo1.SelLength = Len(Combo1.Text) - Combo1.SelStart
        End If
        
        KeyAscii = 0
    End Sub
    Prova a scrivere nella combo.
    Ovvio che gli additem sulla combo li imposti come vuoi tu .....
    Ciao, Brainjar

  7. #7
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Se poi unisci i due suggerimenti che hai avuto da Oregon e Brainjar, avrai l'espansione e la selezione del termine in base alla prima lettera inserita, come segue:
    codice:
    Option Explicit
    
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
       (ByVal hwnd As Long, ByVal wMsg As Long, _
       ByVal wParam As Long, lParam As Any) As Long
    
    Const CB_SHOWDROPDOWN = &H14F
    Const CB_ERR = (-1)
    Const CB_FINDSTRING = &H14C
    ' Carica la ComboBox ed inserisce il termine dalla prima lettera:
    Private Sub Form_Load()
        Combo1.AddItem "French fries"
        Combo1.AddItem "Hamburgers"
        Combo1.AddItem "Milkshakes"
        Combo1.AddItem "Onion rings"
        Combo1.AddItem "Ice"
        Combo1.AddItem "Ice cream"
    End Sub
    Private Sub Combo1_KeyPress(KeyAscii As Integer)
        Dim CB As Long
        Dim FindString As String
        
        If KeyAscii < 32 Or KeyAscii > 127 Then Exit Sub
        
        If Combo1.SelLength = 0 Then
            FindString = Combo1.Text & Chr$(KeyAscii)
        Else
            FindString = Left$(Combo1.Text, Combo1.SelStart) & Chr$(KeyAscii)
        End If
    
        CB = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal FindString)
        SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 1, 0
        
        If CB <> CB_ERR Then
            Combo1.ListIndex = CB
            Combo1.SelStart = Len(FindString)
            Combo1.SelLength = Len(Combo1.Text) - Combo1.SelStart
        End If
        
        KeyAscii = 0
    End Sub
    LM

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    274
    Grazie 1000

    Allora l'unico problema che mi è rimasto è il seguente.

    il mio combo DEVE essere non troppo grande, mentre le voci che carico all'interno del combo solo molto lunghe, il problema è che quando seleziono una di queste voci nel combo vorrei vedere l'inizio della voce che devo caricare e non la fine.

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.