Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bedingung "greift" nicht. (https://www.delphipraxis.net/48331-bedingung-greift-nicht.html)

Neotracer64 23. Jun 2005 18:38


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:
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;
Ich hab alles mögliche und auch verrückte getan. Warum kommt die Messagebox 2-mal hintereinander ? *grml*

alzaimar 23. Jun 2005 18:40

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)

SirThornberry 23. Jun 2005 18:41

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?

scp 23. Jun 2005 18:42

Re: Bedingung "greift" nicht.
 
Setz das movedone:=2; doch direkt nach dem begin, dann dürfte das Thema erledigt sein.

leddl 23. Jun 2005 18:52

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.

Sharky 23. Jun 2005 18:55

Re: Bedingung "greift" nicht.
 
Zitat:

Zitat von Neotracer64
...

Delphi-Quellcode:
If not (movedone = 2) Then begin
  .
  If Windows.MessageBox(Handle,s1,s2,MB_ICONINFORMATION) = IDOK Then movedone:=2;
  s1:='';
  s2:='';
  movedone:=2;
  .
  end;
 end;
...

Wenn ich das richtig sehe wird movedone doch in jedem Fall auf 2 gesetzt. Egal was in der Messagebox gemacht wird.
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 ;-)

Neotracer64 23. Jun 2005 18:58

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:

SirThornberry 23. Jun 2005 19:26

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.

Phistev 23. Jun 2005 19:29

Re: Bedingung "greift" nicht.
 
Ansicht -> Debug-Fenster -> Überwachte Ausdrücke und (zumindestens unter Delphi 2005) Lokale Variablen

FAlter 23. Jun 2005 20:50

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.
Seite 1 von 2  1 2      

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