Einzelnen Beitrag anzeigen

Benutzerbild von soup
soup

Registriert seit: 5. Feb 2005
9 Beiträge
 
Delphi 7 Personal
 
#1

Pointerziel sichern oder wie? hä?

  Alt 5. Feb 2005, 16:05
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!
  Mit Zitat antworten Zitat