Newsgroup: it.comp.lang.delphi
Titolo: Stampa etichette

Ciao a tutti,
     sono arrivato al dunque sulla stampa di etichette.
C'e' un ultimo problema che non sono riuscito a risolvere ..... spero di non 
fare confusione.
Come sempre sempre Delphi 6.0
Premesse (anche se sono cose gia appurate) :
- Per la stampa delle etichette uso gmPrintSuite
- Le etichette da stampare sono tutte uguali dalla prima all'ultima
- Il formato delle etichette non cambia, e' uno soltanto
- In un foglio A4 sono presenti 8 etichette, 2 in orizzontale per 4 in 
verticale
- Il numero di etichette da stampare e' variabile
- Il folgio puo' avere x etichette messe in qualsiasi ordine, come il caso 
di un foglio con 3 etichette gia' utilizzate e 5 pronte per la stampa
Approccio :
- Dato che il numero massimo di etichette da stampare sono 150 e che non so 
come sono disposte sui fogli, mi sono creato un array tipo LabelstoPrint : 
Array [0..149] of Byte dove 0=etichetta da saltare, 1=etichetta da stampare, 
3=fine (quando incontro il primo 3 nell'array ho finito di stampare).
- Inizializzo l'array con tutti i valori impostati a 3, quindi non stampo 
niente.
- Disegno in una form un pannello con 8 bottoni verdi rappresentanti le 8 
etichette, se si clicca sul bottone diventa rosso, significa che quello 
spazio e' vuoto e salto la label, aggiornando di conseguenza l'array.
Sviluppo, il problema e' qui !!!
Non so come risolvere il problema sulla gestione dei bottoni verdi/rossi.
Come anticipato il numero delle etichette da stampare e' variabile e ci sono 
8 etichette per pagina.
Se ne devo stampare 12 ho bisogno di 2 fogli, 8 sul primo e 4 sul secondo.
Nella form c'e' un bottone che da la possibilita' di girare tra le pagine 
calcolate, cosi' all'inizio ho un foglio con 8 bottoni verdi e il secondo 
foglio con 4 verdi e 4 bianchi (non utilizzati).
Se sul primo foglio clicco e faccio diventare rosso un bottone (etichetta 
gia' utilizzata), quest'ultima si deve riproporre all'ultima pagina utile e 
la prima bianca diventa verde.
Se anche l'ultima pagina delle etichette e' completa, o non c'e' spazio per 
una nuova etichetta perche' sono tutte utilizzate, si deve aggiungere una 
nuova pagina con i necessari controlli verdi / bianchi a seconda della 
situazione.
Non chiedo la "pappa pronta" ma uno spunto su cui ragionare per risolvere il 
problema, appena pronto uno scorcio di codice semi funzionante lo sposto 
!!!!!
Scusandomi per la lungaggine e per la poca chiarezza, un saluto a tutti
Ciao, Daniele 

Ciao Daniele,
dunque direi innanzitutto, ma a questo avrai già pensato, di avere una
variabile che indichi quanti elementi (dell'array da 150) sto usando,
nell'esempio che hai usato tu direi che la variabile andrebbe impostata a 12.
Assumo già che tu abbia il numero di pagina che stai trattando (1 di 2, 2
di 2, ecc..) visto che hai già dei bottoni che passano da una pagina
all'altra e sappiamo che la pagina è di 8 elementi.
Poi, direi di usare la proprietà Tag dei bottoni, settandola da 1 a 8, e
tutte con lo stesso evento. Quando parti con l'evento calcoli la posizione
dell'attuale etichetta usando la formula ((Pagina * 8) + Tag) (ovviamente
la pagina deve iniziare da 0, altrimenti, prima di moltiplicarla dovresti
decrementarla di 1.
A questo punto controlli se stiamo escludendo o meno la corrente etichetta
(bottone rosso o verde..) e ti regoli di conseguenza. Nel caso di bottone
rosso incrementi il numero degli elementi usati e setti l'ultimo elemento
dell'array con il valore 1 (verde).
Direi a questo punto di aggiornare la videata, e soprattutto i bottoni
(perchè se l'elemento aggiornato si trova nella stessa pagina attuale devi
aggiornarlo), con un ciclo o in maniera statica, vedi tu come preferisci.
Così dovrebbe funzionare. Spero di essere stato chiaro.
Ciao.
Cristiano.

Cristiano
--- posted by geoForum on 
http://www.delphiedintorni.it

Ciao,
   Grazie per la risposta .....
Ho passato il week-End (bhe non proprio tutto) su questo punto e ...... alla 
fine sono riuscito a far tutto.
Ho usato questa strategia (forse poco ortodossa.... ma funziona ...)
Il bottone, che rappresenta la scelta delle etichette, puo' avere tre colori
Bianco = Disponibile
Verde  = Da stampare
Rosso  = Gia' utilizzata (non c'e').
Dato che uso gmPrintSuite e che per disegnare l'etichetta matte a 
disposizione un evento e che, in questo evento, ritorna il numero di 
etichetta che si sta sampando, mi sono crato un array da 0..N di byte dove
O = Stampa
1  = Gia' utilizzata
3  = Fine stampa
Quindi in fase di stmapa se il valore nell'array e' 0 stampo, se 1 salto 
alla prossima label, se 3 processo finito.
Il problema e' stato nel gestire l'array e i bottoni.
Sebbene il mio livello di programmazione non sia stratosferico, con un po di 
impegno ho risolto il problema !!!!
Grazie di tutto,
Ciao
Daniele