Newsgroup: it.comp.lang.visual-basic
Titolo: [? API] Disegnare poligoni

Ho la necessità di disegnare dei poligoni su di un grafico. Il problema è
che devo utilizzare una scala impostabile dall'utente (distanza in km). Le
api della gdi, accettano come parametri punti espressi in coordinate pixel
(è un long), quindi volendo disegnare un poligono nel punto x=10 km (con
scalewidth=20km) devo trasformare i km in pixel. Domande: come faccio a
sapere la larghezza dell'area client di una finestra? L'api gdi fornisce
delle funzioni per passare da coordinate logiche a quelle del contesto di
dispositivo il che implica di dover  lavorare solo con dei long: mi conviene
lasciar perdere il metodo scale e passare all'uso esclusivo delle API? VB,
quando l'utente imposta la sua bella scala,  implicitamente esegue una
conversione da coordinate logiche a quelle del dispositivo e della
inestra( picture o altro): quali api utilizza?
Ciao Marco



Che intendi con "funzioni per passare da coordinate logiche a quelle
del contesto di dispositivo")? La tua mail non mi è completamente
chiara.
In ogni caso sei sicuro di dover ricorrere a delle api? Utilizzando
semplicemente i parametri width ed height della form (o dell'area che
utilizzi per visualizzare i poligoni) con una proporzione da te
definita puoi visualizzare il tutto in funzione della grandezza della
form.
Un saluto,
	arKannone

L'API che cerchi é GetClientRect
Declare Function GetClientRect& Lib "user32" (ByVal hwnd As Long, lpRect As
_
RECT)
(Returns the size of the client rectangle for the specified window.)
Ciao,
Corrado

...

Grazie!
Hai realizzato per caso qualcosa di simile a quello che devo fare?

definita puoi visualizzare il tutto in funzione della grandezza della
Hai provato a disegnare (in coordinate definite dall'utente) un poligono che
non sia un rettangolo e poi colorarlo con qualche colore? Scoprirai i limiti
di VB. L'esempio del sito comune colora un poligono nel caso più semplice.
Ciao Marco

Non so se ti può servire, dal momento che non ho mai provato ad affrontare un problema simile, ma sul Sito Comune di
questo newsgroup:
www.murialdo.it/it_lang_vb
c'è un esempio che forse può aiutarti.
Non l'ho mai guardato poiché, come ti ho detto, non ho mai affrontato il problema, e probabilmente non centra nulla con
quello che vuoi tu, ma tanto vale darci un'occhiata...
Ciao,
Moreno
#sirri#@
tin.it
(togliete "#" dall'indirizzo)

di VB. L'esempio del sito comune colora un poligono nel caso più semplice.
Purtoppo temo che qui i limiti di VB siano ben noti a tutti, comunque
io non ho trovato grossi problemi a creare una funzione che disegna
dei poligoni (anche non rettangolari, ovviamente) su una scala
definita, usando semplicemente un ocx basato sul controllo linea con
poche aggiunte (scala, effetto di curvatura Bezier, un refresh più
avanzato). Anche se questo, evidentemente, ha utilità finché il numero
di poligoni da disegnare è limitato.
Purtroppo sul fatto di colorarli (più che altro in caso di
riempimento) non ho neppure provato.
Troppe volte capita di sentire la mancanza di funzioni adeguate, senza
dover ricorrere alle api (vedi il putpixel del Pascal, tanto per fare
un esempio).
Ciao,
	arKannone

Ho utilizzato le API per realizzare un analizzatore di forme d'onda, dovendo
fare parecchio scrolling/zooming e dovendo (ai tempi) dovere dare
prestazioni 'buone' anche su 386 ho dovuto spremere VB e utilizzare le API.
Mi é stato molto utile dal punto di vista didattico, ma non so se ora lo
rifarei. Ai tempi mi é stata fondamentale la lettura del libro di Petzold.
Il tempo che ho perso per cercare di capire dove si perdevano le risorse di
sistema...
Ciao
Corrado