Programmazione => Generale => Topic aperto da: supercim - Maggio 20, 2016, 11:08:29 am
Titolo: CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 20, 2016, 11:08:29 am
Nel programma che sto realizzando ho utilizzato: CheckGroup, ma il mio amico, che dovrà utilizzare il programma, ha bisogno di impostare l'ordine oltre che alla selezione. C'è un oggetto che man mano che selezioni dà un ordine numerico?
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: Stilgar - Maggio 21, 2016, 09:25:55 am
Ciao Dalla documentazione l'ordinamento è imposto dalla lista di di stringhe che trova. http://lazarus-ccr.sourceforge.net/docs/lcl/extctrls/tcheckgroup.items.html Altera a programma l'ordine e forza la creazione a runtime. 😊 Credo che alterare l'ordine dopo la creazione non cambi il risultato visivo. Continuo a cercare nella documentazio per vedere se ci sono eventi che possano essere utili. Stilgar
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: xinyiman - Maggio 21, 2016, 09:30:19 am
Puoi fare che inverti semplicemente le caption degli oggetti. Praticamente usi una variabile d'appoggio e così cambi l'ordinamento visivo e poi i valori li calcoli sulla base della caption della check cliccata.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 21, 2016, 09:45:37 am
Dal programma faccio caricare dei file testo, nei quali inserisce li esercizi, nell'ordine che preferisce, purtroppo quando realizza una scheda, non vuole un ordine fisso, ma selezionare lui, ogni volta, l'ordine che preferisce, l'ideale sarebbe un oggetto che man mano che seleziona numera, così quando andrà in stampa, avrà l'ordine desiderato.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: Stilgar - Maggio 21, 2016, 11:04:59 am
... ok forse il problema è diverso da come lo avevo capito in origine.
L'ordine numerico credo non sia indispensabile. Hai la possibilità di creare l'ordine con una doppia list box. In questo modo l'ordinamento è fatto direttamente con l'append alla seconda list box. Quando salvi la seconda list box hai fatto la "scheda". Carichi quella senza farti problemi di ordinamento. Se proprio il cliente vuole vedere i numeri puoi mettere un gestore di rendering sulla seconda list box che metta l'ordine in fase di rendering degli elementi. Così è facilmente intuibile che gli elementi hanno un ordine che è legato alla posizione nella listbox. La prima listbox, secondo me, dovrebbe avere gli elementi (stringhe) ordinate in ordine alfabetico per poter trovare velocemente le stringhe contenute (rendendo più complessa l'interfaccia, puoi mettere un filtro - un campo di editing - sopra la prima lista box in modo fa fare un filtro continuo - onKeyUp - sulla prima list box).
Stilgar
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 21, 2016, 02:40:01 pm
Ho inserito il programma Scheda Pesi nel gruppo:
https://www.facebook.com/groups/271921909809912/
Provatelo e fatemi sapere.
Vi ricordo che il gruppo è chiuso, quindi iscrivetevi senza problemi, solo noi iscritti
possiamo leggere ciò che inseriamo nel gruppo.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: Stilgar - Maggio 21, 2016, 07:12:57 pm
Ci sono i sorgenti o gli eseguibili?
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 21, 2016, 07:40:44 pm
Ho inserito solo l'eseguibile.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 21, 2016, 07:48:56 pm
Ho pensato di usare l'evento: OnItemClick
procedure TForm1.CGprog1ItemClick(Sender: TObject; Index: integer); begin if CGprog1.Checked[index]=true then Label4.Caption:=IntToStr(index); end;
Invece della Label, carico un vettore e quando viene deselezionato un esercizio, tolgo il valore dal vettore, declassando. Nella prova ho usato un oggetto inserito nel Form, ma nel programma ho utilizzato degli oggetti vettore dichiarati: CGprox[1..5] ora devo capire come usare l'evento: OnItemClick su questi oggetti dichiarati. Quando provo ad attivare con l'istruzione: CGprogX[indx].OnItemClick:=CGprog1ItemClick; mi da errore.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: brunello - Maggio 22, 2016, 02:56:18 pm
procedure TForm1.CheckGroup1ItemClick(Sender: TObject; Index: integer); var s: string; i: integer; begin s := (Sender as TCheckGroup).Items[index]; if (Sender as TCheckGroup).Checked[index] then lista.add(s) else begin i := lista.indexof(s); if i >= 0 then lista.Delete(i); end; end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin lista.SaveToFile('indice.txt'); end;
procedure TForm1.FormCreate(Sender: TObject); begin lista := TStringList.Create; end;
procedure TForm1.FormDestroy(Sender: TObject); begin lista.Free; end;
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 22, 2016, 09:04:07 pm
Ti ringrazio, ma in questo esempio bisogna sempre trascinare l'oggetto: CheckGroup1 nel form poi andare su Ispettore oggetti in eventi e attivare su: OnItemClick CheckGroup1ItemClick
Io ho bisogno di capire come posso attivare OnItemClick da istruzione. Se scrivo: CheckGroup1.OnItemClick:=CheckGroup1ItemClick; mi da errore, ho bisogno di capire qual'è l'istruzione esatta, così posso attivare agli oggetti che ho dichiarato e non trascinato.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: Legolas - Maggio 23, 2016, 02:20:17 pm
Ciao, sarebbe utile sapere il tipo di errore che ti restituisce. In ogni caso, prova così:
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 23, 2016, 02:49:35 pm
Si grazie! Lo avevo appena scoperto cercando sul web, dovevo inserire la @ davanti al comando. Ora posso attivare agli oggetti creati e caricare un vettore che mi darà l'ordine delle scelte selezionate.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 23, 2016, 06:38:24 pm
procedure TForm1.CGprog1ItemClick(Sender: TObject; Index: integer); var lng,i2: integer; slg,sl2,ist: string; begin if CGprogX[1].Checked[index]=true then begin sel[1]:=sel[1]*10+(index+1); slg:=IntToStr(sel[1]); Label10.Caption:=slg; end else begin slg:=IntToStr(sel[1]); lng:=length(slg); if lng>1 then begin ist:=IntToStr(index+1); i2:=0; repeat i2:=i2+1; sl2:=copy(slg,i2,1); until sl2=ist; delete(slg,i2,1); Label10.Caption:=slg; Sel[1]:=StrToInt(slg); end else begin slg:=''; Sel[1]:=0; Label10.Caption:=''; end; end; end;
In questo modo posso caricare le selezioni nell'ordine desiderato in un unico valore, nel vettore Sel[1]. Così continuerò per gli altri TCheckGroup inserendoli in Sel[2]; Sel[3] e così via.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Maggio 24, 2016, 05:45:10 pm
Stavo pensando che mi conviene dichiarare il vettore Sel[0..300] come stringa e non come Integer, perchè potrei raggiungere un numero elevato e darmi errore, non sò qual'è il numero massimo raggiungibile come Integer. Nel vettore sel[] caricavo un numero per ogni TCheckGroup, questo numero era la corrispondente decimale della sequenza delle selezioni come fosse un valore binario che trasformavo in decimale. Ora dato che mi serve avere anche l'ordine di selezione, considero una cifra per ogni selezione nei primi 5 TCheckGroup, che hanno 8 opzioni, negli altri TCheckGroup considero 2 cifre per selezione, se hanno 31 opzioni l'index può andare da 0 a 30 sommo 10 così il dato và da 10 a 40 ed è sempre a 2 cifre, ma se le selezioni sono molte potrebbe uscirmi un numero elevato moltiplicando per 100, ogni volta che si aggiunge una scelta, invece lo trasformo in stringa e mi basta sommare le stringhe.
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: nomorelogic - Maggio 25, 2016, 09:06:28 am
Titolo: Re:CheckGroup come ordinare le scelte?
Inserito da: supercim - Giugno 02, 2016, 11:09:20 am
Ho visto, integer arriva solo a 32767, quindi lavoro con il vettore dichiarato stringa. Ringrazio tutti per i vostri consigli. E' il mio primo programma che realizzo in Lazarus, quindi devo fare esperienza. Ho provato ha inserire un passo di 2, ad un ciclo for, con step 2, ma mi dava errore, allora ho risolto con: repeat until.