Newsgroup: it.comp.lang.visual-basic
Titolo: Valore proprieta' .TOP superiore a 33000 ??? Possibile ???

Salve, sono nuovo di qui!
Faccio il programmatore VB6... non troppo eperto...
Avrei un problemino che magari avete gia' risolto!
Il programma che sto sviluppando ha bisogno di creare
dinamicamente textbox in base a dati pescati da un DB.
Il fatto e' che allontanandosi oltre i 33000 twip dal
top del contenitore; cioe' volendo assegnare alla
proprieta' TOP del textbox un valore tipo 33000,
viene dato un errore di overflow in quanto il
tipo della proprieta' TOP dovrebbe essere Single
(anche se a me pare Integer)...
Non e' che si riesce ad assegnare il tipo Long
alla proprieta' TOP, o usare qualche altro trucco?
Forse si risolve il problema passando dai twip a
pixel o mm, per esempio, ma preferirei evitare...
Grazie in anticipo!
Ciao
Hiho (il verso del somaro ;) )

(anche se a me pare Integer)...
Ho appena provato assegnando 100000 come valore e non ha fatto una
piega. Qual e' il contenitore della textbox?
-- 
ciao, un hal di passaggio

 
E' una picturebox....
A me fa errore 6 - overflow
Grazie per la prova!
Hiho

A me fa errore 6 - overflow
Funziona anche con picturebox e frame. Sei sicuro di non passare un
numeraccio? Altrimenti l'errore potrebbe essere un altro.


 A me fa errore 6 - overflow
Mi rispondo da solo...
assegnandolo a mano non fa una piega neppure a me....
Usando il programma a runtime con la formula
         .Top = Y + i * d
dove
  Y e' Double
  i e' Integer
  d e' una costante
Boh ?!?
Hiho

  d e' una costante
Costante di che tipo?
Comunque il programma fa qualche casino nell'operazione.
Il seguente codice funziona:
Private Sub Form_Load()
    Dim Y As Double
    Dim i As Integer
    Const d As Integer = 10
 
        Y = 1000
        i = 100
 
    Text1.Top = Y + i * d
End Sub
Prova eventualmente a specificare la conversione di tipo in modo
esplicito, cosi':
	Text1.Top = CSng(Y) + CSng(i * d)


 	Text1.Top = CSng(Y) + CSng(i * d)
Grazie mille!!
Mi si bloccava con questi valori
Y = 600
i = 82
d = 400
ora con la funzione di conversione di tipo va, il problema,
a quanto pare era la costante!!
         .Top = Y + i * CSng(d)
e finalmente viene .Top = 33400
la cosa strana e' che comunque, con i < 82 non mi ha mai dato problemi,
forse il calcolo parziale i * d veniva immagazzinato in una variabile
integer (essendo prodotto tra due integer) e quindi 82+400 sforando
il tetto degli integer creava l'errore.
A rigrazie mille!!
Ti devo una birra!
Hiho

 il tetto degli integer creava l'errore.
esatto: le operazioni tra due variabili di uno stesso tipo, produce un 
risultato... di che tipo? :-)
Usa sempre conversioni esplicite e vai tranquillo...
Ciao,
Moreno
Inviato da 
www.mynewsgate.net

 Usa sempre conversioni esplicite e vai tranquillo...
Come tempi e' meglio una conversione di tipo esplicito,
o magari definire una delle due variabili come Long e
lasciar fare al programma ?
Comunque, alla fine della storia, mi sa che devo
egualmente fare una conversione di scala da twip a
millimetri perche' il picturebox viene spostato con
scrollbar e il valore della proprieta' MAX della
scrollbar e' 32767, quindi, all'aumentare delle
dimensioni della picturebox, non mi aumenta la
relativa dimensione dello scrollbar...
Mah....
Grazie!
Hiho

lasciar fare al programma ?
Non e' questione di tempi, ma di *predicibilita'* del risultato,
percio' applica *sempre* il suggerimento di Moreno.


 percio' applica *sempre* il suggerimento di Moreno.
Ricevuto...
Effettivamente e' sempre meglio stare dalla parte dei bottoni...
Ancora grazie.
Hiho

 scrollbar e' 32767
Esistono anche operatori aritmetici come moltiplicazione e divisione :)
Non credo che sposterai mai l'oggetto con una scrollbar un millimetro 
alla volta...
Ciao
-- 
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 alla volta...
No, ma se la mia riga e' 300twip (circa 5 mm) la sposto a interi
di 300twip o (5 mm).
Comunque, visto che indipendentemente dall'unita' di misura usata
la proprieta' MAX e' 32787, ora ho ben 32 metri e mezzo di margine!! ;)
Forse pero' potevano bastarmi anche 32787 pixel :-P
Hiho

 Forse pero' potevano bastarmi anche 32787 pixel :-P
Non fidarti però dei twips: possono variare da PC a PC anche di parecchio.
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net