Newsgroup: it.comp.lang.visual-basic
Titolo: Popolamento combobox

Ciao ragazzi.
Ho il problema di dover popolare un combobox con circa 2000 records.
Il caricamento come potete immaginare è lento.
Cercando in rete ho scoperto che si può effettuare il popolamento molto più
velocemente con l'aiuto delle API.
L'API da utilizzare è la SendMessage.
Ecco la dichiarazione:
Public Const CB_ADDSTRING = &H143
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As
Long
ed ecco l'utilizzo
Call SendMessage(Me.cmbProdotti.Hwnd, CB_ADDSTRING, 0, rs("NomeProd").Value)
Il problema nasce dal fatto che il combobox che utilizzo non espone la
proprietà Hwnd.
Il controllo combobox non è quello standard di VB ma è quello delle
Microsoft Forms.
Devo utilizzare questo tipo di combobox perchè mi permette la ricerca
dell'elemento nell'elenco mediante la digitazione delle prime lettere che
compongono il nome.
La domanda è questa come faccio a determinare l'handle cioè la proprietà
Hwnd di questo controllo? Ho provato a vedere se c'erano proprietà nascoste
ma non ho trovato niente.
C'è qualche altra API che mi ritorna l'handle di un controllo passandogli il
nome?
Grazie.
--
-----------------------------------------
Il Pioniere.
**** Use your illusion ****
-----------------------------------------

 Il caricamento come potete immaginare è lento.
Cosa intendi per lento?
2000 record ed è lento?
Sei sicuro che il problema non si aun'altro?
A me diventa lento (oltre i 5 secondi, che secondo me è la soglia
accettabile) quando passa i 10.000 record.

nome?
Sì, ma facciamo prima: usa la combo "tradizionale" e scriviti a manina
una quindicina di righe di codice per quella funzionalità di ricerca
(più che ricerca direi di "selezione"). Ne ho scritta anch'io una ma non
la trovo: se nei prox giorni mi capita sotto mano te la posto.
Ciao,
Moreno
-- 
sirri at morenosoft dot com
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

 una quindicina di righe di codice per quella funzionalità di ricerca
http://www.vbrad.com/pf.asp?p=source/src_search_lists.htm
In generale,
http://www.google.it/search?q=combobox+CB%5FFINDSTRING
.
Bye, G.

 ha scritto nel messaggio
news:tXxS9.89450$Ou4.2...@twister2.libero.it...


 Ciao ragazzi.
Andrea

 Oppure posso riolvere in un'altro modo?
in attesa che qualcuno risponda sull'hwnd:
forms2 _non_ e' redistribuibile.
bisogna che sulla macchina target ci sia office nella versione giusta.
alternative (se servono, magari non ti servono)
1. con un combo normale puoi p.e. inserire delle stringhe con padding
di blanks o tabs. poi fai un parsing dell'item selezionato. lofina, ma
all'emergenza...
2. sul sito comune
www.it-lang-vb.net
ci dovrebbe essere un combo multicolonna, sia dao che ado, magari ti
serve.
cerca nowcombo.zip, o combo.
3. al tuo posto, userei forse un listview, tenendolo stretto e
allargandolo a tendina quando serve. senza headers non dovrebbe
cambiare molto.
caricare 2000 items cmq anche su un pc lento dovrebbe metterci poco.
ciao

Oppure posso riolvere in un'altro modo?
Cerca su google "combo multicolonna" tra i vecchi messaggi: se n'è
discusso parecchio e probabilmente sono state proposte diverse
soluzioni. Hai già dato un'occhiata al Sito Comune, vero?


 soluzioni. Hai già dato un'occhiata al Sito Comune, vero?
Non credo. Avrebbe trovato questo, che magari gli sarebbe
andato bene:
***************
ADONowCombo144.zip
(198 Kb)  ComboBox multicolonna (ADO)
Versione ADO della ComboBox multicolonna "Now Combo" dello
stesso autore: Interessante l'utilizzo di una tecnica (Fetching)
per caricare il recordset in background, sopperendo così la
maggior lentezza di ADO.
***************
Bye, G.

 ha scritto nel messaggio
news:tXxS9.89450$Ou4.2...@twister2.libero.it...


 ha scritto nel messaggio
news:avesmt$elb00$1...@ID-170738.news.dfncis.de...


 Grazie a tutti per l'aiuto che mi avete dato.
di niente.
non e' strano. i/gli hwnd-less dovrebbero essere piu' leggeri (es.
label).
pensa alla quantita' di combo in office, che magari deve girare su un
vecchio pentium...
ciao

vecchio pentium...
sě, ma non vorrei dire una baggianata, perň se il controllo č composto
da una combo, la combo ha l'hwnd, anzi, ad esser precisi ci sarebbe pure
quella dell'edit figlia della combo... solo che tale handle non viene
propagato all'esterno del controllo. Quindi di risorse ne occupa
comunque... o no?


 comunque... o no?
puo' benissimo essere. ne capisco poco. un combo = text + list, quindi
gli handle a disposizione abbonderebbero. resta da vedere come hanno
costruito quelli di office, che infatti sono tutti strambi (pensa al
tipo font di word, diverso dall'equivalente di excel) e a che cosa
vogliono mettere a disposizione all'esterno.
ciao