Entwickler-Ecke
Sonstiges (Delphi) - Procedure erneut aufrufen
Pandax3 - Fr 11.03.11 20:00
Titel: Procedure erneut aufrufen
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 ;)
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); end;
Button1Click(Sender); Button3Click(Sender);
end; |
Georg08 - 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
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm3.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin [...] 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
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 end; end; |
elundril - 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)
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); end else begin showmessage('Bitte werfen Sie den Stein in eine andere Reihe'); end; Button1Click(Sender); Button3Click(Sender); end; |
Pandax3 - 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
Pandax3 - 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 - Fr 11.03.11 20:34
so ich habs ;D
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); end; |
elundril - Fr 11.03.11 20:38
Pandax3 hat folgendes geschrieben : |
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
Pandax3 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!