Oppure

Loading
13/01/11 13:11
davidebrescia
Già provato a mettere la riga anche nella mia routine..e niente da fare o ottengo un errore oppure se per esempio digito la parola CAFFE e premo il backspace mi torna indietro di 1 carattere e si limita ad evidenziarlo ma senza cancellarlo. Io credo proprio che bisognerebbe rivedere la routine di autocompletamento che io ho copiato e che di per se funziona, solo che ce questo inconveniente..con l'istruzione cmbdescr.text="" alla pressione del tasto backspace ottego la cancellazione totale del contenuto di cmbdescr.text, cancellando l'istruzione cmbdescr.text="" e mettendo la tua istruzione ottengo l'evidenziazione dell'ultimo carattere contenuto in cmbdescr.text ma non vuole saperne di eliminarlo, ripremendo backspace non si sposta al penultimo carattere, anzi rimane paralizzato sull'ultimo e da qui non se ne esce.. per me la soluzione è : 1 - eliminare il concetto di autocompletamento oppure 2 - riscrivere la routine di autcompletamento oppure 3 - sperare in qualche lluminazione dall'alto dei cieli...che ritengo poco probabile... eheheh .. ti ringrazio ancora rudix x l'aiuto e lo sforzo, se comunque non riesco ad ottenere ciò che voglio pazienza, per questo mio applicativo personale non vale la pena diventare matti...ciaoo
aaa
13/01/11 18:37
RUDYX
DavideBrescia !!!!! ... mai perdere la speranza!!!!!!! ... ascolta ......

prova a modificare questa il codice con quelle piccole modifiche che ho evidenziato
con tanti apici : '''''''''''''''''''''''''''''' e in neretto

Private Sub cmbDESCR_Change()
Static Changing As Boolean
Static Found As Boolean
Static PartialText As String
'nuova istruzione'''''''''''''''''
If Blanking Then
'''''''''''''''''''''''''''''''''''''
If Changing Then Exit Sub Else Changing = True ' questo evita le chiamate nidificate della routine
If cmbdescr.Text = "" Then GoTo Esci ' se non vi è testo esce dalla routine
PartialText = cmbdescr.Text 'memorizza la parte di testo digitata
If Canceling Then GoTo Esci ' se il tasto Cancel è premuto esce dalla routine

If PartialText = "" Then GoTo Esci
SendMessage(cmbDESCR.hwnd, CB_FINDSTRING, -1, ByVal PartialText) ' trova l'indice per l'elemento più simile al quello digitato
If L > -1 Then ' se l'elemento viene trovato
' il testo parziale viene completato con quello trovato dall'API
cmbdescr.Text = PartialText & Mid(cmbdescr.List(L), Len(PartialText) + 1)
If Not Deleting Then
cmbdescr.SelStart = Len(PartialText)
Else
cmbdescr.SelStart = Len(PartialText) - IIf(Found, 1, 0)
End If
cmbdescr.SelLength = Len(cmbdescr.Text)
PartialText = Mid(cmbdescr.Text, 1, cmbdescr.SelStart)
If PartialText = "" Then cmbdescr.Text = ""
Deleting = False
Found = True
Else
Found = False
End If
'nuova istruzione'''''''''''''''''
End If
''''''''''''''''''
Esci:
Changing = False
Deleting = False
Canceling = False
'nuova istruzione '''''''

Blanking = False

''''''''''''''''''''''''
End Sub

Private Sub cmbDESCR_KeyDown(KeyCode As Integer, Shift As Integer)
'nuova istruzione'''''''''''''''''

If KeyCode = 32 Then Blanking = True

''''''''''''''''''''''''''''''''''
If KeyCode = vbKeyDelete Then Canceling = True
If KeyCode = vbKeyBack And cmbdescr <> "" Then
Deleting = True: KeyCode = 0
End If
End Sub

'nuova istruzione'''''''''''''''''
Private Sub cmbdescr_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 32 And Trim(cmbdescr.Text) <> "" Then
cmbdescr.Text = Trim(Mid(cmbdescr.Text, 1, Len(cmbdescr.Text) - 2))
End If
End Sub

'''''''''''''''''''''''''''''''''''



poi dovresti definire la variabile Pubblica Booleana Blanking (chiamala come vuoi)
e poi fammi sapere ciao .......... (ce la faremo vedrai :k: )

(ehm .... per la cronaca mi chiamo RUDYX e non RUDiX)


Ultima modifica effettuata da RUDYX 13/01/11 18:42
aaa
13/01/11 22:33
davidebrescia
Intanto sempre grazie RUDYX e scusa per l'errore di battitura.
Dunque cosa ho ottenuto con il tuo codice?
Il problema inverso, ovvero funziona la cancellazione carattere per carattere ma il completamento automatico non funge piu'.
Abbiamo ottenuto il cane che si morde la coda eheh :o)

aaa
14/01/11 17:54
RUDYX
Allora proviamo così ora ........
.......a tutti il resto del codice che ti ho precedentemente dato , dovresti modificare la riga in NERETTO :

in sostanza si tratta di inserire un NOT


Private Sub cmbDESCR_Change()
Static Changing As Boolean
Static Found As Boolean
Static PartialText As String
'nuova istruzione'''''''''''''''''

If not Blanking Then

'''''''''''''''''''''''''''''''''''''
If Changing Then Exit Sub Else Changing = True ' questo evita le chiamate nidificate della routine
If cmbdescr.Text = "" Then GoTo Esci ' se non vi è testo esce dalla routine
PartialText = cmbdescr



vediamo un pò ..................... :rotfl:
Ultima modifica effettuata da RUDYX 14/01/11 17:56
aaa
14/01/11 18:48
davidebrescia
Niente siamo tornati al punto di partenza :(..evidenzia sempre la E di caffe.
Ma non cancella nulla e rimane paralizzato, ovvero non si sposta al penultimo carattere ne cancella nessun carattere.
Lasciamo perdere va...apprezzo i tuoi sforzi di darmi una mano, ma ripeto non ne vale la pena di diventare matti. E' un mio applicativo personale non è in uso a nessun'altro.Funziona in generale bene, salvo questa cosuccia...ma direi trascurabile..ciaoo
aaa
15/01/11 6:02
RUDYX
uhm ....mi sembra strano .......
se vuoi possiamo continaure .... prova così .........
(mai darla vinta !!! ahahahahah )


Private Sub cmbDESCR_KeyDown(KeyCode As Integer, Shift As Integer)
'nuova istruzione'''''''''''''''''

If KeyCode = 32 Then
Blanking = True
ELSE
Blanking = True
ENDIF

''''''''''''''''''''''''''''''''''
If KeyCode = vbKeyDelete Then Canceling = True
If KeyCode = vbKeyBack And cmbdescr <> "" Then
Deleting = True: KeyCode = 0
End If
End Sub

aaa
15/01/11 10:50
davidebrescia
Niente...0 ... nain...; secondo me andrebbe trovato un altro sistema per eseguire l'autocompletamento.Quindi bisognerebbe riscrivere da capo la
procedura di autocompletamento...essendo che la routine dell'autocompletamento l'ho trovata in giro per internet, non so bene come funziona, per cui a questo punto, dovremmo scrivere una nostra routine personale di autocompletamento che si appoggi al campo database descrizop, altrimenti mi sa che non ne usciamo piu'.
aaa
15/01/11 23:35
RUDYX
DavideBrescia ho commesso un errore nello scrivere ...... spero ovviamente che tu hai scritto cosi:

Private Sub cmbDESCR_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 32 Then
BLANKING = True
Else
BLANKING = False <<<<<<--- qui va scritto FALSE <<<<<<<<<<
End If


If KeyCode = vbKeyDelete Then Canceling = True
If KeyCode = vbKeyBack And CMBDESCR <> "" Then
Deleting = True: KeyCode = 0
End If
End Sub


Se cosi non fosse , fallo ora e dimmi .
Alltrimenti spiegami meglio come intenderesti tu l'AUTOCOMPLETAMENTO che te lo rifaccio io , perchè a me funziona !!!!!!!!

aaa