AGB  ·  Datenschutz  ·  Impressum  







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

Bedingung "greift" nicht.

Ein Thema von Neotracer64 · begonnen am 23. Jun 2005 · letzter Beitrag vom 23. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#1

Bedingung "greift" nicht.

  Alt 23. Jun 2005, 19:38
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*
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 19:40
Dein Schnipsel ist zu kurz, da der Fehler woanders liegt (obwohl in dem Codeteil schon einer ist)...
Zeig mal mehr (oder Alles)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 19:41
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 19:42
Setz das movedone:=2; doch direkt nach dem begin, dann dürfte das Thema erledigt sein.
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 19:52
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.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 19:55
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
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#7

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 19:58
@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.

@SirThornberry:
Wirklich sehr praktisch der Callstack 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

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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 20:26
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#9

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 20:29
Ansicht -> Debug-Fenster -> Überwachte Ausdrücke und (zumindestens unter Delphi 2005) Lokale Variablen
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Bedingung "greift" nicht.

  Alt 23. Jun 2005, 21:50
Oder Breakpoint und dann Mauszeiger auf Variable halten, dann erscheint auch was
Felix Alter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:33 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