Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Logisches Problem Feld Abfrage


Distemix - So 23.11.08 18:51
Titel: Logisches Problem Feld Abfrage
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
     //(sender as TPanel).Color := 0;
      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 user profile iconKha: Code- durch Delphi-Tags ersetzt


Hidden - So 23.11.08 20:08

Hi :)

Ich hab's erstmal nur formatiert, kam leider jetzt nichtmehr zu mehr.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
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
    //(Sender as TPanel).Color := 0;
    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
          Inc(iStatusCount);
      end;
    end;
  end;
 (Sender as TPanel).Caption := IntToStr(iStatusCount);
end;


mfG,


Sinspin - So 23.11.08 20:25
Titel: Re: Logisches Problem Feld Abfrage
user profile iconDistemix hat folgendes geschrieben Zum zitierten Posting springen:

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 :)

Ja, den habe ich!
Du redest hier an jeder Stelle nur von Buttons castest aber auf TPanel! Ist schon ein Wunder das dir das ganze nicht einfach um die Ohren fliegt!


Distemix - So 23.11.08 21:18

Ähh es sind auch Panels sorry also wenn noch jemand ne idee hat würde ich mich freuen :)