Avatar billede danielhep Nybegynder
14. januar 2002 - 13:01 Der er 13 kommentarer og
1 løsning

Drag-Circle

Man kunne lave en cirkel sådan her:
Picture1.Circle (X, Y), radius, RGB(red, green, blue)

Men hva nu hvis man godt vil kunne forme størelse med musen.  I kender godt fuctionen, det er den sammen som i paint.  Her der trykker man og så kommer der bare en firkant....
Avatar billede tjacob Juniormester
14. januar 2002 - 13:32 #1
Her er en metode:
(Den kan finpudses med f.eks. gentegninger osv)

Erklær to globale variable i et modul eller øverst i en form:
Public stX as Long, stY as Long

I Mouse_Down eventet indsættes:
stX = X
stY = Y

I Mouse_Up eventet indsættes:
Dim lRadius as Long
lRadius = Int(Sqr(((X - stX) ^ 2) + ((Y - stY) ^ 2)))
Circle (stX, stY), lRadius, RGB(255, 0, 0)

Nu kan du tegne en cirkel ved at trykke venstre museknap ned, -trække musen et stykke, og så slippe museknappen igen.

Dette vil tegne en cirkel på formen, med startpunkt, hvor du trykkede museknappen ned, og med periferi hvor du slipper museknappen igen.

MVH tjacob
Avatar billede tjacob Juniormester
14. januar 2002 - 13:52 #2
Du kan også lægge følgende i Mouse_Move eventet:

    Dim iRadius As Integer
   
    If Button = 1 Then
        Form1.Cls
        iRadius = Int(Sqr(((X - stX) ^ 2) + ((Y - stY) ^ 2)))
        Circle (stX, stY), iRadius, RGB(255, 0, 0)
    End If

Så vil cirklen hele tiden blive gentegnet.
Avatar billede danielhep Nybegynder
14. januar 2002 - 15:03 #3
Ja det kan jeg godt se..Men man kan ikke se hvor stor cirklen er før at man slipper musen....Hvad kan man gøre der?
Avatar billede tjacob Juniormester
14. januar 2002 - 15:06 #4
Hvis du bruger Mouse_Move koden kan du da se cirklen hele tiden?
Avatar billede danielhep Nybegynder
14. januar 2002 - 15:38 #5
Hvorfor bliver cirklen ikke på picturebox1 når man vil tegne en ny???
Avatar billede tjacob Juniormester
14. januar 2002 - 16:01 #6
Det er pga Cls kommandoen, der sletter hele formen/pictureboxen, inden den gentegner.

Den er nødt til at være der, ellers bliver der tegnet en cirkel, hver gang Mouse_Move-eventet fyres af (op til 20 gange/sek).
(Du kan jo prøve at fjerne Cls kommandoen og se)


Man kunne omgå dette ved kun at slette den cirkel, der blev tegnet i sidste Mouse_Move-event.
(i modsætning til hele formen).
Men så skal der gemmes nogle andre globale variable, der kan holde startpkt + radius i den sidst tegnede cirkel. Denne cirkel skal så gentegnes med baggrundsfarven (-slettes) umiddelbart før den aktuelle cirkel tegnes.

mvh tjacob
Avatar billede tjacob Juniormester
14. januar 2002 - 16:12 #7
Sådan her:
Erklær en global variabel mere:
sRadius as Long

i Mouse_Move:
    Dim iRadius As Integer
   
    If Button = 1 Then
        iRadius = Int(Sqr(((X - stX) ^ 2) + ((Y - stY) ^ 2)))
        Picture1.Circle (stX, stY), Sra, &H8000000F
        Picture1.Circle (stX, stY), iRadius, RGB(255, 0, 0)
        Sra = iRadius
    End If

Her har jeg sat farven til min PictureBox\'s BackColor. Det er muligt du skal ændre den.

/tjacob
Avatar billede tjacob Juniormester
14. januar 2002 - 16:13 #8
Fejl: sRa erstattes med sRadius
Avatar billede danielhep Nybegynder
14. januar 2002 - 16:22 #9
Der er bare en lille ting...Når jeg vil tegne en cirkel så kommer der også en hel masse andre som er mindre end den støreste....
Avatar billede tjacob Juniormester
14. januar 2002 - 16:36 #10
Har du sat den første cirkels farve lig med din Form/Pictureboxs BackColor?
Det er den der \"sletter\" den sidste cirkel.
Avatar billede danielhep Nybegynder
14. januar 2002 - 16:50 #11
Den sidste cirkel....he he
Jeg tror at der er ca 30 men ok...
Avatar billede tjacob Juniormester
14. januar 2002 - 16:52 #12
Ja, der 30 når de ikke bliver slettet, men hvis den første cirkel bliver tegnet korrekt (altså i backcolor), så vil der hele tiden kun være en.
Avatar billede tjacob Juniormester
14. januar 2002 - 17:31 #13
Fejlen kan også være at du har den forkerte radius.
Det SKAl være den radius du gemmer i den globale variabel i sidste linie før end if.
Avatar billede danielhep Nybegynder
16. januar 2002 - 23:12 #14
Hey sorry, men jeg får nok ikke så meget tid lige her for tiden, så jeg prøver at komme op med noget brugbart i næste uge.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester