AUf die Gefahr hin, dass ich euch nerve:
...Ist wahrscheinlich wieder nur halb so kompliziert wie der Post lang...
- Es geht wieder um mein Schachspiel
- Beim Klick auf ein Feld soll hier der einfachheit halber mal nur ein, anfangs unsichtbarer, roter Rahmen sichtbar werden ( = selektiert werden)
- Zuvor soll der Rahmen des Feldes, das davor selektiert war wieder durchsichtig werden.
- dazu wird im OnMouseUp-Event jedes Schachfeldes die Prozedur
SelectField aufgerufen
- das aktuell ausgewählte Feld wird im Globalen Pointer
PClickedField gespeichert
Die Prozedur sieht so aus:
Delphi-Quellcode:
procedure TForm1.SelectField(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if PClickedField <> NIL then PClickedField.Pen.Style := psClear;
PClickedField := @Sender;
PClickedField.Pen.Style := psSolid;
end;
Natürlich funktioniert sie nicht. Zwar erhalten die angeklickten Felder einen Rahmen, aber sie behalten sie auch. Ist ja logisch:
(jetzt kommt meine Theorie dazu, könnt ihr eigentlich auch überspringen ^^}
Bei jedem Aufruf der Prozedur wird gleich beim aufrufen die Stelle im Speicher wo der vorherige
Sender gespeichert ist, durch den
Sender ersetzt, der die Prozedur diesmal aufruft.
Der Pointer ist ja nur ein Zeiger der immer auf die selbe Speicheradresse zeigt, nämlich die, an der Die Prozedur SelectField den Wert des Senders speichert.
An der Stelle
Delphi-Quellcode:
PCLickedField.Pen.Style := psClear;
{...zeigt der Pointer also schon auf die selbe Stelle an die er kurz darauf von..}
PClickedField := @Sender;
nochmal verwiesen wird. Den die Speicheradresse bleibt ja die selbe, nur der Inhalt ändert sich.
Die Prozedur macht also blöderweise den Rahmen eines Feldes erst unsichtbar und dann gleich wieder sichtbar (was man aber nicht sieht).
{Jedenfalls Denk ich das, korrigiert mich wenn ich mich irre - bein ein Newb was Delphi und vor allem Zeiger betrifft}
Ich brauch also eure Hilfe!
Wie kann ich das zuvor selektierte Feld bzw. eine Referenz darauf am besten "speichern"? Oder wie sollte man das am besten lösen?
+Danke Schon mal!