Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Liikkuminen 2

Sivun loppuun

masa [07.10.2002 15:41:49]

#

Kieli VB
Ja muuten tuli vielä yksi kysymys mieleen jonka koodia olen yrittänyt etsiä.Se on sellainen että jos painaa jotain kohtaa formilla niin olisiko mahdollista että ukko1 liikkuu painettuun kohtaan eikä ilmesty sinne. Ei siis tätä koodia: ukko1.move x,y.
Please Tell me

Vilikki [07.10.2002 16:08:05]

#

lainaus:

...ukko1 liikkuu painettuun kohtaan eikä ilmesty sinne...

Kerro vähän selkeämmin. Siis jos hiirellä painetaan jotain kohtaa formissa, vai? Ei herranjestas...

masa [07.10.2002 16:35:26]

#

Kyllä,se liikkuu sinne eikä ilmesty

mikko [07.10.2002 16:57:50]

#

Varmaankin sen ukon pitäs liukua sinne?

trinit [07.10.2002 16:57:56]

#

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ukko1.Move X, Y
    ukko1.Visible = False
End Sub

Gevil [07.10.2002 17:16:40]

#

Hän ilmeisesti haluaisi, että algoritmissa käytetään left ja top arvoja moven sijasta. Siis Ukko1.left=ukko1.left+1 tyyliin..

'Olettaen että X ja  Y
Private Sub Timer1_Timer()
If Image1.Left < 3000 Then
    Image1.Left = Image1.Left + 100
ElseIf Image1.Left > 3000 Then
    Image1.Left = Image1.Left - 100
Else
End If

If Image1.Top < 3000 Then
    Image1.Top = Image1.Top + 100
ElseIf Image1.Top > 3000 Then
    Image1.Top = Image1.Top - 100
Else
End If
End Sub

Gevil [07.10.2002 17:17:21]

#

Hän ilmeisesti haluaisi, että algoritmissa käytetään left ja top arvoja moven sijasta. Siis Ukko1.left=ukko1.left+1 tyyliin..

'X=3000 Y=3000 tässä esimerkissä..

Private Sub Timer1_Timer()
If Image1.Left < 3000 Then
    Image1.Left = Image1.Left + 100
ElseIf Image1.Left > 3000 Then
    Image1.Left = Image1.Left - 100
Else
End If

If Image1.Top < 3000 Then
    Image1.Top = Image1.Top + 100
ElseIf Image1.Top > 3000 Then
    Image1.Top = Image1.Top - 100
Else
End If
End Sub

en mee takuuseen toimivuudesta, pitäisi toimia.

Gevil [07.10.2002 17:18:29]

#

Iskin sitten vahingossa tabulaattoria ja entteriä.. niin näköjään kerkes lähettää vaikka iskin stoppia.. no ei maha mitään enää..

Gevil [07.10.2002 17:21:24]

#

Joo tajusin jus että toihan bugaa jos se kuvan lähtöpaikka ei ole sadalla jaollinen..

Antti [08.10.2002 17:37:19]

#

Masa: Laitan sulle huomenaamulla mallin miten se pitää tehdä... tein jo osaksi mutta en ehdi tänään tehdä loppuun.

Antti [09.10.2002 11:07:34]

#

No niin
Lomakkelle kaksi objektia: Ukko1 ja Ukko2 (pictureboxia)
Molempien enabled-arvon tulee olla false tai lomakkeen mousedown-eventti ei käynnisty

oKohde on liikutettavan objektin muuttuja, jota muutetaan asettamalla sen arvoksi liikutettavan objektin nimi Set komennolla. (esim. Set oKohde = Me.Ukko2)

Lomakkeelle seuraava koodi ja sen pitäisi toimia:

Dim oKohde As Object
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 65 Then ' Vaihtaa A-kirjaimella
        Select Case oKohde.Name ' Valitsee liikutettavan kohteen objektin nimen perusteella
            Case "Ukko1"
                Set oKohde = Me.Ukko2
            Case "Ukko2"
                Set oKohde = Me.Ukko1
        End Select
    End If
End Sub

Private Sub Form_Load()
    Set oKohde = Ukko1
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim imValX As Integer ' integer move value X = imValX
    Dim imValY As Integer ' integer move value Y = imValY
    Dim isValX As Integer ' integer source value X = isValX
    Dim isValY As Integer ' integer source value Y = isValY
    ' Tasaa kohde kymmenellä jaolliseksi
        isValX = Int(X / 10) * 10
        isValY = Int(Y / 10) * 10
    ' Tutki suunta mihin kohdetta liikutetaan
    If Y >= oKohde.Top And isValX >= oKohde.Left Then
        imValX = 10
        imValY = 10
    ElseIf isValY <= oKohde.Top And isValX >= oKohde.Left Then
        imValX = 10
        imValY = -10
    ElseIf isValY >= oKohde.Top And isValX <= oKohde.Left Then
        imValX = -10
        imValY = 10
    ElseIf isValY <= oKohde.Top And isValX <= oKohde.Left Then
        imValX = -10
        imValY = -10
    End If

    Do While oKohde.Top <> isValY Or oKohde.Left <> isValX
        If oKohde.Top <> isValY Then oKohde.Top = oKohde.Top + imValY
        If oKohde.Left <> isValX Then oKohde.Left = oKohde.Left + imValX
        DoEvents
    Loop

End Sub

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta