Newsgroup: it.comp.lang.delphi
Titolo: Conversione tra tipi diversi

Buongiorno a tutti, e grazie per l'aiuto che mi darete ...
Ho 2 coordinate (una rappresentante la longitudine e una la latitudine di
tipo double), che posso tranquillamente trasformare in pixel, quindi di tipo
single.
Ho la necessita' di inserire queste due variabili in una di tipo TPoint, ma
non mi e' possibile perche' il tipo di dato non e' omogeneo. Come posso
fare?
Mi serve avere il tipo TPoint per poi utilizzare la Mouse_Event.
Grazie!
--------------------------------
Inviato via 
http://usenet.libero.it

 pixel, quindi di tipo single.
Se i dati sono di tipo single (cioč in virgola mobile) non possono esprimere
pixels... A meno che tu non riesca a spezzare un pixel! Ti serve un intero
quindi o fai un Round o un Trunc... per avere il TPoint usa la funzione
Point oppure dichiara una variabile di tipo TPoint e valorizzane i campi x e
y.
HTH,
--
Andrea /\/\agni
ICQ#: 174108000

 Point oppure dichiara una variabile di tipo TPoint e valorizzane i campi x
e
Forse non mi sono spiegato benissimo ... Io ho una mappa e ho la necessita'
di fare un click su un particolare punto di coordinate x e y. X e y li ho
espressi in double, oppure posso averli facilmente convertiti in tipo single
tramite una funzione di MapX. Mi serve quindi spostare il mouse sul punto
specificato e fare un click, e devo simulare queste azioni da programma.
Quindi uso la mouse_event, che in un esempio da me visto riceveva in input
le coordinate espresse in mickey. Queste le ricavava da un TPoint. Ora, il
mio problema e' trasformare le coordinate iniziali (double o single) in un
valore che possa essere assegnato alla TPoint, senza perdita d'informazione
(cosa che avviene con Round o Trunc). Oppure trovare un modo di muovere il
mouse senza usare la variabile TPoint.
Puoi aiutarmi? Grazie mille e scusa la lunghezza della spiegazione.


 d'informazione (cosa che avviene con Round o Trunc). Oppure trovare
In realta' hai perdita di informazione anche utilizzando un double,
visto che non puo' rappresentare correttamente i numeri reali (gli
interi, al contrario, non soffrono gli errori di arrotondamento). Decidi
la granularita' della mappa ed usala come unita' di misura (da
rappresentare come intero).
Il range del tipo longint in D e' di +/- 2,1 miliardi: se assegni 1
unita' di disegno = 1 cm hai circa 21 milioni di metri, cioe' 21 mila km
a disposizione.
Saluti
Paolo Arosio

 un modo di muovere il mouse senza usare la variabile TPoint.
Io farei cosě:
1) calcolati il punto in coordinate globali (dello schermo)
2) usa la SetCursorPos per posizionare il mouse
3) usa mouse_event o SendInput o spedisci messaggi, per simulare la
pressione del pulsante del mouse
Se č il punto 1 a crearti problemi, considera che ti possono essere molto
comode le funzioni ClientToScreen e ScreenToClient messe a disposizione
dalla form (o anche dal controllo che usi per la mappa...).
Ovviamente prima dovrai aver calcolato le coordinate relative del pixel
tramite una banale proporzione sulla tua mappa. Ricorda che usando Round e
Trunc, alla fine dei conti [cioč sui valori delle coordinate del pixel], non
hai alcuna perdita di informazione perchč il massimo ordine di precisione
che puoi ottenere č appunto il pixel. (al limite potresti voler usare Round
invece di Trunc)



Sei stato molto chiaro, grazie per i suggerimenti. Mi resta pero' ancora un
dubbio sulle coordinate relative che hai suggerito. Io ho la mappa che
misura 400x300, e la cartografia che e' al di sotto ha le coordinate
espresse in double. Cosa intendi per coordinate relative?
Per perdita di informazione intendevo dire che ho scritto il programma con
Round e Trunc, ma il click del mouse non avviene nel punto giusto, quindi
non ho l'effetto desiderato. Probabilmente arrotondando viene perso l'esatto
riferimento alle coordinate ....
Per quanto riguarda la ClientToScreen, la uso per passare dal TPoint ai
Mickey. Intendevi questo?
Grazie mille! Ciao!


dalla form (o anche dal controllo che usi per la mappa...).
Bisogna anche fare attenzione alla mappatura con le coordinate
assolute di SendInput (che se non ricordo male vanno sempre da 0 a
65535).  La proporzione è banale:
newx = (65536 * oldx)/screen.width
-- 
Andrea Laforgia
Open Delphi Manual
http://groups.yahoo.com/group/delphi_open_manual/

 ai Mickey. Intendevi questo?
No, i mickey sono unità di misura relative allo spostamento del mouse che
eviterei accuratamente in questi casi...
Io resterei ancorato alla SetCursorPos o cmq ai pixels. (Tra l'altro dubito
che un mickey valga meno di un pixel)
HTH


 conversioni.
Il problema sarebbe semplice, ma si complica: per esigenze di MapX (non so
se lo conosci), devo simulare un click sinistro del mouse in un punto di
coordinate X,Y (sono quelle famose che ho in double e posso facilmente
convertire in single oppure variant). Hai un suggerimento per farlo in
maniera semplice?
Grazie ancora molte per la tua competenza e precisione!


 suggerimento per farlo in maniera semplice?
MapX se non sbaglio visualizza delle mappe e consente di scrivere su un file
di log eventuali spostamenti... se non ricordo male l'aveva usato un mio
conoscente per una specie di simulazione animata...
Quindi mi sembra di capire che tu stai pilotando un programma esterno (cosa
che io non avevo capito, pensavo fosse tutto parte della tua
applicazione)... In tal caso secondo me hai le mani legate, a meno che MapX
esporti qualcosa come OLE o accetti messaggi standard (come fa per esempio
WinAmp)...
Ciao
