/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Events på en Line
Fra : Jens Vestergaard


Dato : 10-10-03 14:34

Jep, jeg ved godt, at en Line control ikke har events - men hvordan
simulerer jeg det?

Jeg har en række Line controls på kryds og tværs i en PictureBox, og jeg vil
gerne kunne fange en MouseDown og dermed 'aktivere' den Line, der klikkes
på - eller tættest på.

Man ku' vel bruge x, y i forhold til alle liniernes x1/2- og y1/2-punkter,
men jeg er ikke matematiker nok til at kunne lave en elegant algoritme til
det...

Altså:

Sub Picture1.MouseDown(Button As .... ..... ....)
Dim x as long
For x = 0 To UBound(Linje)
[pseudo: If X og Y ligger på Linje(x) Then]
Linje(x).BorderColor = vbRed
Exit For
End If
Next
End Sub

Eller en anden genial løsning. Jeg har overvejet skrive en UserControl som
erstatning for Line, men så får jeg uden tvivl vrøvl med ZOrder, eftersom
linierne går meget på skrå, og UserControl'ens samlede 'flade' derfor bliver
meget stor.

--
mvh
Jens Vestergaard (mailadr i dette indlæg er ikke gyldig!)
www.railsoft.dk
Døgnets jernbanenyheder: www.railsoft.dk/medier.asp



 
 
wamingo (15-10-2003)
Kommentar
Fra : wamingo


Dato : 15-10-03 15:42

> Jeg har en række Line controls på kryds og tværs i en PictureBox, og jeg
vil
> gerne kunne fange en MouseDown og dermed 'aktivere' den Line, der klikkes
> på - eller tættest på.
>
> Man ku' vel bruge x, y i forhold til alle liniernes x1/2- og y1/2-punkter,
> men jeg er ikke matematiker nok til at kunne lave en elegant algoritme til
> det...
>
> Altså:
>
> Sub Picture1.MouseDown(Button As .... ..... ....)
> Dim x as long
> For x = 0 To UBound(Linje)
> [pseudo: If X og Y ligger på Linje(x) Then]
> Linje(x).BorderColor = vbRed
> Exit For
> End If
> Next
> End Sub

tja, måske kan det her hjælpe...
Først kan du finde distancen mellem et punkt (eg. mouse coordinate) til
linjerne og derefter finde og vælge den linje med den mindste distance til
punktet...

for at finde distancen...
hvis du har punktet P = (x1,y1) og linjen L: y = ax + b så er:
dist(P,L) = (ax1 + b - y1) / sqrt(a^2 + 1)
lig med distancen mellem punktet og linjen.

hvis du ikke ved hvad a og b er...
a = (y2-y1) / (x2-x1)
b = y2 - ax2

hver opmærksom på at y1,y2 og x1,x2 her er de to koordinater på linjen mens
i dist(P,L) er x1,y1 punktet P.

du kan sagtens proppe det hele sammen så det står på en enkelt linje hvis du
vil...




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste