PictureBox wird nicht neu gezeichnet

  • VB6

    PictureBox wird nicht neu gezeichnet

    Also... Hallo nochmal.
    Und wieder komme ich mit einem Anfänger-Problem.

    Screenshot der orm
    pokesturm.tc-central.de/images/posts/vb_paradise1.png

    Jede figimg, figmask und bgimg ist auf Visible=False
    und AutoRedrwa=True, picWorld ist auch auf
    True bei AutoRedraw.
    PreviewKey ist bei der Form auch auf True.

    Screenshot zur Laufzeit
    pokesturm.tc-central.de/images/posts/vb_paradise2.png

    Code

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    3. Private Const SRCCOPY = &HCC0020
    4. Private Const SRCAND = &H8800C6
    5. Private Const SRCPAINT = &HEE0086
    6. Dim hRes As Long
    7. 'Figure - Position, Blickrichtung, Überschritt aus der Mitte
    8. Dim FigureLeft, FigureTop, FigureShow, FigureOsTop, FigureOsLeft As Integer
    9. 'Speichert die Tiles
    10. Dim Fields(1 To 150, 1 To 150) As Integer
    11. 'Zum Zwischenspeichern für die Schleifen
    12. Dim y As Integer
    13. Dim x As Integer
    14. Dim yT As Integer
    15. Dim xT As Integer
    16. Private Sub Form_Load()
    17. 'Schrittfelder initialisieren [Werden später vom Server abgerufen]
    18. For y = 1 To 150 Step 1
    19. For x = 1 To 150 Step 1
    20. Fields(y, x) = 1
    21. Next
    22. Next
    23. Fields(5, 5) = 2
    24. 'Position der Charaktere inizialisieren [Wird später vom Server abgerufen]
    25. FigureTop = 2
    26. FigureLeft = 8
    27. FigureShow = 10
    28. FigureOsTop = 0
    29. FigureOsLeft = 0
    30. Redraw
    31. End Sub
    32. Private Sub Redraw()
    33. 'Schrittfelder neu setzen
    34. For y = 1 To 9 Step 1
    35. For x = 1 To 15 Step 1
    36. yT = FigureTop - 5 + y
    37. xT = FigureLeft - 8 + x
    38. If yT < 1 Or xT > 150 Then
    39. hRes = BitBlt(picWorld.hDC, (x - 1) * 14, (y - 1) * 15, 14, 15, bgimg(0).hDC, 0, 0, SRCCOPY)
    40. Else
    41. hRes = BitBlt(picWorld.hDC, (x - 1) * 14, (y - 1) * 15, 14, 15, bgimg(Fields(yT, xT)).hDC, 0, 0, SRCCOPY)
    42. End If
    43. Next
    44. Next
    45. 'Figur neu setzen
    46. x = (7 + FigureOsLeft) * 14 - 4
    47. y = (4 + FigureOsTop) * 15 - 3
    48. hRes = BitBlt(picWorld.hDC, x, y, 22, 22, figmask(FigureShow).hDC, 0, 0, SRCPAINT)
    49. hRes = BitBlt(picWorld.hDC, x, y, 22, 22, figimg(FigureShow).hDC, 0, 0, SRCAND)
    50. End Sub
    51. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    52. If KeyCode = vbKeyDown Then
    53. FigureTop = FigureTop + 1
    54. Redraw
    55. End If
    56. End Sub


    Das Problem ist, dass die Variable FigureTop
    bei Druck auf PfeilUnten zwar inkrementiert
    wird, jedoch wird die picWorld nicht neu
    gezeichnet.

    Was mache ich da falsch?

    // edit: Bei jeden Bildern handelt es sich um eine PictureBox.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „weed“ ()