![]() |
aktionen nacheinander ausführen
naja ist eine raltiv dumme frage aber ich bin halt anfänger :o
wie kann ich dinge nacheinander ausführen lassen? ich wollt z.b. mal 4 fun 4-gewinnt als delphi programm schreiben. einfach die reihen als edit felder (eigentlich egal was für felder) und unter jede reihe ein button. wenn man nun auf den button klickt soll das nächst mögliche feld in der jeweiligen reihe eingefärbt werden. ich wollte das eigentlich mit einfachen if/then schleifen machen, bis dann eingefallen ist, dass das so nur bis zum 2. feld funktioniert. mal so als beispiel
Delphi-Quellcode:
gehts logischerweise nicht :wall:
//procedure button1 click usw blabla
if edit1.color := clwhite then begin edit1.color := clgreen end else edit2.color := clgreen end; //so und wenn ich die schleife jetzt weitermache mit if edit2.color := clgreen then begin edit3.color := clgreen gibt unter garantie noch viel bessere/schönere wege aber für mich als newbie. will nicht nur stur irgendwo den code abschreiben sondern auch verstehen WAS ich geschrieben habe. (ja ich weiß das ich die ";" vergessen habe ^_^) |
Re: aktionen nacheinander ausführen
Beginn beim tiefsten, also:
Delphi-Quellcode:
if edit4.Color = clWhite
then edit4.Color:= clgreen else if edit3.Color = clWhite //... |
Re: aktionen nacheinander ausführen
lol ........... x_X
okay hätte nicht gedacht das ich so extrem blöd bin ^_^ danke °_^ kann geschlossen oder gelöscht werden :wall: |
Re: aktionen nacheinander ausführen
Zitat:
Zuerstmal: :party: Herzlich Willkommen in der DP :party: ... juhu, schon 2 Leute Willkommen gegrüßt :mrgreen: Jetzt aber zum Thema: Eine elegantere Art wäre ![]()
Delphi-Quellcode:
procedure Button1Click(Sender: TObject);
var i : Integer; MyEdit : TEdit; begin for i := 4 { was das Maximum ist ;) } downto 1 do begin MyEdit := ( FindComponent( 'Edit' + IntToStr(i) ) as TEdit ); // Edit: kleiner Tippfehler if( MyEdit.Color = clWhite ) then begin MyEdit.Color := clGreen; // Edit: von clRed auf clGreen ausgebessert Break; end; end; end; |
Re: aktionen nacheinander ausführen
erstma danke fürs willkommen heißen ^_^
kommen bestimmt noch sehr viele fragen von mir naja zum wesentlichen: ist ja klar das es auf viel elegantere wege gibt, nur das problem ist, dass ich deinen code nicht wirklich verstehe. ^^ das bisher "komplexeste" programm, welches ich geschrieben habe, war ein taschenrechner. naja wobei der sogar relativ gut ist :-D also rechnen kann er schon relativ viel, habs sogar geschafft n ziffernblock einzubaun. ich hätte natürlich bei google suchen können nach dem code für 4-gewinnt, aber, wie oben geschrieben, versteh ich gerne die sachen die ich schreibe ^_^ |
Re: aktionen nacheinander ausführen
Dann will ich dir den obigen Code erklären:
Statt jedes Editfeld einzeln mit einer if-Abfrage zu versehen, habe ich ![]() So nehme ich jetzt eine for-Schleife die von 4 hinunter bis 1 zählt, jedes Mal suche ich nach der Komponente 'Edit' + Zahl der Schleife, also wäre das dann Edit4, Edit3, Edit2, Edit1 :wink: Nun überprüfe ich, ob das Edit-Feld weiß ist, wenn ja, setze ich die Farbe auf grün und breche die Schleife mittels Break; ab, dadurch wird die Schleife kein weiteres Mal ausgeführt. Sollte die Farbe des Edit-Feldes nicht Weiß sein, so wird das nächste Edit-Feld überprüft, da ein neuer Durchlauf der Schleife folgt. |
Re: aktionen nacheinander ausführen
Eleganter (perfomanter etc.) wäre das ganze wenn man nicht mit FindComponent arbeitet, sondern sich das ganze in eine eigene Liste packt.
(wollt ich nur mal mit einwerfen damit neulinge nicht denken das FindComponent die eleganteste Methode ist (sie bekommen dank "Delphi für Kids" ja schon oftmals sugeriert das globale Variablen was tolles sind weil die in fast jedem beispiel auftauchen obwohl die in der Realität meist verabscheut werden)) |
Re: aktionen nacheinander ausführen
perfekt jetzt erspar ich mir viel schreibarbeit mit den ganzen scheiß if then schleifen ^_^
gleich mal zur nächsten frage, ist zwar nichmehr unbedingt nötig weil mans ja auch schon so "spielen" könnte, aber ist eben "komfortabler" so müsste ich ja unter jede reihe mit edit feldern 2 buttons machen, pro spieler eben einen. kann man delphi irgendwie sagen, dass nachdem das 1. feld grün gefärbt wurde das 2. rot zu färben? am besten gleich mit ner erklärung, wenns sich nicht eh einfach selbst erklärt. danke im vorraus ^_^ zu SirThonberry du kannst mir gerne erklären wie man das am besten macht wenn du grad nix zu tun hast^^ bin für jede hilfe dankbar! auch wenn jemand ne seite mit nem richtig guten tutorial kennt wäre naiz! muss ich euch vieleicht nichmehr ganz so oft mit den billigfragen nerven ^_° |
Re: aktionen nacheinander ausführen
Eine sehr einfach Möglichkeit wäre dafür eine Variable zu benutzen.
Nachdem du ein Feld gefärbt hast änderst du die Variable auf die Farbe von Spieler 2. Am Anfang des Programms setzt du die Variable auf die Farbe von Spieler 1. Nehmen wir an Spieler 1 hat grün und Spieler 2 hat rot
Delphi-Quellcode:
Du musst dann natürlich die Variable zum färben der Felder benutzen.
var
Farbe: TColor; // Im OnCreate des Forms beispielsweise: Farbe := clgreen; // überprüfen der Farbe if Farbe = clgreen then Farbe := clred else Farbe := clgreen; [edit]Fabe XD cled XD Ich kann echt nicht schreiben[/edit] |
Re: aktionen nacheinander ausführen
stimmmt das ist ne gute möglichkeit danke für den tipp ^
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz