Autor Beitrag
Distemix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: So 23.11.08 18:51 
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):

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 23.11.08 20:08 
Hi :)

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

ausblenden 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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1336
Erhaltene Danke: 119

Win 10
RIO, CE, Lazarus
BeitragVerfasst: So 23.11.08 20:25 
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!

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Distemix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



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