![]() |
Wie vereinfachen und warum Aussetzer?
Guten Tag
ich habe programmiert, dass wenn man auf einen Button klickt, eine zufällige Zahl ausgelost wird und entsprechend der Zahl dann das Bild angezeigt werden soll. 2 Proobleme: -Der Button reagiert beim ersten mal IMMER erst nach dem 3. mal draufklicken. -zwischendurch kurze Aussetzer Hier der Code
Delphi-Quellcode:
//Zufallsprinzip + Manuell weiterklicken
procedure TfrmMain.btnVorClick(Sender: TObject); begin //1ten 3 DurAkkorde if Akkordwahl = 1 then begin Lotto := random(4); case Lotto of 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\C-Dur.jpg'); lbnAkkord.Caption := ('C-Dur'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Dur.jpg'); lbnAkkord.Caption := ('D-Dur'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\G-Dur.jpg'); lbnAkkord.Caption := ('G-Dur'); end; end; end; // Dur-Akkorde if Akkordwahl = 2 then begin Lotto := random(8); case Lotto of 7:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\C-Dur.jpg'); lbnAkkord.Caption := ('C-Dur'); end; 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Dur.jpg'); lbnAkkord.Caption := ('D-Dur'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Dur.jpg'); lbnAkkord.Caption := ('A-Dur'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Dur.jpg'); lbnAkkord.Caption := ('E-Dur'); end; 4:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\G-Dur.jpg'); lbnAkkord.Caption := ('G-Dur'); end; 5:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Dur.jpg'); lbnAkkord.Caption := ('F-Dur'); end; 6:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Dur.jpg'); lbnAkkord.Caption := ('B-Dur'); end; end; end; // 1ten 3 Mollakkorde if Akkordwahl = 3 then begin Lotto := random(4); case Lotto of 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Moll.jpg'); lbnAkkord.Caption := ('D-Moll'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Moll.jpg'); lbnAkkord.Caption := ('A-Moll'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Moll.jpg'); lbnAkkord.Caption := ('E-Moll'); end; end; end; // Moll - Akkorde if Akkordwahl = 4 then begin Lotto := random(6); case Lotto of 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Moll.jpg'); lbnAkkord.Caption := ('D-Moll'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Moll.jpg'); lbnAkkord.Caption := ('A-Moll'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Moll.jpg'); lbnAkkord.Caption := ('E-Moll'); end; 4:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Moll.jpg'); lbnAkkord.Caption := ('F-Moll'); end; 5:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Moll.jpg'); lbnAkkord.Caption := ('B-Moll'); end; end; end; //Dur + Moll Akkorde if Akkordwahl = 5 then begin Lotto := random(13); case Lotto of 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\C-Dur.jpg'); lbnAkkord.Caption := ('C-Dur'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Dur.jpg'); lbnAkkord.Caption := ('D-Dur'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Dur.jpg'); lbnAkkord.Caption := ('A-Dur'); end; 4:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Dur.jpg'); lbnAkkord.Caption := ('E-Dur'); end; 5:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\G-Dur.jpg'); lbnAkkord.Caption := ('G-Dur'); end; 6:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Dur.jpg'); lbnAkkord.Caption := ('F-Dur'); end; 7:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Dur.jpg'); lbnAkkord.Caption := ('B-Dur'); end; 8:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Moll.jpg'); lbnAkkord.Caption := ('D-Moll'); end; 9:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Moll.jpg'); lbnAkkord.Caption := ('A-Moll'); end; 10:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Moll.jpg'); lbnAkkord.Caption := ('E-Moll'); end; 11:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Moll.jpg'); lbnAkkord.Caption := ('F-Moll'); end; 12:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Moll.jpg'); lbnAkkord.Caption := ('B-Moll'); end; end; end; // Dur7Akkord if Akkordwahl = 6 then begin Lotto := random(8); case Lotto of 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\C-Dur7.jpg'); lbnAkkord.Caption := ('C-Dur 7'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Dur7.jpg'); lbnAkkord.Caption := ('D-Dur 7'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Dur7.jpg'); lbnAkkord.Caption := ('A-Dur 7'); end; 4:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Dur7.jpg'); lbnAkkord.Caption := ('E-Dur 7'); end; 5:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\G-Dur7.jpg'); lbnAkkord.Caption := ('G-Dur 7'); end; 6:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Dur7.jpg'); lbnAkkord.Caption := ('F-Dur 7'); end; 7:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Dur7.jpg'); lbnAkkord.Caption := ('B-Dur 7'); end; end; end; //Moll7Akkord if Akkordwahl = 7 then begin Lotto := random(6); case Lotto of 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Moll7.jpg'); lbnAkkord.Caption := ('D-Moll 7'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Moll7.jpg'); lbnAkkord.Caption := ('A-Moll 7'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Moll7.jpg'); lbnAkkord.Caption := ('E-Moll 7'); end; 4:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Moll7.jpg'); lbnAkkord.Caption := ('F-Moll 7'); end; 5:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Moll7.jpg'); lbnAkkord.Caption := ('B-Moll 7'); end; end; end; //Alle Akkorde if Akkordwahl = 8 then begin Lotto := random(25); case Lotto of 24:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\C-Dur.jpg'); lbnAkkord.Caption := ('C-Dur'); end; 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Dur.jpg'); lbnAkkord.Caption := ('D-Dur'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Dur.jpg'); lbnAkkord.Caption := ('A-Dur'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Dur.jpg'); lbnAkkord.Caption := ('E-Dur'); end; 4:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\G-Dur.jpg'); lbnAkkord.Caption := ('G-Dur'); end; 5:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Dur.jpg'); lbnAkkord.Caption := ('F-Dur'); end; 6:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Dur.jpg'); lbnAkkord.Caption := ('B-Dur'); end; 7:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\C-Dur7.jpg'); lbnAkkord.Caption := ('C-Dur 7'); end; 8:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Dur7.jpg'); lbnAkkord.Caption := ('D-Dur 7'); end; 9:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Dur7.jpg'); lbnAkkord.Caption := ('A-Dur 7'); end; 10:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Dur7.jpg'); lbnAkkord.Caption := ('E-Dur 7'); end; 11:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\G-Dur7.jpg'); lbnAkkord.Caption := ('G-Dur 7'); end; 12:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Dur7.jpg'); lbnAkkord.Caption := ('F-Dur 7'); end; 13:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Dur7.jpg'); lbnAkkord.Caption := ('B-Dur 7'); end; 14:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Moll.jpg'); lbnAkkord.Caption := ('D-Moll'); end; 15:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Moll.jpg'); lbnAkkord.Caption := ('A-Moll'); end; 16:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Moll.jpg'); lbnAkkord.Caption := ('E-Moll'); end; 17:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Moll.jpg'); lbnAkkord.Caption := ('F-Moll'); end; 18:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Moll.jpg'); lbnAkkord.Caption := ('B-Moll'); end; 19:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Moll7.jpg'); lbnAkkord.Caption := ('D-Moll 7'); end; 20:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\A-Moll7.jpg'); lbnAkkord.Caption := ('A-Moll 7'); end; 21:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\E-Moll7.jpg'); lbnAkkord.Caption := ('E-Moll 7'); end; 22:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\F-Moll7.jpg'); lbnAkkord.Caption := ('F-Moll 7'); end; 23:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\B-Moll7.jpg'); lbnAkkord.Caption := ('B-Moll 7'); end; end; end; end; danke für die Hilfe PS: wie kann man das vieleict vereinfachen? |
Re: Wie vereinfachen und warum Aussetzer?
Hallo...
2 Sachen fallen mir auf: 1. Ich vermisse Randomize, die Initialisierung des Zufallszahlengenerators 2.
Delphi-Quellcode:
- die Variable Lotto kann Werte zwischen 0 und 4 annehmen und dein case geht von 1 bis 3
Lotto := random(4);
case Lotto of 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\C-Dur.jpg'); lbnAkkord.Caption := ('C-Dur'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Dur.jpg'); lbnAkkord.Caption := ('D-Dur'); end; 3:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\G-Dur.jpg'); lbnAkkord.Caption := ('G-Dur'); end; - deshalb passiert öfter nichts, da Lotto einen Wert hat, der nicht in der case Anweisung vorhanden ist. - Vorschlag:
Delphi-Quellcode:
- bei den anderen entsprechend auch anpassen... :-D
Lotto := random(2);
case Lotto of 0:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\C-Dur.jpg'); lbnAkkord.Caption := ('C-Dur'); end; 1:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\D-Dur.jpg'); lbnAkkord.Caption := ('D-Dur'); end; 2:begin imgAkkord.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Pics\G-Dur.jpg'); lbnAkkord.Caption := ('G-Dur'); end; Hoffe geholfen zu haben... :hi: |
Re: Wie vereinfachen und warum Aussetzer?
Random(n) liefert Werte von Null bis n-1, daher ist haentschmans Kommentar nicht ganz korrekt.
|
Re: Wie vereinfachen und warum Aussetzer?
Zitat:
stimmt! Range gibt ja nicht an, "bis n" sondern "n Werte ab 0" d.h. "Null bis n-1" 8)
Delphi-Quellcode:
müßte dann heißen...
Lotto := random(2);
Delphi-Quellcode:
:hi:
Lotto := random(3);
|
Re: Wie vereinfachen und warum Aussetzer?
danke schonma
wo genau muss das randomize stehn? |
Re: Wie vereinfachen und warum Aussetzer?
Am Besten im OnCreate.
|
Re: Wie vereinfachen und warum Aussetzer?
Am besten im OnCreate der Form.
|
Re: Wie vereinfachen und warum Aussetzer?
Also ich würde erst mal den Code vereinfachen.
In jedem Case steht im Prinzip der gleiche Code. Das könnte man in eine Procedure auslagern:
Delphi-Quellcode:
Aufruf wäre dann so:
procedure LadeImage(Bild: string);
begin // Pseudo-Code Pfad herausfinden; Bild laden; Aus Bildname die Caption auslesen; Caption setzen; end;
Delphi-Quellcode:
case Lotto of
1: LadeImage('C-Dur.jpg'); 2: LadeImage('D-Dur.jpg'); end; /edit: Du könntest auch noch weiter vereinfachen. Array für die verschiedenen Tonarten anlegen und der Funktion den Index des Array mitgeben.
Delphi-Quellcode:
P.S. Ein besserer Titel für den Thread wäre auch nicht schlecht.
// Pseudo-Dode
MollArray := Array of string('D-Moll', 'A-Moll', 'E-Moll', ...); DurArray := Array of string(...); ... ... if Akkordwahl = 4 then begin Lotto := random(6); LadeImage(MollArray[Lotto]); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:32 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