Image in PictureBox: Koordinaten gehen verloren?

drumomatico

Grünschnabel
Ich habe folgendes Problem in Visual Basic 6:

Für ein Schulprojekt programmiere ich ein Schachprogramm, zwar ohne CPU-Gegener (kommt ja vl. noch) sonder einfach Mensch gegen Mensch. Das Schachbrett ist eine PictureBox, die einzelnen Figuren sind Images (jeweils eine, ihre Geschwister erstelle ich mir per Load() ... also bauer(1), bauer(2), bauer(3), ... springer(1), springer(2), turm(1), turm(2) ... usw ...)

Mein Problem ist nun das Koordinatensystem! Alles ist bestens, bevor die Figuren am Brett sind! Die Brett-Koordinaten hole ich mir mit brett_MouseMove(). Wenn ich jetzt aber die Maus über eine Figur bewege, versagt das System. Die Koordinaten werden nun intern zB über dem Turm berechnet, nicht mehr allgemein, über das ganze Brett berechnet.

Versteht ihr was ich meine Wie kann ich es anstellen, dass das Programm die Koordinaten NUR auf das Brett bezieht und NICHT beim MouseOver über einer Figur das Brett ignoriert und das interne Koordinatensystem der Figur nutzt
 
Hallo,

vielleicht ist das MouseMove-Ereignis vom gesamten Formular für Deine Aufgabe geeigneter. Ich bin mir da gerade zwar nicht sicher, aber das würde ich an Deiner Stelle einfach mal ausprobieren.
Logischerweise musst Du dann unter Umständen die Berechnung der Felder umschreiben.
 
Das Programm errechnet sich aber aus den X- und Y-Koordinaten alles, zB Farbe der Felder, Position (Top,Left) der Figuren, wenn die Maus jetz ausserhalb des Bretts Koordinaten senden würde, so würde die ganze berechnung zusammenbrechen, ungültige Felder berechntet werden, s/w falsch, ...

Gibts nichts anderes
 
Das Problem ist nur, dass die Figuren über dem Brett liegen und deswegen das MouseMove-Ereignis auslösen, wenn die Maus dadrüber ist.
Möglicherweise kannst Du statt dem PictureBox-Control für das Brett auch ein FlexGrid nehmen - ich weiss nur gerade nicht, ob man da auch Grafiken einfügen kann.
Ich würde das MouseMove-Event des Formulars nehmen und die Berechnung anpassen, wenn es unbedingt das MouseMove-Event sein soll. Eine andere Alternative wäre, die Figur per Drag&Drop auf ein anderes Feld zu ziehen oder die Figur mit einem Klick zu aktivieren und dann mit einem zweiten Klick auf das Zielfeld zu verschieben.
Letzteres dürfte relativ einfach machbar sein.
 
hmm... da stellt sich dann aber das Problem: wie ziehen? Die Folge wären dann 16 Damen pro Seite (alle Figuren können fahren wohin sie wollen...!) ... aber mal sehen, ich werds mal mit dem Coord-Sys des Forms versuchen. Danke für die Hilfe!
 
Ziehen per Drag&Drop - so wie man im Explorer auch Dateien woanders hinschieben kann.

Dass nicht jede Figur überall hingezogen werden darf, muss natürlich vor dem Verschieben der Figur selbst überprüft werden. Ganz hilfreich dabei wäre evtl. auch einfach ein 8x8 Elemente grosses Array als Koordinatensystem, in dem Du die Positionen der Figuren speicherst.
 
Oder du legst bestimmte "maximal-Felder" fest, die bei Mousemove&Mouseover dein momentan selektiertes Objekt dahin verschieben.
Mit maximalFelder meine ich bestimmte Positionen in deiner PictureBox wie z.B. (anfang left=25px&top=25px | ende left=50px&top=50px)
So hast du ein Feld von 25m².
Wenn die Maus über diesem Feld ist und gleichzeitig ein Objekt selektiert hat, kannst du - wie gesagt - dein selektiertes Objekt (z.B. Turm(1)) ín die Mitte dieses Feldes "schieben". (turm(1).left = 25px |zeilenumbruch| turm(1).top = 25px)

Ist vielleicht nicht so einfach wie Drag&Drop, jedoch auch eine Möglichkeit.
Mit D&D habe ich mich jedoch kaum auseinander gesetzt....

Gruß
daDom
 

Neue Beiträge

Zurück