| Autor |
Beitrag |
Pandax3
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: 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
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
      
Beiträge: 155
Erhaltene Danke: 6
Win XP
Delphi 7.0 Personal
|
Verfasst: 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; |
Zuletzt bearbeitet von Georg08 am Fr 11.03.11 20:21, insgesamt 1-mal bearbeitet
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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; |
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Fr 11.03.11 20:27
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Pandax3 
      
Beiträge: 40
Erhaltene Danke: 1
|
Verfasst: 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 
|
|