Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie vereinfachen und warum Aussetzer? (https://www.delphipraxis.net/111963-wie-vereinfachen-und-warum-aussetzer.html)

Journeyman 12. Apr 2008 11:03


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?

haentschman 12. Apr 2008 11:22

Re: Wie vereinfachen und warum Aussetzer?
 
Hallo...

2 Sachen fallen mir auf:

1. Ich vermisse Randomize, die Initialisierung des Zufallszahlengenerators
2.
Delphi-Quellcode:
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;
- die Variable Lotto kann Werte zwischen 0 und 4 annehmen und dein case geht von 1 bis 3
- deshalb passiert öfter nichts, da Lotto einen Wert hat, der nicht in der case Anweisung vorhanden ist.
- Vorschlag:
Delphi-Quellcode:
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;
- bei den anderen entsprechend auch anpassen... :-D

Hoffe geholfen zu haben... :hi:

Apollonius 12. Apr 2008 11:25

Re: Wie vereinfachen und warum Aussetzer?
 
Random(n) liefert Werte von Null bis n-1, daher ist haentschmans Kommentar nicht ganz korrekt.

haentschman 12. Apr 2008 11:29

Re: Wie vereinfachen und warum Aussetzer?
 
Zitat:

Random(n) liefert Werte von Null bis n-1
upps...ehrlich ? :oops:

stimmt! Range gibt ja nicht an, "bis n" sondern "n Werte ab 0" d.h. "Null bis n-1" 8)
Delphi-Quellcode:
Lotto := random(2);
müßte dann heißen...
Delphi-Quellcode:
Lotto := random(3);
:hi:

Journeyman 12. Apr 2008 12:29

Re: Wie vereinfachen und warum Aussetzer?
 
danke schonma

wo genau muss das randomize stehn?

DeddyH 12. Apr 2008 12:31

Re: Wie vereinfachen und warum Aussetzer?
 
Am Besten im OnCreate.

Die Muhkuh 12. Apr 2008 12:32

Re: Wie vereinfachen und warum Aussetzer?
 
Am besten im OnCreate der Form.

RavenIV 15. Apr 2008 09:03

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:
procedure LadeImage(Bild: string);
begin
  // Pseudo-Code
  Pfad herausfinden;
  Bild laden;
  Aus Bildname die Caption auslesen;
  Caption setzen;
end;
Aufruf wäre dann so:
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:
// 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;
P.S. Ein besserer Titel für den Thread wäre auch nicht schlecht.


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