Hallo
Ich habe ein Feld von 8 mal 8 SpeedButtons zur Laufzeit erstellt, und möchte nun, nachdem man drei Buttons gedrückt hat, dass alle wieder ungedrückt sind.
Ich versuche es mit Groupindex und 'Down'. Bei jedem Klick wird der Groupindex auf 1, 2 oder 3 gesetzt und 'Down' auf true. Nachdem 3 Buttons gedrückt wurden, wird der GroupIndex auf 0 gesetzt und Down := false. Nur leider funktioniert das nicht richtig, wie man in der .exe-Datei ausprobieren kann.
Hier der Quellcode:
Delphi-Quellcode:
...
var
Form1: TForm1;
nummern: Array[1..8,1..8] of TSpeedButton;
drei : integer;
gedrueckt: Array[1..3] of TPoint;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
var i,j,x,y: integer;
begin
drei := 1;
x := 20;
y := 20;
for i := 1 to 8 do
begin
for j := 1 to 8 do
begin
Nummern[i,j] := TSpeedButton.Create(Self);
Nummern[i,j].Parent := GroupBox1;
Nummern[i,j].Show;
Nummern[i,j].Left := y;
Nummern[i,j].Top := x;
Nummern[i,j].Height := 50;
Nummern[i,j].Width := 50;
Nummern[i,j].OnClick := ZahlClick;
Nummern[i,j].Tag := i*10+j;
inc(x,50);
end;
x := 20;
inc(y,50);
end;
end;
procedure TForm1.ZahlClick(Sender: TObject);
var x,y, i, j: integer;
begin
If Sender is TSpeedButton then
begin
If drei in [1,2,3] then
begin
x := StrToInt(Copy(IntToStr(TSpeedButton(Sender).Tag),1,1));
y := TSpeedButton(Sender).Tag Mod 10;
If not Nummern[x,y].Down then
begin
Nummern[x,y].GroupIndex := drei;
Nummern[x,y].Down := true;
gedrueckt[drei].X := x;
gedrueckt[drei].Y := y;
inc(drei);
end;
If drei = 4 then
begin
for i := 1 to 3 do
begin
Nummern[gedrueckt[i].X,gedrueckt[i].Y].Down := false;
Gedrueckt[i].X := 0;
Gedrueckt[i].Y := 0;
end;
drei := 1;
end;
end;
end;
end;
Ich habe schon längere Zeit ausprobiert, aber ich finde den Fehler nicht.
Ich hoffe, ihr könnt mir helfen
Mfg
Florian Mayer