Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: fsurfing - 01 Settembre 2010, 23:51:27

Titolo: creare entry con autocompletamento
Inserito da: fsurfing - 01 Settembre 2010, 23:51:27
girovagando su internet mi sono imbattuto in un "post" in un blog di un utente di cui non ricordo più il nome (mi pare iniziasse con C e finisse con espolo , ma non ne sono sicuro) molto interessante che spiegava come realizzare una entry con autocompletamento  in pyton, mi stavo chiedendo non è possibile fare la stessa cosa con gambas o esiste già un componente apposito di cui  sono all' oscuro? sarebbe molto carino averlo per gambas , soprattutto perchè lo utilizzerei in un sacco di applicazioni!
Titolo: Re: creare entry con autocompletamento
Inserito da: leo72 - 01 Settembre 2010, 23:59:47
Cosa intendi per "entry": una textbox?
Non credo sarebbe difficile da realizzare, basta popolare un DB o cmq una matrice in cui caricare tutti i termini e poi parsare il contenuto della textbox man mano che l'utente scrive facendo apparire poi sotto alla textbox i suggerimenti in una listbox.
Titolo: Re: creare entry con autocompletamento
Inserito da: Ceskho - 02 Settembre 2010, 00:41:07
girovagando su internet mi sono imbattuto in un "post" in un blog di un utente di cui non ricordo più il nome (mi pare iniziasse con C e finisse con espolo , ma non ne sono sicuro) molto interessante che spiegava come realizzare una entry con autocompletamento  in pyton, mi stavo chiedendo non è possibile fare la stessa cosa con gambas o esiste già un componente apposito di cui  sono all' oscuro? sarebbe molto carino averlo per gambas , soprattutto perchè lo utilizzerei in un sacco di applicazioni!

Hai appena ammesso che il mio blog è interessante.... 8)

Hai provato con una combobox? altrimenti devi disegnarti, come detta da Leo, una listview sotto la textarea...su per giù è quello che fanno le gtk con completition......
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 02 Settembre 2010, 17:59:43
ma io volevo un componente unico non un mixaggio di due componenti :)
Titolo: Re: creare entry con autocompletamento
Inserito da: leo72 - 03 Settembre 2010, 11:15:20
Sarai perdonato perché sei nuovo e non avrai letto tutti i messaggi del forum  :P
Scherzi a parte, i ComboBox, a cui avevo pensato subito, hanno dei problemi di gestione (come è venuto fuori più volte) per cui secondo me la cosa migliore è proprio l'unione dei 2 componenti.
Titolo: Re: creare entry con autocompletamento
Inserito da: md9327 - 03 Settembre 2010, 12:35:44
...non capisco il motivo di due componenti...  :o
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 03 Settembre 2010, 12:57:04
si infatti...poi comunque io non ho mai avuto problemi con i combobox (se li conosci non ti uccidono  :P) a dire il vero non ho mai provato a vedere se si può tenere aperta la "lista" della combo popolandola in realtime,
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 03 Settembre 2010, 13:15:22
per ora il meglio che si ho fatto nella pausa pranzo è l' autoaggiornamento della lista scrivendoci un testo, ci sarà il modo per mantenere aperta la lista durante la scrittura?
Codice: gambas [Seleziona]

PUBLIC SUB ComboBox1_KeyRelease()

  DIM sName AS String
    DIM sPercorso AS String
    DIM $hConn AS NEW Connection
    DIM sql AS String
    DIM hres AS Result
    DIM i AS Integer
    DIM lista AS NEW String[]
    DIM avviato AS Boolean
    DIM testo AS String
   
    WITH $hConn
      .Type = fstat.type
      .Host = fstat.sPercorso
      .Login = fstat.login   
      .Password = fstat.pass
      .Name = fstat.name
    END WITH
 
    $hConn.Open
      $hConn.Begin
   
       
            sql = "SELECT * FROM utenti WHERE nick like '%" & combobox1.Text & "%';"
            testo = combobox1.Text
            hres = $hConn.Exec(sql)
            FOR EACH hres
            lista.add(hres!nick)
            NEXT
            PRINT "pippo"
            $hconn.Close
            ComboBox1.List = lista
            IF lista.Count <> 0 THEN
           
            ComboBox1.Index = 0
            combobox1.Text = testo
   
            ENDIF
     
       $hconn.Close


END

Titolo: Re: creare entry con autocompletamento
Inserito da: md9327 - 03 Settembre 2010, 13:50:32
Cosa intendi per "aperta"? Intendi espansa? Questo credo sia impossibile, perchè qualsiasi evento gli fà perdere il mantenimento dell'espansione.
Non ricordo se esiste una proprietà o metodo per simulare la cosa...
Titolo: Re: creare entry con autocompletamento
Inserito da: milio - 03 Settembre 2010, 17:16:39
Un mesetto fa in questa discussione http://www.gambas-it.org/smf/index.php?topic=1237.15#lastPost avevo postato un esempio che forse fa al caso tuo...
Lo allego comunque qui ;)
 
Titolo: Re: creare entry con autocompletamento
Inserito da: milio - 03 Settembre 2010, 17:18:21
Volendo ci si puo' fare anche un piccolo componente  ;D
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 03 Settembre 2010, 18:42:19
Citazione
Volendo ci si puo' fare anche un piccolo componente  Ghigno
visto che l' esperto di componenti sei tu , potresti farci un pensierino :)
secondo me è un componente che potrebbe essere molto utilizzato nei gestionali
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 03 Settembre 2010, 18:44:37
l' esempio è molto bello ma purtroppo non volevo utilizzare un list box aggiunto ad un textbox :)
Titolo: Re: creare entry con autocompletamento
Inserito da: milio - 03 Settembre 2010, 19:35:39
Bhe ma creando il componente non vedrai differenza tra usare una combobox e il mio esempio...
Stasera vedo quello che posso fare...
Ci aggiorniamo :)
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 03 Settembre 2010, 19:45:04
splendido!

Titolo: Re: creare entry con autocompletamento
Inserito da: Ceskho - 04 Settembre 2010, 00:43:00
splendido!



non puoi prenderti le gtk e con extern importarti tutto quello che ti serve?
Titolo: Re: creare entry con autocompletamento
Inserito da: milio - 04 Settembre 2010, 02:28:49
non puoi prenderti le gtk e con extern importarti tutto quello che ti serve?

Ma poi io che ci sto a fare qui !?  ;D

Ecco una prima bozza...

Mi sembra di aver completato la gestione dei vari spostamenti tra textbox e listbox. Va testata.
Ho inserito queste proprieta' al componente (oltre a quelle ereditate dall'UserControl):

Property Text As String
Restituisce il testo inserito nella TextBox

Property Read Key As String
Restituisce la chiave dell'Item scelto nella ListBox

Property List As Collection
Questa e' la Collection delle parole da ricercare con la TextBox. Per esempio se volessi fare una ricerca tra i clienti avro' una query impostata in questo modo:

Codice: gambas [Seleziona]
Rec = Db.Exec("SELECT Ragionesociale, CodiceCliente FROM Clienti ORDER BY Ragionesociale;")


dopodiché:

Codice: gambas [Seleziona]
FOR EACH Rec
  SearchBox.List[Rec["CodiceCliente"]] = Rec["RagioneSociale"]
NEXT


e voila'.

Property ListWidth As String
Serve a impostare la larghezza della ListBox. Di default prendo la larghezza della TextBox.

Property ListHeight As String
Serve a impostare l'altezza della ListBox.

Bisogna ancora inserire gli Eventi.
Se avete critiche o suggerimenti, sparate pure.   :ok:
Titolo: Re: creare entry con autocompletamento
Inserito da: milio - 04 Settembre 2010, 09:35:11
 :-[ mi sa che mi sono dimenticato di allegare i sorgenti  :mad:

L'ora era tarda  :sleepy:

Titolo: Re: creare entry con autocompletamento
Inserito da: milio - 04 Settembre 2010, 13:35:59
aggiunto proprieta' .Foreground e .Background

aggiunto eventi:

SearchBox_Popup
SearchBox_Change
SearchBox_Found
SearchBox_NotFound
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 05 Settembre 2010, 21:19:33
ottimo domani gli do una bella occhiata, son arrivato ora da 2 giorni di montagna e sono troppo stanco !  ;D
Titolo: Re: creare entry con autocompletamento
Inserito da: milio - 06 Settembre 2010, 08:07:31
Ciao... Ho 'aggiustato' anche l'evento LostFocus. Adesso se lascio la lista senza ritornare nella textbox mi scatena l'evento... dovrebbe essere corretto cosi'  ;)
Per adesso l'oggetto ListBox viene 'inglobato' nella form ove e' contenuto il componente... Provero' a togliere questa dipendenza per renderlo praticamente come una combobox...
Se non avete mai fatto caso, la lista della combobox esce dai dai bordi della form che la ospita.
Questo si puo' fare disegnando la lista su una nuova form: il problema e' far rimanere il focus alla textbox nel richiamare la lista... provero' oggi...
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 18 Settembre 2010, 14:26:07
ciao milio , finalmente ho il tempo di provare la tua classe...
la sto provando su gambas3 ma sembra che non funzioni, il panel rimane vuoto  e non viene riempito
Titolo: Re: creare entry con autocompletamento
Inserito da: fsurfing - 18 Settembre 2010, 14:31:11
ok , e bastato impostare a fill la proprieta arrangement del panel :)
Titolo: Re: creare entry con autocompletamento
Inserito da: milio - 18 Settembre 2010, 23:33:36
Ciao... Finalmente l'hai provato! pensavo di aver scritto un po' di codice al vento :)

Ultimamente sto usando solo G3, e questo componente l'ho 'affinato' un attimino solo per questa versione...
Quindi apro un'altra discussione nel posto giusto prima che lo faccia qualcun'altro  :-X

http://www.gambas-it.org/smf/index.php?topic=1362.0