geziehltes bild entladen

  • VB6

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Neptun.

    geziehltes bild entladen

    Hi VB Profis,

    ich möchte gerne über mehrere ImageBoxen mehrere Bilder
    durch click Ereignis hüpfen lassen.
    Ich weiss nur nicht wie ich ein geziehltes Bild aus einer
    ImageBox entlade?

    Quellcode

    1. Private Sub w_1_Click()
    2. If name_1_15.BackColor = ColorConstants.vbBlue Then
    3. Set Me.Controls("w_1").Picture = Me.Controls("p_bl").Picture
    4. ElseIf name_2_15.BackColor = ColorConstants.vbBlue Then
    5. Set Me.Controls("w_1").Picture = Me.Controls("p_ge").Picture
    6. ElseIf name_3_15.BackColor = ColorConstants.vbBlue Then
    7. Set Me.Controls("w_1").Picture = Me.Controls("p_gn").Picture
    8. ElseIf name_4_15.BackColor = ColorConstants.vbBlue Then
    9. Set Me.Controls("w_1").Picture = Me.Controls("p_rt").Picture
    10. Me.Controls("w_2").Picture = Nothing
    11. Me.Controls("w_3").Picture = Nothing
    12. Me.Controls("w_4").Picture = Nothing
    13. Me.Controls("w_5").Picture = Nothing
    14. End If
    15. End Sub


    Mit "= Nothing" entlade ich ja alle Bilder aus der PictureBox, möchte aber
    ein geziehltes Bild entladen aber wie?

    mfG
    Ichy
    Hallo Ichy,
    was verwendest du, Picture-Controls, oder Image-Controls?
    Eine Picturebox enthält immer nur ein Bild. Deshalb kannst
    du auch nur dieses entladen. Du kannst bestimmte Bereiche
    innerhalb einer Picturebox mit Line überzeichnen.
    Übrigens, wenn dir der Name eines Controls bekannt ist,
    brauchst du nicht Me.Controls davor zu schreiben.
    Es genügt also das:

    Visual Basic-Quellcode

    1. Set w_2.Picture = Nothing
    Gruss,

    Neptun
    Hallo Neptun,

    ich verwende Image-Controls.
    Das Me.Controls habe ich vergessen zu löschen.
    Aber nochmal zu mein Problem:
    Ich habe eine Laufspur mit ImageBoxen erstellt wo 4 Bilder (4 Spieler) drauf laufen sollen (gelagen und entladen).
    Das heisst: Spieler 1 (p_bl) clickt auf eine ImageBox wo dann sein Bild gelagen wird.
    Spieler 2 (p_ge) clickt auf eine andere ImageBox und sein Bild wird geladen.
    Dito Spieler 3 und 4.
    Nächste Runde, Spieler 1 (p_bl) clickt auf eine weitere ImageBox und sein Bild wird geladen und die letzte position
    soll entladen werden.
    Bei den nächsten Spieler das selbe.
    Ich weiss halt nicht wie ich die letzte Position vom Spieler abfrage und entlade kann.

    Danke Dir

    mfG
    Ichy
    Hallo Ichy,
    das Bild legst du am Besten in einer Variablen ab.
    Hier ein Beispiel:

    Visual Basic-Quellcode

    1. ' Controls: 3 * Image
    2. Private SpielerBild As StdPicture
    3. Private Sub Form_Load()
    4. Set SpielerBild = LoadPicture("C:\Spieler1.jpeg") ' <- Ein Bild
    5. Call Image1_Click
    6. End Sub
    7. Private Sub Image1_Click()
    8. Call Alles_Loeschen
    9. Set Image1.Picture = SpielerBild
    10. End Sub
    11. Private Sub Image2_Click()
    12. Call Alles_Loeschen
    13. Set Image2.Picture = SpielerBild
    14. End Sub
    15. Private Sub Image3_Click()
    16. Call Alles_Loeschen
    17. Set Image3.Picture = SpielerBild
    18. End Sub
    19. Private Sub Alles_Loeschen()
    20. Set Image1.Picture = LoadPicture()
    21. Set Image2.Picture = LoadPicture()
    22. Set Image3.Picture = LoadPicture()
    23. End Sub
    Gruss,

    Neptun

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Neptun“ ()

    Danke Neptun,

    es funktioniert aber so hat es vorher auch funktioniert nur mir mehr Code.
    Mein Problem habe ich immer noch und zwar:
    Du mußt Dir vorstellen ich habe 4 Spieler Bilder gleichzeitig auf dem Spielfeld (auf verschiedene ImageBoxen),
    wenn ich alles mit "Call alles lösche" lösche, dann sind alle Spieler Bilder weg bis auf das Click Ereignis Bild.
    Es soll doch geziehlt die letzte Position des jeweiligen Spieler Bild gelöschen werden aber wie?

    Danke Dir nochmals für Deine Arbeit!

    mfG
    Ichy
    Hallo Ichy,
    du musst den Namen des zuletzt belegten Image-Controls in
    einer Variablen ablegen und dieses beim nächsten Positionieren
    wieder löschen. Wenn man mehrere Controls mit gleicher Funktion
    hat, verwendet man besser ein Control-Array. Siehe dazu:
    vbarchiv.net/faq/details.php?id=allg_controls
    Ein Control-Array kann auch zur Entwurfszeit erstellt werden.
    Gruss,

    Neptun
    Hallo Ichy,
    wenn du ein Control-Array verwendest, musst du den Index des Image-Controls
    speichern:

    Visual Basic-Quellcode

    1. Player1LastIndex = Index

    Dann kannst du später zum Löschen wieder so darauf zugreifen:

    Visual Basic-Quellcode

    1. Set Image1(Player1LastIndex).Picture = LoadPicture()

    Wenn du einzelne Image-Controls hast, muss die Variable as Image
    angelegt werden, sonst Integer.
    Gruss,

    Neptun
    Guten Morgen Neptun & Co.,

    habe bis spät in die Nacht versucht den Code zufinden aber ich schaff es nicht.
    Hier mal der ausschnitt:

    Quellcode

    1. Private SpielerBild As StdPicture
    2. Private Sub Form_Load()
    3. w_0LastIndex = Index
    4. Set SpielerBild = p_bl.Picture
    5. Set w_0(Index).Picture = SpielerBild
    6. End Sub
    7. Private Sub w_0_Click(Index As Integer)
    8. If name_1_15.BackColor = ColorConstants.vbBlue Then
    9. w_0LastIndex = Index
    10. Set w_0(w_0LastIndex).Picture = LoadPicture()
    11. Set SpielerBild = p_bl.Picture
    12. Set w_0(Index).Picture = SpielerBild
    13. ElseIf name_2_15.BackColor = ColorConstants.vbBlue Then
    14. w_0LastIndex = Index
    15. Set w_0(p_geLastIndex).Picture = LoadPicture()
    16. Set SpielerBild = p_ge.Picture
    17. Set w_0(Index).Picture = SpielerBild
    18. End If
    19. End Sub


    Zu dem Code:
    w_0 (51xImageBox)ist mein Spielfeld mit 51 Indexen.
    p_bl und p_ge sind meine Spielfiguren als einzel Image.
    Es sollen nur die zwei Spielfiguren (Bilder) über die 51 ImagenBoxen hüpfen.
    Das mit LastIndex funktioniert irgend wie nicht so richtig, da LastIndex und Index gleich sind?

    Bitte helft mir noch mal, danke!

    mfg
    Ichy

    index abfrage

    Hallo Neptun & Co.,

    ich habe mit Hilfe von Dir, meinen Code soweit hinbekommen, aber ich stehe wieder vor einem Problem,
    wo ich Dich bitten möchte mir nochmals zu helfen.
    Ich habe mein Code ziemlich verschachtelt und ich stosse immer wieder auf die Abfrage ob
    die ImageBoxen leer oder ob ein Bild geladen ist?
    Ich habe es mit:

    Quellcode

    1. If Image1(Index).Picture.Type <> vbPicTypeNone Then

    versucht, aber es will mir nicht gelingen.
    Wie ich eine einzelne ImageBox abfrage weiß ich:

    Quellcode

    1. If w_0(52).Picture Is Spieler(akPlayer) Then

    aber wie frage ich alle Indexe nach einem geladenen Bild ab und
    kann ich die Abfrage in jeder Anwendung benutzen?

    Danke Dir im voraus.

    mfG
    Ichy

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ichy“ ()

    Hallo Ichy,
    ich weiss nicht genau, was du vorhast. Wenn du in allen
    Image-Controls nach einer Grafik suchst, musst du sie
    in einer Schleife durchgehen. Grundsätzlich ist es nicht
    der beste Weg, mit den Grafiken herumzurechnen. Du kannst
    in der Tag-Eigenschaft jeder Imagebox einen beliebigen
    Wert ablegen (z.B. 0 für leer, 1 für Spieler Eins usw.)
    und diesen später abfragen. Bei einer Änderung der Grafik
    muss dann immer auch Tag geändert werden.
    Bei aufwändigeren Spielen gibt es eine klare Trennung
    zwischen dem Spielablauf und der grafischen Darstellung.
    Das heisst, die ganzen Vorgänge (Bewegung von Objekten,
    Animationsphasen usw.) werden in Variablen abgelegt und
    dort bearbeitet. Und dann werden in einer Sub die Variablen-
    inhalte in die grafische Darstellung umgerechnet. Man muss
    dann also gar nichts in der Grafik abfragen.
    Gruss,

    Neptun