Newsgroup: it.comp.lang.visual-basic
Titolo: Controllo "Arco" come Linea.Esiste qualcosa?

Ciao a tutti,
tra i controlli intrisechi di Vb c'e il controllo linea; questo controllo
crea un' oggetto linea nello spazio bidimensionale del form o altro
contenitore. Mi domando esiste qualcosa di simile che possa fare un oggetto
a forma di arco (magari con degli eventi) o qualche idea per farlo?
Grazie
            Paolo


Il metodo Circle (leggiti _bene_ l' help in linea) ti permette di disegnare cerchi, ellissi, archi,
settori,  ...
ciao, hal

 ha scritto nel messaggio
news:9bqj0l$ad6b6$1...@ID-56381.news.dfncis.de...

Questo è vero, però come posso eterminare il click del mouse su codesto
arco?
Mi spiego meglio:
sto cercando di fare un piccolo Cad semplice semplice che gestisca solo due
tipi di entità(arco,Linea).
L'oggetto linea (non il metodo), si avvicina molto a quello che avrei in
testa se avesse anche la gestione degli eventi: credo sia molto più facile
da gestire; per esempio trovare le entità su un database che lavora al di
sotto e fare delle modifiche all' oggetto stesso che si riflettono
immediatamente sulla visualizzazione.
E a differenza di un controllo tipo shape sarebbe interessata all' evento
solo la parte riguardante la circonferenza del cerchio o arco non il suo
interno.
Magari sto dicendo un mucchio di fesserie. Chiedo lumi.
Paolo

interno.
Ti fai un bell'ocx windowless, transparent che implementa le api grafiche,
così magari ti ritrovi qualcosa di meglio delle shapes che sono oscene (dopo
6 versioni di VB non c'è ancora il poligono a numero di lati variabili...)
Ciao

Ok, l' idea non è male.
Però, come faccio a far saper al programma  quando faccio click sopra un
arco o una linea (il pixel dell' arco o della linea dentro il controllo).
Ho visto che ci sono delle APi che possono stabilire se sei dentro o fuori
una regione, ma credo che non sia il caso mio; infatti non creo una entità
chiusa ma aperta.
Credo ci voglia un algoritmo per fare ciò, sicuramente qualche formula
matematica.....

Paolo grizzo ha scritto nel messaggio ...

Ah, tu il click lo vuoi proprio sulla riga... e sì, un pochino di matematica
analitica ci vuole.
Non dovrebbe essere niente di complesso.
Il problema è sperare che l'equazione che usi tu sia la stessa che usano in
M$, altrimenti qualche decimale potrebbe farti sbagliare il pixel...
Inizierei a chiedere a it.scienza.matematica la formula dell'ellissi (non me
la ricordo :P ), magari già spezzata nei due archi superiore e inferiore,
nella forma y = f(x) anche se non dovrebbe servire.
Prima ancora però controllerei che il colore del controllo nel punto (x;y)
clikkato è = al forecolor. Forse basta questo (verificare se funziona con il
controllo sopra ad un oggetto dello stesso colore della linea).
Ciao

 chiusa ma aperta.
Potresti gestire tutto con 2 region.
Considera il tuo controllo come un rettangolo diviso in due da un arco che
unisce i due angoli in basso. La parte alta č una region, quella bassa č
un'altra region.
Comunque la faccenda non č cosě semplice. Se vuoi utilizzare piů controlli
di questo tipo ti scontri con i problemi di sovrapposizione. Siccome il
controllo č sostanzialmente un rettangolo, quando ne hai due sovrapposti ti
trovi a gestire sempre il click su quello con Zorder maggiore, anche se
all'utente sembrerebbe di cliccare sull'arco posto sul controllo con Zorder
minore.
Non la vedo molto fattibile cosě. Forse č meglio che lasci perdere i
controlli e gestisci tutto con una collection di classi che si appoggino
sulla stessa picturebox. Comunque non č un lavoro da poco.
Ciao
*Roby*

tra i controlli intrisechi di Vb c'e il controllo linea; questo controllo
Avevo usato anni fa qualcosa di simile scritto in VB, ti assicuro che
la lentezza esagerata nel ridisegno lo rendeva inutilizzabile.
L'applicazione usava dei controlli "arco" che univano dei controlli
"forme varie" draggabili, spostando le varie forme si spostava di
conseguenza l'arco (ricalcolato in real time).
Bastavano una decina di archi per mettere in crisi un pentium 2.
Poi siamo passati alle API per fare lo stesso lavoro, lasciando
perdere gli ocx custom.
Bye
Luca

 analitica ci vuole.
Mi si pone un dubbio perň .
Quando cliccko rilevo sě il punto in cui si trova il mouse, ma per capire se
l' entitŕ che passa per quel punto č quella giusta tra altre dieci che ho
disegnato, l' unica cosa che mi pare fattibile č far calcolare l' algoritmo
su tutte le entitŕ registrate, magari su un database sotto l' interfaccia
utente ( o una Collection...) fino a quando non trovo quella che
corrisponde.
Ho paura perň, quando queste entitŕ aumentino, di appesantire troppo la
rierca.

 su tutte le entità registrate
Ognuna di queste "entità" potrebbe avere un array di coordinate. Trattandosi
di un arco, nel caso peggiore sarà grande quanto tutto lo schermo, diciamo
dovrebbe essere dimensionato sicuramente a meno di (LarghezzaInPixel +
AltezzaInPixel*2). quindi a 1024 te la cavi con un array di circa 2500
elementi di tipo PointApi. Una ventina di Kb, insomma.
Anche con 100 elementi contemporaneamente non dovresti avere grossi
problemi.
Per velocizzare i tempi di ricerca, per ognuno di queste "entità" salvati
anche le coordinate del rettangolo che le contiene, così la ricerca del
punto la fai solo nelle entità i cui rettangoli lo contengono.
Ciao
*Roby*

rierca.
Beh, ovviamente 1 arco = 1 controllo!
Il problema, come facevano notare, sorge su più controlli sovrapposti...
Ciao

Ok, sto provando a farlo.
Mi chiedo però come fanno a fare un controllo tipo il controllo linea, che
non è quadrato,ma è proprio una .....linea .
Capire come funziona , potrebbe aiutare a fare la stessa cosa con un ...arco
no??
                Paolo