Newsgroup: it.comp.lang.visual-basic
Titolo: Lunghezza comandi in base alla lunghezza della label

Salve a tutti,
	come posso fare in vb6 a ridimensionare un comando in base al suo 
contenuto? Mi spiego. Se ho una command mi piacerebbe che oltre a 
prendere la lunghezza della label avesse anche qualcosina ai bordi. Se 
mi trovo in presenza di una label della colonna di una flex mi 
piacerebbe che la colonna fosse allargata in base alla lunghezza del 
titolo. E così via per i campi che voglio che acquistino questa proprietà.
Come posso fare?
Perchè se metto:
Command.width = len(command.caption) 'Per gli elementi che hanno la 
caption chiaramente
Non funziona... il campo è chiaramente + piccolo visto che la dimensione 
del campo è in pixel e la len restituisce il numero di caratteri.
Grazie!

Il 11/02/2009, Peca's ha detto :

E già qui potresti fare una piccola indagine, definire un numero di 
twips (non di pixel) medio per carattere, ed ottenere una prima buona 
approssimazione.
Ma volendo andare sul fino, puoi usare la TextWidth di un controllo, mi 
sembra di PictureBox ma non vorrei fosse di Image, guarda tu nell'help.
Quello ti restituisce proprio i twips di un testo ipoteticamente 
stampato dentro. Quindi tu imposti i font uguali, poi chiedi TextWidth, 
e lo imposti nella width del controllo che vuoi dimensionare.
Molto, molto, comodo per chi gestisce i datareport da codice, per gli 
incolonnamenti...
Alberto
-- 
Heinrich Zille: Ognuno crede che l'altro sia come se stesso, 
dimenticando che al mondo esistono anche delle persone oneste.

 incolonnamenti...
Ah per la stampa non ci avevo pensato. E siccome devo farla bruono a 
sapersi :O)
Grazie.

 caption chiaramente
Allora, dimensionare i command in base al contenuto imho è sbagliato. E'
proprio sbagliato avere un command con scritto diverse cose, al limite lo
si dimensiona alla più grande e via.
La label ha l'autosize che dovrebbe bastare.
Ad ogni modo per listview e simili esiste la proprietà Form.TextWidth. In
un esempio ho visto che setta le prorietà della form come il controllo che
si intende modificare:
Dim saveFont As StdFont, saveScaleMode As Integer
With myControl
  Set saveFont = Control.Parent.Font
  Set Control.Parent.Font = Control.Font
  saveScaleMode = Control.Parent.ScaleMode
  Control.Parent.ScaleMode = vbTwips
  Larghezza=.Parent.TextWidth(.Text o .Caption ecc.)
  'Ripristina la form
  Set Control.Parent.Font = saveFont
  Control.Parent.ScaleMode = saveScaleMode
End With

 caption chiaramente
Allora, dimensionare i command in base al contenuto imho è sbagliato. E'
proprio sbagliato avere un command con scritto diverse cose, al limite lo
si dimensiona alla più grande e via.
La label ha l'autosize che dovrebbe bastare.
Ad ogni modo per listview e simili esiste la proprietà Form.TextWidth. In
un esempio ho visto che setta le prorietà della form come il controllo che
si intende modificare:
Dim saveFont As StdFont, saveScaleMode As Integer
With myControl
  Set saveFont = .Parent.Font
  Set .Parent.Font = .Font
  saveScaleMode = .Parent.ScaleMode
  .Parent.ScaleMode = vbTwips
  Larghezza=.Parent.TextWidth(.Text o .Caption ecc.)
  'Ripristina la form
  Set .Parent.Font = saveFont
  .Parent.ScaleMode = saveScaleMode
End With