Oppure

Loading
15/04/09 14:52
ruggy94
Postato originariamente da Iohoilpotere:

penso che in base al principio di correttezza la dimensione della listbox possa cambiare. Ma ovviamente ci possono essere eccezioni.

Si ma, avendo visto con che tipo di file lavora, il numero di coordinate X dovrebbe essere uguale al numero di coordinate Y (anche perchè se non fosse così non potrebbe disegnare correttamente tutti i punti). Con questo ragionamento si potrebbe ridurre il codice ad un solo ciclo for, rendendo le cose più facili. Prima di scrivere del codice però aspetto che sia azz.ciccio a dirmi se ho ragione sul numero di elementi delle listbox
aaa
15/04/09 15:06
terminato e funziona, allego il link al programma funzionante.
Private Sub Command1_Click()
Dim j, g, pointX, pointY As Long
Dim CostDiv As Long
    Val (ListX)
    Val (ListY)
    CostDiv = 10 ' consiglio di diminuirla, o i punti (a meno che non si usino numeri a   '14-15 zeri) son tutti attaccati
    ScaleMode = 3
    DrawWidth = 2
    PSet (ScaleWidth, ScaleHeight / 2) ' questo mette un punto nero al bordo destro del 'form (non so a cosa ti serva ._.)
    For j = 1 To ListX.ListCount - 1 ' il ciclo
        pointX = ListX / CostDiv ' per una maggiore chiarezza opterei per moltiplicare...
        Picture1.PSet (pointX, pointX), vbRed ' posiziona il punto rosso (funziona)
        For g = 1 To ListY.ListCount - 1 ' il ciclo nel ciclo (dev'essere doloroso per 'una donna =P )
            pointY = ListY / CostDiv ' vedi nota su
            Picture1.PSet (pointY, pointY), vbRed ' posiziona il punto rosso (funziona)
            ListY.ListIndex = ListY.ListIndex + 1 ' passa alla voce successiva della 'listbox
        Next g
        ListX.ListIndex = ListX.ListIndex + 1 ' passa alla voce successiva della listbox
        ListY.ListIndex = 0 ' evita l'overflow quando ripete il ciclo
     Next j
    ListX.ListIndex = 0 ' seleziona la prima voce della listbox
    ListY.ListIndex = 0 ' vedu nota su
End Sub

Private Sub Form_Load()
    ListX.ListIndex = 0 ' seleziona la prima voce della listbox
    ListY.ListIndex = 0 ' vedu nota su
End Sub



15/04/09 15:13
Postato originariamente da ruggy94:

Postato originariamente da Iohoilpotere:

penso che in base al principio di correttezza la dimensione della listbox possa cambiare. Ma ovviamente ci possono essere eccezioni.

Si ma, avendo visto con che tipo di file lavora, il numero di coordinate X dovrebbe essere uguale al numero di coordinate Y (anche perchè se non fosse così non potrebbe disegnare correttamente tutti i punti). Con questo ragionamento si potrebbe ridurre il codice ad un solo ciclo for, rendendo le cose più facili. Prima di scrivere del codice però aspetto che sia azz.ciccio a dirmi se ho ragione sul numero di elementi delle listbox


tardi, va bhe, è pur sempre pratica :) comunque PENSO che per ogni coordinata X debba essere tracciato un punto in ogni Y (altrimenti non avrebbe usato due cicli annidati...).

Es:

X: 10, 20, 30, 40, 50
Y: 50, 60, 70, 80

debbano essere tracciati i punti (10;50) (10;60) (10;70) (10;80), (20;50) (20;60) (20;70) (20;80), (30;50) (30;60) (30;70) (30;80), (40;50) (40;60) (40;70) (40;80), (50;50) (50;60) (50;70) (50;80).


tenendo da parte la divisione per 10.000 che è ottima per lavorare con numeri enormi :) (non a caso ha dichiarato le variabili long :asd: ). ma in fase di debug lavorerei con numeri meno impegnativi :)

P.S: scusate il doppio post 8-|

EDIT: modificato l'esempio che l'avevo scritto di lunghezza uguale...
Ultima modifica effettuata da 15/04/09 15:42
15/04/09 17:29
azz.ciccio
grazie a tutti per l'aiuto, sto lavorando sul codice torno al piu' presto e rispondo a tutti
A.
aaa
15/04/09 17:39
azz.ciccio
Postato originariamente da Iohoilpotere:

terminato e funziona, allego il link al programma funzionante.



ciao, ti ringrazio per il codice, l'ho incollato e diciamo che funziona! pero' non e' il risultato desiderato inquanto il codice cicla i dati parecchie volte, e c'e' un'errore di base in cui sto' sbattendo pure io la testa ed e':
Val (ListX)
Val (ListY)

l'istruzione VAL serve a convertire una string in valore numerico, pero' ListX e' il nome della listbox e non il suo valore. e poi penso che sarebbe piu' indicato fare cosi':
dim xxx as string
dim pointX as long

xxx=listX.index
pointX = CInt(xxx)
ecc....

tornando al ciclo for ho notato (dovro' controllare meglio) per ogni valore letto dalla listX mi legge tutti i valori della listY quindi in totale mi ritrovo con:
se listx ha 10 valori e listy 10 valori il ciclo for conta per 1000 volte...
ogni commento e' benvenuto.
A:k:
aaa
15/04/09 17:47
azz.ciccio
Postato originariamente da GrG:

ho notato un errore nel codice anche se penso che correggendolo comunque non faccia ciò che vuoi tu...
     For j = 0 To listX.ListIndex = 0
      pointX = listX / CostDiv
       Picture1.PSet (pointX, pointX), vbRed
      
      
X       For g = 0 To ListY.ListCount = 0
        pointY = ListY / CostDiv
         Picture1.PSet (pointY, pointY), vbRed
      
       Next g 


alla riga contrassegnata dalla X se vedi c'è ListY.ListCount = 0, mentre alla 1° riga c'è listX.ListIndex = 0

Di + precisamente che errore si manifesta e cosa vuoi fare...


si, ciao, in effetti l'errore che mi fai notare non e' il problema del mancato funzionamento.
in sintesi,. quello che voglio fare e' un programma per gestire un cnc per forare i pcb
impresa ardua??? no! e' piu' semplice di quanto pensassi....:k:
aaa
15/04/09 17:52
azz.ciccio
Postato originariamente da Iohoilpotere:
CostDiv = 10 ' consiglio di diminuirla, o i punti (a meno che non si usino numeri a '14-15 zeri) son tutti attaccati


no, perche' la picturebox e' settata in pollici. quindi un valore di 24200/10000 =2,42 percui ci siamo con i calcoli terorici (mado' che paroloni....)

PSet (ScaleWidth, ScaleHeight / 2) ' questo mette un punto nero al bordo destro del 'form (non so a cosa ti serva ._.)



ma'... in realta era un tentativo di posizionare la scrittura di tutti i punti al centro della picturbox. ma ci pensero' in secondo momento.
A.
aaa
15/04/09 17:55
ruggy94
Postato originariamente da azz.ciccio:
il ciclo for conta per 1000 volte...
ogni commento e' benvenuto.
A:k:

Se ogni commento è benvenuto...:D
Se non sbaglio 10*10=100 e non 1000 quindi come dici tu "il ciclo for conta per 100 volte", e non per 1000 :D
aaa