Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 17, 2025 08:47

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Dez 16, 2008 19:52 
Offline
DGL Member

Registriert: Mi Dez 03, 2008 20:07
Beiträge: 7
Hoi, also ich bin ja jetzt auf allgemeinen Hinweis auf class statt object umgestiegen. Jetzt hab ich ein weiteres Progrämmchen, das nachher quasi array of String auslesen soll und je nachdem was drinsteht handeln soll, damit man in meinem Adventure die einzelnen Level halt nicht alle mit Delphi programmieren muss, denn das wär ja doof.

Ich habe also die wunderschöne class AOCompiler, der bisher nichts kann (bzw. können sollte) als Sound abzuspielen. Das hat als object auch alles geklappt, aber jetzt nicht mehr :(
Ich lade anfangs einfach in ein StringArray ein paar Zeilen um zu testen und starte damit dann die Prozedur Compile

Code:
  1.  
  2.   AOCompiler = class
  3.     soundVerzeichnis : String;
  4.     anweisung : array of String;
  5.     procedure Compile(_anweisung : array of String);
  6.     procedure playSoundfile(soundfile : String);
  7.     procedure start;
  8.     function Sound(zaehler : integer): integer;
  9.  
  10.   end;
  11.  
  12. procedure AOCompiler.Compile(_anweisung: array of string);
  13. var
  14. i, laenge : integer;
  15. zaehler : integer;
  16. begin
  17.   //zaehler und anweisung eintragen
  18.     showMessage('Setze Zähler');
  19.     zaehler := -1;
  20.     soundverzeichnis:= 'aaa';
  21.     showMessage('Zähler gesetzt');
  22.     setLength(anweisung, 1);
  23.     showMessage('Test');
  24.     SetLength(self.anweisung, Length(_anweisung));
  25.     //laenge speichern, zwecks effizienz
  26.     showMessage('Laenge einlesen');
  27.     laenge := length(anweisung);
  28.     showMessage('Anweisung einlesen');
  29.     for I := 0 to laenge - 1 do
  30.       begin
  31.         anweisung[i] := _anweisung[i];
  32.       end;
  33.   if length(anweisung) > 0 then
  34.   begin
  35.       showMessage('Kurz vor der Schleife');
  36.       while zaehler < laenge - 1 do
  37.       begin
  38.         //Zähler hochsetzen, um nächste Zeile zu lesen
  39.         showMessage('Noch ein Schleifendurchlauf mit' + anweisung[zaehler]);
  40.         zaehler := zaehler + 1;
  41.         //Sound
  42.         if anweisung[zaehler] = 'sound' then
  43.           zaehler := Sound(zaehler);
  44.       end;
  45.   end;
  46. end;
  47.  


Schon bei soundVerzeichnis := 'aaa' wird fleissig gemeckert von wegen AccessViolation at gruselige Zahl, aber ich persönlich seh da nichtmal im Ansatz n Fehler, mit SetLength(anweisung, bla) gibts ähnliche Probleme, anfangs hat ich den Zähler auch global und auch da gabs die Probleme... Warum? Bitte helft!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 16, 2008 20:13 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hallo,

du solltest vorher das Objekt erstellen, mit:

Code:
  1.  
  2. var
  3.   Compiler: AOCompiler;
  4.  
  5. Compiler:= AOCompiler.Create();
  6. Compiler.Compile();
  7.  


Du solltest außerdem Klassen mit einem 'T' beginnen, also TAOCompiler. Ich würde dir erstmal empfehlen dich in OOP einzulesen :wink:

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 16, 2008 21:22 
Offline
DGL Member

Registriert: Mi Dez 03, 2008 20:07
Beiträge: 7
Ich war immer der Meinung, dass Delphi ohne Konstruktor klarkommt... Aber gut, ist bei class wohl anders, die benutz ich auch noch nicht lange. Dummerweise hilft mir das auch nicht viel weiter. Meine Testprozedur:

Code:
  1.  
  2. procedure TForm1.test;
  3. var
  4. anweisung : array of String;
  5. begin
  6.   setLength(anweisung, 5);
  7.   anweisung[0] := 'blabla';
  8.   anweisung[1] := 'machnichts';
  9.   anweisung[2] := 'sound';
  10.   anweisung[3] := 'Bischofswein.mp3';
  11.   anweisung[4] := 'zum Ignorieren';
  12.   showMessage('Versuche Create');
  13.   Befehlsverarbeitung.Create;
  14.   showMessage('Create geschafft');
  15.   Befehlsverarbeitung.Compile(anweisung);
  16.   //compiler.playSound('Bischofswein.mp3');
  17. end;
  18.  


Das Versuche Create wird noch ausgegeben, aber danach kommt die allseits bekannte nichtssagende Fehlermeldung wie vorher bei der Veränderung von Variablen. Hab jetzt nicht so lange gegoogelt, hab aber nichts weiter gefunden, was man speziell beim Konstruktor vieleicht reinschreiben muss, also hab ichs einmal mit einem schnell selbstgeschriebenen probiert, der nichts weiter macht, und einmal mit dem Standardding, beide male gleiches Ergebnis...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 16, 2008 21:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Code:
  1.  
  2.   Befehlsverarbeitung.Create;
  3.  

ändern in
Code:
  1.  
  2.  Befehlsverarbeitung := AOCompiler.create();
  3.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 16, 2008 22:06 
Offline
DGL Member

Registriert: Mi Dez 03, 2008 20:07
Beiträge: 7
Ahh, und auf einmal funktioniert es :) Super, danke


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]