Det är rätt enkelt...... Tack, men tanken var mer att den skulle "flyta" precis framför musen hela tiden... Går det att fixa? Tja..... Om man håller in space och rör på musen så ploppar det upp en massa knappar hela tiden... Jo, jag märkte det :) Dim JOX As Boolean Detta lilla spel tog strax under 10 minuter å göra... jag tror att det är typ liknande du menar eller?Sv: Knapp som undviker musen
Lägg in in commandbutton i en form...
och klistra in följande kod och kör programmet.
'=========================================
Option Explicit
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Command1.Left = Int(4500 * Rnd(1)) + 1
Command1.Top = Int(4500 * Rnd(1)) + 1
End Sub
Private Sub Form_Load()
Me.Width = 5000
Me.Height = 5000
Command1.Width = 500
Command1.Height = 500
End Sub
'=========================================
Det är eventet MouseMove som triggas då du för muspekaren över knappen.Hmm, lite mer:
Finns det nån som kanske kan lite ytligt förklara koden ovan? Jag ändrade t.ex 4500 till 1, 2 och 3, men då lade sig bara knappen i övre vänstra hörnet...
MVH /MolleSv: Hmm, lite mer:
Asså allt är möjligt.... KOden förklaras.
command1.left=500
detta sätter egenskapen left för kommandoknapp 1. Det innebär att dess vänstra kant kommer att befinna sig 500 twips (en twip är ca 1/567 cm alltså skitliten del, jag har för mig att det går ca 20 twips på en bildskärmspunkt, sk. pixel.)
Alltså kommer kommandoknapp 1 att sitta ca en centimeter från vänsterkanten.
command1.top=500
Likaså fast från ovankanten.
du angav 1 2 och 3 vilket betyder att knappen fastnade uppe i hörnet eftersom det går 20 twips på en pixel så kan du inte se den rörelsen.
Den andra delen av koden bestämmer ett slumptal så knappen hoppar slumpvis.
För att göra det du vill blir det lite mer komplicerat då man också måste hålla reda på åt vilket håll användaren rör musen.
Men generellt är det så att eventet mouse:move triggas (utlöses) då du för musen över en kontroll. Inparametrarna x och y, anger musens position.
Rör du musen åt höger skall du sätta command1.left =x+1
Rör du musen åt vänster skall du sätta command1.left=x-command1.width-1
Sedan måste du göra på liknande sätt för uppåt och neråt.
/Peterhvisar många
/HjortenSv: visar många
Kan någon hjälpa mig med att ta reda på musens koordinater? Så att den "flyter" framför... Snälla?
MVH /Mollekanske hjälper lite .....
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = "32" Then JOX = True Else JOX = True
End Sub
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If JOX = False Then
Randomize
Dim nLeft As Integer, nRight As Integer
nLeft = Int(2000 * Rnd(1)) + 1
nRight = Int(2000 * Rnd(1)) + 1
Command1.Move nLeft, nRight
End If
End Sub10 min...
klistra in i notepad och Döp om till Form1.frm sen är det bara att kompilera!
OBS! kom ihåg att inte bara klippa å klistra utan också försöka förstå koden! fråga om det är nått som du tycker är svårt!
/Mazen
----------------- Klipp och klistra Det här i Notepad --------------------
VERSION 5.00
Begin VB.Form Form1
BackColor = &H00FF0000&
BorderStyle = 0 'None
Caption = "Form1"
ClientHeight = 660
ClientLeft = 0
ClientTop = 0
ClientWidth = 1395
LinkTopic = "Form1"
ScaleHeight = 660
ScaleWidth = 1395
ShowInTaskbar = 0 'False
StartUpPosition = 2 'CenterScreen
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'****************************************
'* "Fånga kvadraten" (eller nått) *
'* försök att klicka i kvadraten för *
'* att "fånga" den *
'****************************************
'* Gjord av: Mazen Harake *
'* Exemplet är gjort för Pellesoft.nu *
'* Email: mazenh@hotmail.com *
'* Maila om du har frågor! *
'* NO SPAM!!! *
'****************************************
Dim intEscape As Integer 'Hur många pixlar den ska flytta sig åt gången
Private Sub Form_Click()
'Om användaren lyckas... beröm och avslut!
MsgBox "Gött jobbat!!!", vbInformation + vbOKOnly, "Stäng"
Unload Me
End Sub
Private Sub Form_Load()
Randomize Timer
Form1.BackColor = QBColor(Int(15 * Rnd(1)) + 1) 'Random färg på kvadraten
intEscape = 50
MsgBox "Klicka på rutan för att stänga den!" + vbCrLf + "Om du inte lyckas... använd CTRL+ALT+DELETE", vbInformation + vbOKOnly, "Hmmmm..."
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'X är musens X kordinater i formen, inte på skärmen!
'Y är då musens Y kordinater!
If (X > 0 And X < (Me.Width / 2)) Then 'Musen kommer in från höger
'Flytta kvadraten åt höger
Form1.Move Me.Left + intEscape, Me.Top
ElseIf (X > (Me.Width / 2) And X < Me.Width) Then 'Musen kommer in från vänster
'Flytta kvadraten åt vänster
Form1.Move Me.Left - intEscape, Me.Top
End If
If (Y > 0 And Y < (Me.Height / 2)) Then 'Musen kommer in uppifrån
'Flytta ner kvadraten
Form1.Move Me.Left, Me.Top + intEscape
ElseIf (Y > (Me.Height / 2) And Y < Me.Height) Then 'Musen kommer in nerifrån
'Flytta upp kvadraten
Form1.Move Me.Left, Me.Top - intEscape
End If
'om kvadraten hamnar utanför skärmen... centrera den för att börja om!
If Me.Left < 0 Then
Me.Move Int(Screen.Width / 2) - (Me.Width / 2), Int(Screen.Height / 2) - (Me.Height / 2)
ElseIf Me.Top < 0 Then
Me.Move Int(Screen.Width / 2) - (Me.Width / 2), Int(Screen.Height / 2) - (Me.Height / 2)
ElseIf Me.Top + Me.Height > Screen.Height Then
Me.Move Int(Screen.Width / 2) - (Me.Width / 2), Int(Screen.Height / 2) - (Me.Height / 2)
ElseIf Me.Left + Me.Width > Screen.Width Then
Me.Move Int(Screen.Width / 2) - (Me.Width / 2), Int(Screen.Height / 2) - (Me.Height / 2)
End If
'Om du vill ändra färg på kvadraten (typ Flasha den) så kommentera bort
'den nedre raden
'Form1.BackColor = QBColor(Int(15 * Rnd(1)) + 1)
End Sub