Newsgroup: it.comp.lang.delphi
Titolo: Conflitto con TComboBox nella gestion dell' evento OnClick

Salve a tutti.
Scusate la prolissità ma mi devo sciogliere (e la prima volta che scrivo ad
un newsgroup in assoluto!)
Il mio problema è che vorrei usare una combo box in modo che il campo Text
della Edit venga riempito non con
il campo selezionato (ricavato da una certa colonna TStrings) ma con
un'altro campo funzione del primo
(ricavato da un'altra colonna TStrings).
Es. la lista contiene i valori strings di una colonna cols[0]:
 'testo 1'
 'testo 2'
  .........
 'testo 10'
e non vorrei cambiarli perchè fanno parte del gergo dell'applicazione
(quelli veri, intendo...)
Tuttavia se seleziono l'Items[5] vorrei che la edit non visualizzasse 'testo
6', bensì il 6° campo di
un'altra colonna di valori associata alla prima, contenente dei numeri:
 'valore 1'
 'valore 2'
  .........
 'valore 10'
Ho generato per questo una procedura ComboClick legata all'evento OnClick
della ComboBox
Il problema è che l'evento OnClick della ComboBox non è pienamente
accessibile e a valle delle modifiche
che io faccio al campo ComboBox.Text, sovrascrive lo stesso col valore
Items[ItemIndex];
Il codice è questo (la combo si chiama ElevationCB, la lista Items è
preassegnata a Items:= PointingForm.BeamStrGd.Cols[0];):
with ElevationCB do
   begin
   if not(ItemIndex = -1) then
      begin
      {Items:= PointingForm.BeamStrGd.Cols[1];}
      Text:= PointingForm.BeamStrGd.Cells[1, ItemIndex];
      end;
   end;
Nel Caso sia attiva la modifica diretta del Text, dopo la selezione dalla
list il campo Text viene effettivamente scritto secondo l'istruzione
('valore 5'), ma poi appena uscito dalla procedura da me gestita, il
componente riassegna il valore Items[ItemIndex] ('testo 5').
Allora, come si vede, ho provato a riassegnare tutta la lista (istruz. in
graffe), col risultato che il campo Text all'uscita della proc. è vuoto!
Funziona allo stesso modo se provo a gestire anche l'evento OnChange.
Posso certamente usare una seconda Edit, ma vorrei piuttosto capire come si
gestiscono gli eventi messi a disposizione dai componenti senza entrare in
conflitto con le loro gestioni interne.
Devo usare una TApplicationEvents.CancelDispatch o cosa? (e soprattutto
come?)
Potete aiutarmi?
Grazie infinite anche a chi avrà letto questa richiesta!
Ciao.
Netsaver

 
Ciao,
potresti risolvere il problema con LookupcomboPlus, è un componente
che puoi scarivare da: 
http://www.o2a.com
.
Ti faccio un piccolo esempio di come può essere usato
nell'esempio il comboboxplus si chiama comboGruppo nel quale verranno
caricati degli
elementi prelavati da una tabella, nell'esempio un codice e il relativo
nome
   ComboGruppo.ClearGridData;            //ripulisce la stringgrid
   ComboGruppo.RowCount:= 50;            //imposta a 50 righe
   ComboGruppo.ColCount :=2;             //per 2 colonne
   TbTab.First;
   while not TbTab.Eof do begin
      if TbTab.FieldByName('TAB').AsString = 'GRUPPO' then begin
         ComboGruppO.AddRow([TbTab.FieldByName('COD').AsString,
                             TbTab.FieldByName('COD').AsString+' - '+
                            TbTab.FieldByName('NOME').AsString]);
      end;
      TbTab.Next;
   end;
   ComboGruppe.SizeGridToData;           //riduce il numero di righe
agli
                                         //elementi immessi
Quando farai la scelta dell'elemento la combobox ti restituira il codice
o
la descrizione a seconda se hai impostato il valore LookupActive a true
o a false
se usi l'evento OnChange puoi scrivere:
 
<ValoreRestituito>:= ComboGruppo.Value);
Spero che questo ti possa servire.
Ciao
Micky
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:f0bb8f08a12bbf34e44...@mygate.mailgate.org...

Grazie, lo provo quanto prima!!
Per il momento ho trovato una soluzione...
Se può servire a qualcuno, il Componente TComboBox ogniqualvolta viene fatta
una assegnazione della lista Items, resetta il selezionatore ItemIndex a -1.
Pertanto, per selezionare una lista e scrivere nella EditBox un campo da una
lista diversa collegata, basta agganciarsi ai due eventi OnDropDown e
OnClick
Al primo evento assegnamo la lista 1, es. Items :=  Cols[0];
Al secondo salviamo il campo selezionato: selected := ItemIndex , assegnamo
la lista 2, es. Items :=  Cols[1] e poi riassegnamo il campo: ItemIndex :=
selected (cosa che non avevo fatto prima). Funziona!!
Cmq la prox versione voglio realizzarla col componente che hai descritto.
Ciao,
Netsaver
