Newsgroup: it.comp.lang.visual-basic
Titolo: Come sapere le coordinate assolute di un controllo?

Ho la necessità di spare le coordinate assolute di un controllo
rispetto allo schermo, pro provato con getactivewindow che
funziona benessimo, ma non tanto se il controllo è dentro un
altro tipo pictur, mi potete aiutare?
Ciao Enzo
www.scozzaro.it

 ha scritto
| Ho la necessità di spare le coordinate assolute di un controllo
| rispetto allo schermo, pro provato con getactivewindow che
| funziona benessimo, ma non tanto se il controllo è dentro un
| altro tipo pictur, mi potete aiutare?
form.left + control.left
form.top + control.top
Fai attenzione alla conversione di unità di misura... questi qui sopra, se non li hai modificati,
vengono espressi in twipsperpixel

 ha scritto
| | ma non tanto se il controllo è dentro un
| | altro tipo pictur, mi potete aiutare?
form.left + container.left + control.left

 altro tipo pictur, mi potete aiutare?
Prova a usare l'API CLientToScreen.
Declare Function ClientToScreen Lib "user32" Alias "ClientToScreen" (ByVal
hwnd As Long, lpPoint As POINTAPI) As Long
Gli passi l'handle del tuo controllo, e lui ti ritorna in P.x e P.y le
coordinate del suo angolo alto a sinistra rispetto allo schermo.
Ciao
*Roby*

In quale unità di misura sono restituiti i dati?
Ciao e grazie di tutto
www.scozzaro.it

In pratica
    ClientToScreen t.hwnd, pt
    frmTTG.Move pt.x, pt.y
funziona ma non esattamente in quanto questo valore è
espresso in xxxx perciò la finestra non spunta nel punto
dovè il controllo mi puoi aiutare?
Ciao Enzo
www.scozzaro.it

 dovè il controllo mi puoi aiutare?
Le api funzionano in pixel, VB in twips, a meno che non imposti Scalemode =
vbPixels (per le coordinate dei form anche se ScaleMode = vbPixels).
Ciao

in pratica come posso fare per convertire
i pixel in twips
Ciao Enzo

 i pixel in twips
ci sono 2 properties nell'oggetto Screen ( e anche Printer)
Screen.TwipsPerPixelX
Screen.TwipsPerPixelY
a questo punto e' una semplice moltiplicazione/divisione
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 ha scritto nel messaggio
news:9uqs2q$av8$2...@newsreader.mailgate.org...


 ha scritto nel messaggio
news:9uqupb$afce2$1...@ID-98635.news.dfncis.de...


 in 1 pixel ci sono 15 twips.
I dubbi che hai espresso sul messaggio successivo sono legittimi.
In effetti se usi i caratteri grandi i TwipsPerPixel diventano 12. Secondo
Microsoft, potrebbe cambiare il settaggio  in questione anche su risoluzioni
video particolari, anche se personalmente non ho ancora avuto il modo di
sperimentarlo.
Insomma, come dice Luca, è meglio usare Screen.TwipsPerPixelX e
Screen.TwipsPerPixelY.
Comunque se ti consola, anche Microsoft si è accorta che i Twips non sono
una così grande invenzione, e su .NET li ha abbandonati, riconvertendosi ai
Pixel. A pensare a quanto tempo macchina viene sprecato inutilmente per
l'utilizzo dei Twips mi vengono i nervi. Fai la somma di tutti i programmi
al mondo che chiamano la TwipsPerPixelX e immaginati lo spreco.
M$ deve essersene accorta, ed ha cercato di velocizzarne l'uso, evitando di
chiamare l'Api SystemParametersInfo ad ogni richiesta, ma così facendo ha
inserito un baco per cui se durante l'utilizzo del programma cambi
risoluzione Screen.Width e Screen.Height non se ne accorgono.
Un' altra scelta progettuale che mi fa innervosire è la clausola NoMatch.
Praticamente tutti i programmi che ho visto, la utilizzano con un Not
davanti.
Ma dico io, ci voleva molto a fare una clausola Match e a far risparmiare un
operazione logica di negazione a mezzo mondo?
Ciao
*Roby*
P.S.
Questo thread mi ha proprio dato soddisfazione.
Io ho detto una cosa, Zanna l'ha chiarita e Luca l'ha completata. Questo sì
che è lo spirito di Usenet. :-)