Suche Methode
-
Hallo zusammen,
ich suche eine Methode, die es mir ermöglicht Etwas immerwieder auf der gleichen Art zu wiederholen. Als Beispiel habe ich hier ein Miniprogramm, das mittels eines Timers zwei Bilder abwechselnd anzeigen soll. Da ich noch keine Mehthode weiß, bin ich einfach auf den ZUfall umgestiegen. Dadurch wird ist aber der Abstand zwischen dem Erscheinen der beiden Bilder nicht mehr kontinuierlich, da beispielsweise auf zweimal hintereinader die gleiche Zahl durch den Zufallsgenerator ermittelt werden kann.void __fastcall TForm1::FormCreate(TObject *Sender) { Bild1 = new TBild ("C:\\Dokumente und Einstellungen\\Administrator\\Desktop\\"); Timer1->Enabled = true; Timer1->Interval = 1000; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { Bild1->Zufall = random (2); //Hier entscheidet der Zufall!!! Soll er aber nicht switch (Bild1->Zufall) { case 0: Image1->Picture->LoadFromFile (Bild1->Pfad + "Bild 1.bmp"); Image1->Stretch = true; break; case 1: Image1->Picture->LoadFromFile (Bild1->Pfad + "Bild 2.bmp"); Image1->Stretch = true; } }
Dennoch habe ich geschafft, wie ich es haben wollte, nämlich mit einer bool'schen Variabel, die einfach ihren Wert immer wieder ändert. DAs sieht dann so aus:
__fastcall TBild::TBild (String P) { Pfad = P; Zufall = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Bild1 = new TBild ("C:\\Dokumente und Einstellungen\\Administrator\\Desktop\\"); Timer1->Enabled = true; Timer1->Interval = 10; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { if (Bild1->Zufall) { Image1->Picture->LoadFromFile (Bild1->Pfad + "Bild 1.bmp"); Image1->Stretch = true; } else { Image1->Picture->LoadFromFile (Bild1->Pfad + "Bild 2.bmp"); Image1->Stretch = true; } Bild1->Zufall = !Bild1->Zufall; }
Ich finde, dass jedoch umständlich und ich könnte mir vorstellen, dass man diese gleichmäßige Hin- und Herschalten durch eine Methode vereinfachen kann.
Ich hoffe, das ihr mein Anliegen versteht
!!
Vielen Dank
lg, freakC++
-
ne bool-variable ist schon gut.
nur das if oder switch ist nicht so geil.char const *namen[]={"Bild1","Bild2"}; Image1->Picture->LoadFromFile (Bild1->Pfad + namen[Bild1->Zufall]); Image1->Stretch = true; Bild1->Zufall = !Bild1->Zufall;
und das geht dann sogar mit 17 bildern
Bild1->Zufall = (Bild1->Zufall+1)%17;
-
Hallo,
vielen Dank für die Lösung. Das sieht professionel aus. Da ich aber noch nicht so weit bin, würde ich mich freuen, wenn du mir den Syntax dieser Zeile mal erklären könntest:char const *namen[]={"Bild1","Bild2"};
Ich kann mir zwar vorstellen, was diese bewirkt, doch möchte es nochmals erklärt haben (warum char und net String, warum Zeigeoperator, was kommt HIER in die eckigen Klammern und in die gescheiften Klammern).
Das wär echt lieb, denn ich möchte, dies natürlich lernen, um meinen Stil auch zu verbessern.
Vielen Dank
lg, freakC++
-
freakC++ schrieb:
char const *namen[]={"Bild1","Bild2"};
Ich kann mir zwar vorstellen, was diese bewirkt, doch möchte es nochmals erklärt habenso einen typ liest man vom variablennamen aus nach außen. und zwar nach recht, wenn das möglich ist und wenn rechts nix mehr ist, dann nach links.
char const *namen[]
liest sich also
namen ist (nach rechts lesen) ein array (rechts ist fertig, links gehts weiter) von zeigern auf (links weiter) konstante (links weiter) characters.
also
namen ist ein array von zeigern auf konstante characters.
ja, string wäre auch nett. aber hier reichen zeiger auf character, so als hätten wir noch keine c++-strings.
will man die lesereihenfolge anders haben, kann man mit klammern was erzwingen:
char const (*namen)[]
liest sich als
namen ist (erst die klammer abarbeiten, also jetzt erstmal links!) ein zeiger auf (klammer ist fertig, weiter gehts rechts) ein array mit (rechts fertig, also weiter links) konstanten (links weiter) characters.