Avatar billede bierchen Nybegynder
08. september 2003 - 11:04 Der er 5 kommentarer og
1 løsning

Hvordan trækker jeg en firkant efter musen

Ligesom i VB når man Skal tegne en knap, og starter med at trykke museknappen ned og trækker så derefter musen skråt ned til højre. Så tegner VB en firkant der indikerer hvor man placere knappen.

Hvordan kan jeg lave en funktion som tegner denne firkant ?
Avatar billede martin_moth Mester
08. september 2003 - 11:19 #1
Det kan du ved at gemme curserens position (startpunktet) der hvor du klikker (gemmes altså i en MouseDown-event eller lignende), og derefter kalde en procedure der optegner et rektangel mellem den aktuelle curserposition og startpunktet. Denne procedure må nødvendigvis kaldes ved en MouseMove event (eller lignende) - altså kaldes hver gang curseren ændrer position. Det vigtige er så at sørge får at få slettet tidligere streger inden du tegner de nye. Faktisk en hel lille sjov opgave som jeg gerne ville lave selv, hvis jeg havde tid.

Der er muligvis noget API der kan gøre det, hvis du ikke har mod på at programmere det selv...
Avatar billede bierchen Nybegynder
08. september 2003 - 11:31 #2
Er der nogen der kender denne API ?

Ellers må jeg igang med det på den hårde måde ! ;)
Avatar billede martin_moth Mester
08. september 2003 - 11:48 #3
prøv på www.allapi.net

Mon ikke det er hurtigere bare at skrive den selv? Det er i hvert fald sjovere, hvis man synes den slags er underholdende ;o)
Avatar billede venne Nybegynder
08. september 2003 - 11:50 #4
MS har en artikel om emnet her: http://support.microsoft.com/default.aspx?scid=kb;en-us;71488

Koden er lidt forældet, men jeg har lige shinet den lidt op, dette virker hos mig:


Option Explicit

Dim DrawBox As Integer  '*Boolean-whether drawing Box or Line
Dim OldX As Single, OldY As Single, StartX As Single, StartY As Single  '* Mouse locations
Dim SavedMode As Integer
Dim StartEvent As Boolean

Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  '* Store the initial start of the line to draw.
  StartX = X
  StartY = Y

  '* Make the last location equal the starting location
  OldX = StartX
  OldY = StartY
End Sub

Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  '* If the button is depressed then...
  If Button Then
      '* Erase the previous line.
      Call DrawLine(StartX, StartY, OldX, OldY)

      '* Draw the new line.
      Call DrawLine(StartX, StartY, X, Y)

      '* Save the coordinates for the next call.
      OldX = X
      OldY = Y
  End If
End Sub

Sub DrawLine(X1 As Single, Y1 As Single, X2 As Single, Y2 As Single)
  '* Save the current mode so that you can reset it on
  '* exit from this sub routine. Not needed in the sample
  '* but would need it if you are not sure what the
  '* DrawMode was on entry to this procedure.
  SavedMode = DrawMode

  '* Set to XOR
  DrawMode = vbInvert

  '*Draw a box or line
  If DrawBox Then
      Line (X1, Y1)-(X2, Y2), , B
  Else
      Line (X1, Y1)-(X2, Y2)
  End If

  '* Reset the DrawMode
  DrawMode = SavedMode%
End Sub

Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  '* Stop drawing lines/boxes.
  StartEvent = False
End Sub

Sub Command2_Click()
  '* Boolean value to determine whether to draw a line or box.
  DrawBox = True
End Sub

Sub Command1_Click()
  '* Boolean value to determine whether to draw a line or box.
  DrawBox = False
End Sub

Sub Command3_Click()
  '* Create a dotted line
  Form1.DrawStyle = vbDot
End Sub

Sub Command4_Click()
  '* Create a solid line.
  Form1.DrawStyle = vbSolid
End Sub
Avatar billede martin_moth Mester
08. september 2003 - 11:54 #5
Det er snyd - MicroSoft har kopieret min ide fuldstændigt!!!

;o)
Avatar billede bierchen Nybegynder
08. september 2003 - 13:18 #6
Det virker 100 % !! Mange Tak for hjælpen til jer begge !
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