Newsgroup: it.comp.lang.visual-basic
Titolo: Datareport: CanGrow e Height

 In un DataReport, posiziono e popolo a runtime una serie di RptLabel.
Di queste, alcune hanno la capacità di aumentare la propria estensione
verticale, se il contenuto 'va a capo' (CanGrow=True).
In tale caso, occorre che anche altre RptLabel, per restare ben allineate,
crescano di altrettanto, anche se il loro contenuto non lo richiederebbe.
Quindi, imposto CanGrow a True, e a runtime imposto la .Caption con il testo
che voglio.
Poi, pensavo, leggo la Height della RptLabel ridimensionata, e se è
superiore a quella originale modifico le collegate.
Invece, resto fregato. Perchè, se una RptLabel cresce, è come se la scala
delle ordinate non fosse più lineare.
Mi spiego:
Prendo una RptLabel. Imposto .Top a 1000.
Ne imposto .Height a 100
Il bordo inferiore della Label avrà quindi coordinate verticali
1000+100=1100. Bene.
Adesso inserisco una .Caption molto lunga, che forza ad andare a capo.
.Top resta 1000 (ovvio).
.Height resta a 100 (e già questo mi crea problemi).
Almeno, però, che la .Top del controllo subito sotto, che viene spostato in
automatico, mi diventi 1200! E invece resta a 1100.
E' come se la scala delle ordinate avesse un buco di 100twips in
corrispondenza della riga di sovradimensione della RptLabel.
Questo mi impedisce di poter leggere la Height della Label, e quindi di
ridimensionare le altre RptLabel di conseguenza.
E mi impedisce anche di ottenere la Height attraverso la differenza di
coordinate fra le .Top di due controlli, perchè è tutta la scala a essere
divenuta discontinua.
Se fosse possibile impostare un RptLine usando le coordinate x,y di inizio e
x,y di fine segmento, probabilmente funzionerebbe. Invece le RptLine (come
anche le Shape), vogliono width e height. E in quest'ultima proprietà non so
cosa mettere.
Per il momento, conto le occorrenze di vbnewline dentro alla .Caption della
RptLabel che si ridimensiona, e inserisco altrettante vbnewline nelle
RptLabel da ridimensionare.
Ma se il testo va a capo da solo, non c'è modo.
Mi tengo come ultimissima opzione di generare un parser che visualizzi,
appoggiandosi a TextWidth di una PictureBox nella form chiamante, se il
testo supera le dimensioni, e quindi inizi a tagliare tale testo e reiteri
il controllo contando quante volte va a capo.
Spero qualcuno riesca a seguire il problema e, possibilmente, conosca una
soluzione.
Saluti
Alberto
--
Santo cielo, Magnum, si può sapere cos'è questo baccano?
Higgins, posso spiegarle...
Credo non sia necessario.
Zeus, Apollo, a voi...

 richiederebbe.
(snip, è un mezzo romanzo)
tutti questi lavori li fai nell'evento di inizializzazione del datareport?
ho il fortissimo sospetto che le dimensioni degli oggetti che possono
crescere vengano stabilite in seguito, quando vengono "disegnati", e quindi
quando tu non hai più possibilità di modificare gli altri.
comunque, come ti dissi tanto tempo fa, se devi posizionare al run time
qualche centinaio di label, forse ti conviene lavorare direttamente
sull'oggetto printer, che almeno hai un totale controllo della situazione.
anche perchè, tornando alla tecnica che hai ipotizzato, non sono affatto
sicuro che l'altezza del testo in una picture box sia la stessa del testo in
una label, come minimo bisogna considerare qualche margine...
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 qualche margine...
Neanche io sono sicuro. Per le ListBox funziona perfettamente (e lo uso da
sempre), ma per le RptLabel sarebbe un esperimento...
Ciao
Alberto

 capo.
Ok, non trovando altro, ho fatto il parser.
Confermo che funziona al millimetro.
Ciao
Alberto