Autor Beitrag
Pandax3
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.03.11 20:00 
Hallo,
ich möchte 4 gewinnt programmieren und frage mich ob folgendes geht:
ich habe eine StringGrid1SelectCell Procedure und möchte aus dieser Procedure dieselbe StringGrid1SelectCell Procedure erneut aufrufen. Also so, dass sie sich wiederholt von vorne. Kann mir einer sagen wie das geht? ;D
Bei Buttons mach ich das mit Button1Click(Sender)
wäre nett wenn jemand helfen kann ;)

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:
procedure TForm3.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin


        if stringgrid1.cells[acol,0]='' then
        begin
         if stringgrid1.cells[acol,c[acol]]=IntToStr(1)  then repeat c[acol]:=c[acol]-1 until stringgrid1.cells[acol,c[acol]]='';
         if stringgrid1.cells[acol,c[acol]]=IntToStr(0)  then repeat c[acol]:=c[acol]-1 until stringgrid1.cells[acol,c[acol]]='';
         stringgrid1.cells[acol,c[acol]]:=IntToStr(0);
        end
        else
        begin
        showmessage('Bitte werfen Sie den Stein in eine andere Reihe');
        TForm3.StringGrid1SelectCell(Sender); // hier liegt mein Problem, ich möchte die Procedure so aufrufen das ich mir noch mal eine Zelle aussuchen kann
                                              // und die Procedure von vorne startet
        end;

         Button1Click(Sender);
         Button3Click(Sender);

        end;
Georg08
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155
Erhaltene Danke: 6

Win XP
Delphi 7.0 Personal
BeitragVerfasst: Fr 11.03.11 20:16 
Naja theoretisch musst du nur die Parameter wieder übergeben wie beim Buttonklick.
Allerdings musst du aufpassen, da du die Prozedur, wenn du sie in keien Abfrage hängst jedes mal aufrufst und dass ergibt dann eine Endlosschleie
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm3.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
[...]
// Hier der Aufruf, allerding musste du noch eine Abfrage hinzufügen
StringGrid1SelectCell(Sender, ACol, ARow, CanSelect);

Wenns dir aber nur drum geht alles 2x auszufürhen könntest du auch gleich alles in eine schleife hängen, ist aber keine so schöne Variante
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm3.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
  var
    i: Integer;
begin
  for i := 1 to 2 do begin
    //Aktionen
  end;
end;


Zuletzt bearbeitet von Georg08 am Fr 11.03.11 20:21, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 11.03.11 20:21 
Du brauchst selbst das nicht aufrufen. Einfach nur die Fehlermeldung ausgeben reicht. Die Procedure ruft sich alleine auf wenn man ein neues fleckchen gewählt hat. (Das ist ja das schöne bei ereignis-gesteuerten Programmen)

So, hier mal der Quälcode, wie er zum Quellcode geworden ist (richtig formatiert)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm3.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if stringgrid1.cells[acol,0]='' then begin
    if stringgrid1.cells[acol,c[acol]]=IntToStr(1then 
      repeat 
        c[acol]:=c[acol]-1 
      until stringgrid1.cells[acol,c[acol]]='';
    if stringgrid1.cells[acol,c[acol]]=IntToStr(0then 
      repeat 
        c[acol]:=c[acol]-1 
      until stringgrid1.cells[acol,c[acol]]='';
    stringgrid1.cells[acol,c[acol]]:=IntToStr(0);
    end
  else begin
    showmessage('Bitte werfen Sie den Stein in eine andere Reihe');
    // einfach nichts machen. Dann kannst du ja einfach nochmal klicken. Da brauchst du nix selbst aufrufen
  end;
  Button1Click(Sender);
  Button3Click(Sender);
end;

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Pandax3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.03.11 20:25 
hm hast recht ;D das gibt ne endlosschleife
Ich versteh nicht ganz wieso ich nicht erst eine Zelle auswählen kann als ob die Procedure ganz neu gestartet ist und damit nicht in die Schleife komme ;O
hat einer ne andere Idee was ich machen kann?
Danke ;d
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 11.03.11 20:27 
user profile iconPandax3 hat folgendes geschrieben Zum zitierten Posting springen:
Ich versteh nicht ganz wieso ich nicht erst eine Zelle auswählen kann als ob die Procedure ganz neu gestartet ist und damit nicht in die Schleife komme ;O
hat einer ne andere Idee was ich machen kann?
Danke ;d


Ich zitier mich ja nur ungern selber, aber:
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Du brauchst selbst das nicht aufrufen. Einfach nur die Fehlermeldung ausgeben reicht. Die Procedure ruft sich alleine auf wenn man ein neues fleckchen gewählt hat. (Das ist ja das schöne bei ereignis-gesteuerten Programmen)

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Pandax3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.03.11 20:29 
@elundril
mh ne eben nicht ;D
unten habe ich ja noch Button3Click(Sender) stehen.
Und der wird dann ausgefürht obwohl er nur ausgeführt werden soll wenn man in die richtige Reihe geworfen hat ;D

p.s die antwort oben galt nicht dir ;D da warst du wohl paar sekunden schneller als ich
Pandax3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.03.11 20:34 
so ich habs ;D

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm3.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin


        if stringgrid1.cells[acol,0]='' then
        begin
         if stringgrid1.cells[acol,c[acol]]=IntToStr(1)  then repeat c[acol]:=c[acol]-1 until stringgrid1.cells[acol,c[acol]]='';
         if stringgrid1.cells[acol,c[acol]]=IntToStr(0)  then repeat c[acol]:=c[acol]-1 until stringgrid1.cells[acol,c[acol]]='';
         stringgrid1.cells[acol,c[acol]]:=IntToStr(0);
         Button3Click(Sender);
        end
        else
        begin
        showmessage('Bitte werfen Sie den Stein in eine andere Reihe');
        end;

         Button1Click(Sender);
        // Button3Click(Sender);

        end;
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 11.03.11 20:38 
user profile iconPandax3 hat folgendes geschrieben Zum zitierten Posting springen:
so ich habs ;D


BINGO! Woher soll ich riechen das Button3Click(sender); nur ausgeführt werden soll, wenn die funktion erfolgreich war? Deswegen benennt man seine Buttons gescheit und kommentiert seinen Quelltext.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Pandax3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.03.11 21:10 
hm, hab ich doch oben einmal geschrieben ;D
eigentlich wollt ich es ja einfach so machen, dass die Procedure von ganz vorne neu startet ;D
da hat einer wieder zu komlpiziert gedacht :D