AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie vereinfachen und warum Aussetzer?

Ein Thema von Journeyman · begonnen am 12. Apr 2008 · letzter Beitrag vom 15. Apr 2008
Antwort Antwort
Journeyman

Registriert seit: 11. Apr 2008
7 Beiträge
 
#1

Wie vereinfachen und warum Aussetzer?

  Alt 12. Apr 2008, 12:03
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?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#2

Re: Wie vereinfachen und warum Aussetzer?

  Alt 12. Apr 2008, 12:22
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...

Hoffe geholfen zu haben...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wie vereinfachen und warum Aussetzer?

  Alt 12. Apr 2008, 12:25
Random(n) liefert Werte von Null bis n-1, daher ist haentschmans Kommentar nicht ganz korrekt.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#4

Re: Wie vereinfachen und warum Aussetzer?

  Alt 12. Apr 2008, 12:29
Zitat:
Random(n) liefert Werte von Null bis n-1
upps...ehrlich ?

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

Registriert seit: 11. Apr 2008
7 Beiträge
 
#5

Re: Wie vereinfachen und warum Aussetzer?

  Alt 12. Apr 2008, 13:29
danke schonma

wo genau muss das randomize stehn?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

Re: Wie vereinfachen und warum Aussetzer?

  Alt 12. Apr 2008, 13:31
Am Besten im OnCreate.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Wie vereinfachen und warum Aussetzer?

  Alt 12. Apr 2008, 13:32
Am besten im OnCreate der Form.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Wie vereinfachen und warum Aussetzer?

  Alt 15. Apr 2008, 10:03
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.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz