Hi,
Sorry für den ausagelosen Threadtitel aber ich wusste nicht, wie ich mein Problem besser kurz beschreiben soll. Ich habe ein Forms Anwendung mit mehreren Buttons gemacht, und jeder dieser Buttons hat einen Status in Form eines Integer Wertes also z.b 1, 2 usw..
Die Buttons ergeben zusammen ein 5 x 8 großes Feld und sind wie bei einem Schachbrett angeordnet. Ziel ist es nun, dass wenn ein Button gedrückt wird die 8 Buttons abgefragt werden, die sich um den Button herum befinden ob sie einen Bestimmten Status haben. Für jedes dieser 8 Buttons die einen bestimmten Status haben soll ein Zähler um 1 erhöt werden. Das Endergebnis dieses Zähler soll dann auf dem gedrückten Button angezeigt werden.
Um dies zu realiesieren habe ich erstmal 40 Button gemacht, die ich mit einem Tag versehen habe 0-39. Und eine Klasse die 3 Variablen beinhaltet Status, X Koordinate des Feldes und Y Koordinate des Feldes. Von dieser Klasse habe ich ein Array von 0-39 erstellt.
Dem Array habe ich nun inerhalb einer Schleife die jeweiligen X und Y Werte zugewiesen (entsprechend der anordnung der Buttons):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for i := 0 to 4 do begin for b := 0 to 7 do begin Field[iIndex].x := b; Field[iIndex].y := i; inc(iIndex); end; end; |
Hier ist die Funktion in der ich feststellen möchte ob der Button über dem gedrückten Button einen bestimmten Status hat:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm3.FieldInteragte(Sender: TObject); var i, iStatusCount : integer; begin
iStatusCount := 0;
if Field[(sender as TPanel).Tag].Status = 0 then begin EditPunkte.Text := 'Lose'; (sender as TPanel).Color := 200; end else if Field[(sender as TPanel).Tag].Status = 1 then begin for i := 0 to 39 do begin if Field[(sender as TPanel).Tag].x - 1 = Field[i].x then begin if Field[i].Status = 0 then begin inc(iStatusCount); end; end; end;
(sender as TPanel).Caption := inttostr(iStatusCount); end; end; |
Dadurch, dass ich jetzt in der Funktion die vom jedem Button beim drücken aufgerufen wird mit Tags arbeite hat ja sogesehen jeder Button sein eigenes Objekt der Feld klasse. Allerdings scheint etwas falsch zu laufen, denn trotz, dass ja eigentlich nur das Objekt oberhalb des Buttons abgefragt wird findet er teilweise sogar 2 Felder mit dem Status.
Es ist für mich auch irgendwie sehr schwer zu verfollgen, was falsch gelaufen ist weil der Debugger von Turbo Delphi die inhalte der Arrays nicht anzeigt und auch nicht welches Tags von den Buttons übergeben werden.
Naja vieleicht hat ja jemand einen Tip für mich
Moderiert von
Kha: Code- durch Delphi-Tags ersetzt