![]() |
if Schleife?
Hallo,
ich wurde gebeten, zu dem Thema einen neuen Thread zu eröffnen. Code ist folgender:
Delphi-Quellcode:
Das Problem ist, die Variable "firststart" wird einfach übergangen. Die dazugehörige if Schleife, macht einfach nichts und ich weiß nicht wieso. Haltepunkte in der if Schleife, funzen nicht.
Ini := TIniFile.Create(form1.programmdirectory.Caption+'..\game.ini');
Ausgelesen := Ini.ReadString('Global','LangFile','' ); //1 stream := Ini.ReadString('Global', 'Stream', ''); music := Ini.ReadInteger('Global', 'Music', 0); slot := Ini.ReadString('Global', 'Slot', ''); musik := Ini.ReadString('Global', 'Musik', ''); firststart := ini.ReadInteger('Global', 'firststart', 0); form1.Caption := IntToStr(firststart); firststart := 0; if(firststart = 0) then begin if MessageDlg('Do you want to play Backgroundmusic ?', mtConfirmation, [mbYes, mbNo], 0)=mrYes then begin Musik :='1'; ini.WriteString('Global', 'Musik', '1'); ini.WriteString('Global', 'firststart', '0'); end else begin Musik:='0'; ini.WriteString('Global', 'Musik', '0'); ini.WriteString('Global', 'firststart', '0'); end; end; Ini.Free; Gruß, Andreas |
Re: if Schleife?
If-Schleifen gibt es nicht!
|
Re: if Schleife?
Setz doch mal den Haltepunkt VOR die
![]() |
Re: if Schleife?
[OT]
Zitat:
:cheer: [/OT] wo und wie hast du firststart deklariert ? |
Re: if Schleife?
Bitte formatiere deinen Quelltext korrekt!
Hier dein Problem: du liest firststart aus der Ini-Datei aus und definierst anschliessend firststart:= 0
Delphi-Quellcode:
firststart := ini.ReadInteger('Global', 'firststart', 0);
form1.Caption := IntToStr(firststart); firststart := 0; // diese Zeile entfernen |
Re: if Schleife?
:gruebel: trotzdem sollte firststart 0 sein und die Bedingung erfüllt sein.
|
Re: if Schleife?
Hallo,
firststart ist in einer ini Datei definiert. Vor der if Schleife (ich bleib dabei, das ist ne Schleife fg) steht aber auch noch firststart:=0;... ist ein Integer Feld. Der Haltepunkt auf dieser Zeile funktioniert, das Programm hält an. Gruß, Andreas |
Re: if Schleife?
Zitat:
|
Re: if Schleife?
Zitat:
Du willst also gar nichts dazulernen? Dann brauchen wir dir ja eigentlich auch nicht weiterhelfen. |
Re: if Schleife?
Vermutung:
In deinem restlichen Quelltext fehlt irgendwo ein "end". Dadurch kommen machmal komische Programmabläufe zustande. Formatiere deinen gesamten Quelltext mal etwas übersichtlicher und kontrolliere die begin/end Blöcke. :hi: Beispiel um die Zusammengehörigkeit der begin/end besser zu sehen, da untereinander
Delphi-Quellcode:
form1.Caption := IntToStr(firststart);
firststart := 0; if(firststart = 0) then begin if MessageDlg('Do you want to play Backgroundmusic ?', mtConfirmation, [mbYes, mbNo], 0)=mrYes then begin Musik :='1'; ini.WriteString('Global', 'Musik', '1'); ini.WriteString('Global', 'firststart', '0'); end else begin Musik:='0'; ini.WriteString('Global', 'Musik', '0'); ini.WriteString('Global', 'firststart', '0'); end; end; |
Re: if Schleife?
Zitat:
Die Neuformatierung bringt leider nix... |
Re: if Schleife?
Hast du besagte Zeile (firststart := 0) entfernt? Wie lautet dein überarbeiteter/neuformatierter Code-Abschnitt?
|
Re: if Schleife?
Zitat:
|
Re: if Schleife?
Zitat:
|
Re: if Schleife?
Zitat:
Am Code hab ich nix geändert, außer ihn zu formatieren. Dafür hab ich nen IDE Plugin, deshalb ging es so schnell. |
Re: if Schleife?
Schleifen wiederholen Befehlssequenzen, IF-Abfragen durchlaufen Befehlsequenzen 1 mal.
Wenn du "If-Schleife" nicht aus deinem Wortschatz streichst, wirst du noch öfter anecken. Ich habe einmal gelernt: "Der Strom sucht sich den kürzesten Weg". Genau so ein Quatsch! Das disqualifiziert dich lebenslang als Laien! [Edit] Sorry, die Wortkombination macht mich kirre [/Edit] |
Re: if Schleife?
Zitat:
|
Re: if Schleife?
Ok, kapiert... wie heisst es dann?
|
Re: if Schleife?
Zitat:
|
Re: if Schleife?
"Bedingte Verzeigung", "IF-Abfrage", "IF-Sequenz",... "IF-Befehl".... sowas in der Art. Aber eben keine Schleife.
Da das nun geklärt ist... |
Re: if Schleife?
...ist ja alles gut und schön, hilft aber nicht bei dem Problem :zwinker:
Hänge doch mal die gesamte Unit an. Mit diesem Ausschnitt kann man nicht wirklich weiterkommen. |
Re: if Schleife?
Liste der Anhänge anzeigen (Anzahl: 1)
Hab die Unit angehängt, ist aber nicht grade klein :)
|
Re: if Schleife?
Entferne Zeile 366 (firststart := 0; ) und versuche es erneut. Dann sollte es ggf. klappen :)
|
Re: if Schleife?
Nein, klappt leider nicht...
|
Re: if Schleife?
Zitat:
Zitat:
|
Re: if Schleife?
Der Pfad könnte ggf. falsch sein, verwende "IncludeTrailingPathDelimiter". Weiterhin solltest Du eher auf firststart = 1 prüfen. Die Abfrage nach der Musik soll ja beim ersten Start kommen ;-)
Delphi-Quellcode:
Ini := TIniFile.Create(IncludeTrailingPathDelimiter(Self.programmdirectory.Caption) + '..\game.ini');
try Ausgelesen := Ini.ReadString('Global', 'LangFile', ''); // 1 stream := Ini.ReadString('Global', 'Stream', ''); music := Ini.ReadInteger('Global', 'Music', 0); slot := Ini.ReadString('Global', 'Slot', ''); musik := Ini.ReadString('Global', 'Musik', ''); firststart := Ini.ReadInteger('Global', 'firststart', 0); Self.Caption := IntToStr(firststart); if (firststart = 1) then begin if MessageDlg('Do you want to play Backgroundmusic ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin musik := '1'; Ini.WriteString('Global', 'Musik', '1'); Ini.WriteString('Global', 'firststart', '0'); end else begin musik := '0'; Ini.WriteString('Global', 'Musik', '0'); Ini.WriteString('Global', 'firststart', '0'); end; end; finally Ini.Free; end; |
Re: if Schleife?
Ich muss leider zugeben, dass ich keine Ursache für dieses Verhalten finden kann. Es handelt sich um eine lokale Variable des korrekten Typs, die Abfrage sollte IMO auf jeden Fall erreicht werden, die Bedingung trifft auch zu, da explizit vorher sichergestellt :gruebel:. Es könnte höchstens sein, dass ich aufgrund der ziemlich gruseligen Formatierung einen Fall übersehen habe.
|
Re: if Schleife?
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab das ganze mal eingerückt und nach den begin /end geschaut. Sieht soweit in Ordnung aus. Dann weis ich auch nicht mehr. :gruebel:
|
Re: if Schleife?
Leider hilft das nicht, der Pfad stimmt, die Ini Datei wird auch korrekt ausgelesen. Das Ergebnis steht ja auch in form1.caption, kann ich also überprüfen. Und das stimmt.
|
Re: if Schleife?
Also beim Start der Anwendung (FormCreate bzw. FormShow) hatte ich manchmal Probleme mit Application.MessageBox. Vielleicht trifft dieses Problem ja auch hier bei MessageDlg zu:
Versuch mal statt
Delphi-Quellcode:
dieses:
if MessageDlg('Do you want to play Backgroundmusic ?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
Delphi-Quellcode:
if MessageBox(Handle, 'Do you want to play Backgroundmusic ?', 'Confirmation',
MB_YESNO or MB_ICONQUESTION) = IDYES then |
Re: if Schleife?
Angeblich überspringt der Debugger aber die Abfrage (wobei ich mir das nur schwer vorstellen kann).
|
Re: if Schleife?
Zitat:
Es sei denn Du meinst die Abfrage da rüber (if firstatrt = ...), das sollte wirklich nicht übersprungen werden. (Falls der Wert stimmt) |
Re: if Schleife?
Zitat:
Tausend Dank, du bist meine Rettung. Nu muß nur noch mein anderer Thread gehn. Gruß, Andreas |
Re: if Schleife?
:wall: Schön, wenn man die Infos so zeitig erhält. Ich war die ganze Zeit davon ausgegangen, dass die Abfrage nicht erfüllt wird.
|
Re: if Schleife?
Zitat:
Aber da der Haltepunkt übergangen wurde, dachte ich es liegt am if-Statement. |
Re: if Schleife?
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich habe da mal mit Delphi 2010 Professional (Win 7 x64 Prof, Win Vista x64 Prof) ein kleines Test-Projekt angelegt und da wird der MessageDlg korrekt angezeigt.
Wäre ja jetzt interessant zu wissen, ob das an der Delphi-Version liegt oder am Betriebssystem (scheint wohl am Delphi zu liegen). @Sanguis: Compiliere doch mal das angehängte Projekt und teile uns mit, ob das Programm direkt beim Start den MessageDlg anzeigt. |
Re: if Schleife?
Das trat bei mir zumindest noch bei Delphi 7 oder Delphi 2005 auf (Welches genau, vermag ich allerdings nicht mehr zu sagen). Aber wenn es unter Delphi 2010 funktioniert, ist das ja schon mal erfreulich :)
|
Re: if Schleife?
Das angehängte Programm zeigt keine MessaeBox. Aber ist ja zum Glück gelöst, auch wenn ich es nicht logisch finde *g*
Ich nutze Delphi2007 |
Re: if Schleife?
Also, ich kann bestätigen, dass es bei Delphi 2007 einen Bug mit der Funktion "TApplication.GetActiveFormHandle" gibt. Der Fehler kann wie folgt reproduziert werden.
(Vergleiche: QC #75756/#78400/#78883: No exceptionmessage shown if form is released)
Delphi-Quellcode:
Die Ursache des Problems ist, dass die CM_RELEASE-Message in der Message-Warteschlange steckt und dann erst beim Anzeigen der Messagebox abgearbeitet wird. Da die Messagebox als Parent genau das zu schließende Fenster hat, wird sie ebenfalls geschlossen - also nie angezeigt.
procedure TForm1.Button1Click(Sender: TObject);
begin Form2 := TForm2.Create(Self); Form2.Show; Form2.Release; raise Exception.Create('Keine Fehlermeldung - oder doch?'); end; Ich verstehe allerdings nicht, wie man das hier besprochene Verhalten reproduzieren kann. Nun meine Frage: Hat jemand ein Beispielprogramm, welches den Fehler (MessageDlg wird nicht angezeigt - MessageBox wird aber angezeigt) von Sanguis mit Delphi 2007 reproduziert? |
Re: if Schleife?
samso siehe Beitrag von Sir Rufo.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 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