Gebruik van pijltjes toetsen

Status
Niet open voor verdere reacties.

ludos

Gebruiker
Lid geworden
13 feb 2005
Berichten
25
Hallo,
Ik vrees dat er nu een moeilijke vraag gaat komen.
Ik zou in een VB6 programmaatje moeten kunnen controleren of men de pijltjestoetsen gebruikt. En zo ja dan moet het programma een handeling uitvoeren. Vb pijltje naar rechts dan moet een afbeelding naar rechts verschuiven enz...

Dus weet er iemand of je kan testen of deze toetsen gebruikt worden?

Groetjes en alvast bedankt voor het denkwerk.
Ludo S
 
Op zich is dat niet zo moeilijk, maar er kan zich wel een lastig probleem voordoen...

Maak eens een nieuw project met een formuliertje, en plaats daarop in het midden een Image (met naam 'Image1').
In het codevenster van het formulier plak je volgende code:
Code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
iX = Image1.Left
iY = Image1.Top
Select Case KeyCode
  Case 37
    iX = iX - 10
  Case 38
    iY = iY - 10
  Case 39
    iX = iX + 10
  Case 40
    iY = iY + 10
End Select
Image1.Left = iX
Image1.Top = iY
End Sub
Run dit even en duw op de pijltjestoetsen.
Je zal zien dat de image mooi verschuift in de aangegeven richting.
Ga dan terug naar ontwerpmodus en plaat een tekstvak bij op het formulier.
Test opnieuw.
Je zal zien dat het nu niet meer werkt...
Dat komt omdat nu de focus op het tekstvak ligt, en die dus ook de KeyDown ontvangt...
Je *zou* dit kunnen oplossen door een KeyDown-functie voor elke focusbare control op je form te maken, maar dat lijkt me nogal omslachtig!
Anderzijds weet ik niet of er een handigere methode voor bestaat.
 
Ja dat werkt maar...

Ja dat werkt maar zoals je zelf al aangeeft er mag dan niets anders op dat formulier staan.
Bestaat er niet zoiets als een setfocus commando om specifiek naar dat image te verwijzen?
Of weet er iemand nog een andere oplossing?

Alvast bedankt voor het zoekwerk.

Groetjes
Ludo S:thumb:
 
Het KeyDown-event wordt ontvangen door de control die de focus heeft.
Een image kan zelf niet de focus krijgen. Een formulier normaal gezien ook niet, tenzij er zich geen focusbare controls op bevinden.

Wat je dus *zou* kunnen doen, is de KeyDown van ELKE focusbare control gebruiken.

Plaats op het formulier zoals ik het hierboven beschreef nog eens een tekstvak (met naam Text1) en een combobox (met naam Combo1), en verander de code naar dit:
Code:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
  Verschuif KeyCode
End Sub

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
  Verschuif KeyCode
End Sub

Private Sub Verschuif(KeyCode As Integer)
  iX = Image1.Left
  iY = Image1.Top
  Select Case KeyCode
    Case 37
      iX = iX - 10
    Case 38
      iY = iY - 10
    Case 39
      iX = iX + 10
    Case 40
      iY = iY + 10
  End Select
  Image1.Left = iX
  Image1.Top = iY
End Sub
Het ZAL opnieuw werken werken, maar ik vind het nogal omslachtig omdat je voor elke focusbare control de KeyDown moet onderscheppen...

En inderdaad: misschien weet iemand anders een betere oplossing...
 
Vervolg aan mijn probleem.

Hallo J.
Dat werkt dus ook prima. Bestaat er ook de mogelijkheid dat ik meerdere figuren kan verplaatsen met mijn pijltjestoetsen. Ik bedoel niet samen. Dat heb ik al kunnen uitpuzzelen aan de hand van je code. Maar twee figuren die als je ze vb. aanklikt kan besturen via de pijltjestoetsen. Ik probeer namelijk een soort schuifpuzzel te maken. Het is bijna Sinterklaas hé.

Ik hoop dat ik niet teveel vraag je hebt mij al heel wat geholpen.:thumb: Ik zal de Sint vragen een extra groot pakje te laten leggen:)
Groetjes
Ludo S.
 
Goh... voor dat sinterklaas-geschenk zal ik een extra mijn best doen :D:D:D

Maak eens een nieuw formulier in een nieuw project, en plaats daar een aantal image-controls op. Geef elk van die image-controls volgende eigenschappen:
Appearance: 0 - Flat
BorderStyle: 1 - Fixed Single
Tag: puzzel

In het codevenster plak je volgende code:
Code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim h As Boolean, r As Integer
  Select Case KeyCode
    Case 37
      h = True
      r = -10
    Case 38
      h = False
      r = -10
    Case 39
      h = True
      r = 10
    Case 40
      h = False
      r = 10
  End Select
  Verschuif h, r
End Sub
Private Sub Verschuif(horizontaal As Boolean, richting As Integer)
  For Each ctrl In Me.Controls
    If ctrl.Tag = "puzzel" Then
      If ctrl.BorderStyle = 1 Then
        If horizontaal Then
          ctrl.Left = ctrl.Left + richting
        Else
          ctrl.Top = ctrl.Top + richting
        End If
      End If
    End If
  Next
End Sub
Private Sub SwapBorder(sWelke As String)
Dim i As Integer
  i = Me.Controls(sWelke).BorderStyle
  If i = 0 Then
    Me.Controls(sWelke).BorderStyle = 1
  Else
    Me.Controls(sWelke).BorderStyle = 0
  End If
End Sub
Private Sub Image1_Click()
  SwapBorder "Image1"
End Sub
Private Sub Image2_Click()
  SwapBorder "Image2"
End Sub
Private Sub Image3_Click()
  SwapBorder "Image3"
End Sub
Zorg er voor dat je voor elke image-control een sub hebt zoals de laatste 3 subs in deze code.

En runnen maar...

Je zal zien dat alle image-controls voorzien zijn van een dun zwart randje.
Klik op een image, en je zal zien dat het randje verdwijnt.
Klik er terug op en het randje verschijnt opnieuw.
Op die manier kan je dus een aantal image-controls 'selecteren'
Duw nu eens op de pijltjes-toetsen en je ziet dat enkel de geselecteerde image-controls bewegen in de aangegeven richting.

Je zal wel nog wat werk hebben om alles te combineren met de technieken uit de vorige posts, maar ik denk dat dat niet echt moeilijk zal zijn.

Als je er toch wat hulp bij nodig hebt, of als je iets niet begrijpt in de nieuwe code, laat het dan gerust weten... (Kwestie van sinterklaas gunstig te stemmen hé :D)
 
Bedankt

Zet je schoentje maar klaar....
Heel erg bedankt. Dit werkt mooi. Ik ga nu de code wat dieper bestuderen.
Prachtig dat je dit zo snel voor elkaar kan krijgen. Ik zal nog heel veel moeten studeren en oefenen.

:D

Ludo S.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan