Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi aktionen nacheinander ausführen (https://www.delphipraxis.net/46791-aktionen-nacheinander-ausfuehren.html)

xeLa- 31. Mai 2005 17:25


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:
//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
gehts logischerweise nicht :wall:

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 ^_^)

Phistev 31. Mai 2005 17:33

Re: aktionen nacheinander ausführen
 
Beginn beim tiefsten, also:
Delphi-Quellcode:
if edit4.Color = clWhite
then edit4.Color:= clgreen
else if edit3.Color = clWhite //...

xeLa- 31. Mai 2005 17:39

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:

idontwantaname 31. Mai 2005 17:51

Re: aktionen nacheinander ausführen
 
Zitat:

Zitat von xeLa-
kann geschlossen oder gelöscht werden :wall:

Wozu denn ?? Ich will ja noch was schreiben :wink:

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-Referenz durchsuchenFindComponent zu verwenden. Hier ein Beispiel:
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;

xeLa- 31. Mai 2005 18:14

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 ^_^

idontwantaname 31. Mai 2005 18:31

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 Delphi-Referenz durchsuchenFindComponent verwendet. Diese Funktion verlangt einen String ( der Name der Komponente ), in deinem Fall wäre das Edit1, Edit2, Edit3, Edit4, ....
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.

SirThornberry 31. Mai 2005 18:35

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))

xeLa- 31. Mai 2005 18:39

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 ^_°

Brainstalker 31. Mai 2005 21:34

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:
var
  Farbe: TColor;


  // Im OnCreate des Forms beispielsweise:
  Farbe := clgreen;

  // überprüfen der Farbe
  if Farbe = clgreen then Farbe := clred
  else Farbe := clgreen;
Du musst dann natürlich die Variable zum färben der Felder benutzen.

[edit]Fabe XD
cled XD
Ich kann echt nicht schreiben[/edit]

xeLa- 1. Jun 2005 12:30

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