![]() |
Bedingung "greift" nicht.
Ich will eine MessageBox mit der Meldung "Leider unentschieden" ausgeben. Aber in dem Programm wird sie genau 2 mal hintereinander angezeigt, obwohl ich alles mögliche getan habe, was dies verhindern sollte.
Dieser Code wird übrigens auch nur einmal ausgeführt...Ist mir wirklich schleierhaft was da abläuft. Die Bedingungsvariablen, die das anzeigen wieder ermöglichen also movedone:=0; werden erst gesetzt, wenn der User ein Button drückt sonst NICHT!
Delphi-Quellcode:
Ich hab alles mögliche und auch verrückte getan. Warum kommt die Messagebox 2-mal hintereinander ? *grml*
If not (movedone = 2) Then begin
//showmessage('Unentschieden, schade'); s1:= Pchar('Leider unentschieden !'); s2:= Pchar('Tic Tac Toe'); If Windows.MessageBox(Handle,s1,s2,MB_ICONINFORMATION) = IDOK Then movedone:=2; s1:=''; s2:=''; movedone:=2; exit; end; end; |
Re: Bedingung "greift" nicht.
Dein Schnipsel ist zu kurz, da der Fehler woanders liegt (obwohl in dem Codeteil schon einer ist)...
Zeig mal mehr (oder Alles) |
Re: Bedingung "greift" nicht.
setz doch einfach mal einen Haltepunkt an die Stelle wo die Messagebox aufgerufen wird und schau dir jeweils das Callstack an, da siehst du von wo aus das ganze aufgerufen wird.
(View->Debug Windows->Call stack) Kanns eventuell sein dass, das ganze über einen Timer aufgerufen wird und weil der Timer noch aktiv ist kommt die Meldung ein zweites mal? |
Re: Bedingung "greift" nicht.
Setz das movedone:=2; doch direkt nach dem begin, dann dürfte das Thema erledigt sein.
|
Re: Bedingung "greift" nicht.
Irgendwie macht der Schnipsel doch gar keinen Sinn. Du zeigst die Messagebox an, und wenn man OK klickt setzt du movedone auf 2. Danach belegst du movedone wieder mit 2. Warum doppelt?
In was für einem Kontext steht denn dieser Code? Poste mal etwas mehr, so kann man wirklich nicht viel sagen. |
Re: Bedingung "greift" nicht.
Zitat:
Eventuell ist dies wieder ein Beispiel das es vorteile hat den Code so zu formatieren das man Begin-End-Blöcke erkennt bzw. diese bei jeder IF-THEN Abfrage zu verwenden ;-) |
Re: Bedingung "greift" nicht.
@Sharky and leddl: Die Messagebox hat eh nur einen Button nämlich OK. Da ich verzeweifelt war hab ich movedone:=2 überall hinverstreut, damit es ja nicht 2x kommt. :oops:
@SirThornberry: Wirklich sehr praktisch der Callstack :D danke. So ich hab jetzt gesehen, dass bei der Prozedur, die das aufruft, in einem bestimmten Zweig von If-Bedingungen etwas doppelt zutriffen kann und somit movedone wieder auf 0 gesetzt wird. Das hab ich jetzt behoben :D Damit mir diese Dummheit nicht passiert: Wie kann ich mir anschauen welche Werte die Variablen haben, an der Stelle eines Breakpoints ? Ach ich schau selber mal. Thx an alle :hello: |
Re: Bedingung "greift" nicht.
dafür gibts die watches "View->Debug Windows->Watches", wenn es sich um eine funktion handelt deren result du wissen willst musst du dort bei dem wert noch "Allow functioncalls" aktivieren und fertig ist.
|
Re: Bedingung "greift" nicht.
Ansicht -> Debug-Fenster -> Überwachte Ausdrücke und (zumindestens unter Delphi 2005) Lokale Variablen
|
Re: Bedingung "greift" nicht.
Oder Breakpoint und dann Mauszeiger auf Variable halten, dann erscheint auch was ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 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