Fehlermeldung bei Abbruch der Beenden-Routine
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Fehlermeldung bei Abbruch der Beenden-Routine
Ich habe das, zum, mit Xclass erzeugten Fenster, beenden, festgelegt.
PROC AppQuit
LOCAL nButton, oXbp := SetAppFocus()
nButton := ConfirmBox( , ;
"Wollen Sie das Programm beenden ?", ;
"Beenden", ;
XBPMB_YESNO , ;
XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE )
IF nButton == XBPMB_RET_YES
CLOSE ALL
QUIT
ENDIF
IF nButton == XBPMB_RET_NO
SetAppFocus( oXbp )
endif
RETURN
Jetzt meine Frage: Wenn ich das über einen Button aufrufe funktioniert es einwandfrei, d.h. Ja beendet das Programm und Nein schließt die Meldung und lässt das Fenster offen. Wenn ich aber das mit setappclose() zum Standard-Schließendialog mache, wird beim aufs rechte Kreuz klicken, die Routine aufgerufen und bei Ja auch das Programm beendet, aber bei Nein erscheint diese Meldung:
oError:args :
-> VALTYPE: U VALUE: NIL
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:genCode : 2
oError:operation : .not.<NIL>
oError:osCode : 0
oError:severity : 2
oError:subCode : 3
oError:subSystem : BASE
oError:thread : 1
Aufgerufen von DSDIALOG:ENDDIALOG(1345)
Aufgerufen von (B)DSDIALOG:INIT(250)
Aufgerufen von DSDIALOG:HANDLEEVENT(1072)
Aufgerufen von DSAPP:HANDLEEVENT(927)
Aufgerufen von APPEXEC(156)
Aufgerufen von MAIN(12)
PROC AppQuit
LOCAL nButton, oXbp := SetAppFocus()
nButton := ConfirmBox( , ;
"Wollen Sie das Programm beenden ?", ;
"Beenden", ;
XBPMB_YESNO , ;
XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE )
IF nButton == XBPMB_RET_YES
CLOSE ALL
QUIT
ENDIF
IF nButton == XBPMB_RET_NO
SetAppFocus( oXbp )
endif
RETURN
Jetzt meine Frage: Wenn ich das über einen Button aufrufe funktioniert es einwandfrei, d.h. Ja beendet das Programm und Nein schließt die Meldung und lässt das Fenster offen. Wenn ich aber das mit setappclose() zum Standard-Schließendialog mache, wird beim aufs rechte Kreuz klicken, die Routine aufgerufen und bei Ja auch das Programm beendet, aber bei Nein erscheint diese Meldung:
oError:args :
-> VALTYPE: U VALUE: NIL
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:genCode : 2
oError:operation : .not.<NIL>
oError:osCode : 0
oError:severity : 2
oError:subCode : 3
oError:subSystem : BASE
oError:thread : 1
Aufgerufen von DSDIALOG:ENDDIALOG(1345)
Aufgerufen von (B)DSDIALOG:INIT(250)
Aufgerufen von DSDIALOG:HANDLEEVENT(1072)
Aufgerufen von DSAPP:HANDLEEVENT(927)
Aufgerufen von APPEXEC(156)
Aufgerufen von MAIN(12)
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Stevie.
In dieser Zeile wird ein Parameter/eine Variable benutzt, die nicht existiert.
Code: Alles auswählen
DSDIALOG:ENDDIALOG(1345)
Herzlich,
Tom
Tom
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Das Problem ist: Welche? Der Text wird, wie es aussieht, über Appexec aufgerufen. Ich hab ja nur rund 300 Zeilen.Tom hat geschrieben:Hallo, Stevie.
In dieser Zeile wird ein Parameter/eine Variable benutzt, die nicht existiert.Code: Alles auswählen
DSDIALOG:ENDDIALOG(1345)
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Stevie,
die Zeile ist innerhalb der Sourcen von XClass++.
Wenn Du also die Sourcen hast, dann musst Du in der dsdialog.prg in Zeile 1345 schauen. Meine dsdialog.prg ist vom 08.01.2007 und hat in der Zeile 1345 was anderes stehen!
Jedoch glaube ich nicht, dass Du dort einen Fehler findest - vielmehr wird Dich das auf die richtige Spur führen, wahrscheinlich ist Dein Objekt zu dem Zeitpunkt bereits nicht mehr aktiv...
Viele Grüße,
Martin
die Zeile ist innerhalb der Sourcen von XClass++.
Wenn Du also die Sourcen hast, dann musst Du in der dsdialog.prg in Zeile 1345 schauen. Meine dsdialog.prg ist vom 08.01.2007 und hat in der Zeile 1345 was anderes stehen!
Jedoch glaube ich nicht, dass Du dort einen Fehler findest - vielmehr wird Dich das auf die richtige Spur führen, wahrscheinlich ist Dein Objekt zu dem Zeitpunkt bereits nicht mehr aktiv...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Meine dsdialog.prg ist vom 8.11.2004. Da steht dann diese Fkt.:Martin Altmann hat geschrieben:Stevie,
die Zeile ist innerhalb der Sourcen von XClass++.
Wenn Du also die Sourcen hast, dann musst Du in der dsdialog.prg in Zeile 1345 schauen. Meine dsdialog.prg ist vom 08.01.2007 und hat in der Zeile 1345 was anderes stehen!
Jedoch glaube ich nicht, dass Du dort einen Fehler findest - vielmehr wird Dich das auf die richtige Spur führen, wahrscheinlich ist Dein Objekt zu dem Zeitpunkt bereits nicht mehr aktiv...
Viele Grüße,
Martin
METHOD EndDialog(uRet) CLASS dsDialog
LOCAL oSelf := self:&(self:classname())
if IsCodeblock(::bQueryClose) .and. ! ::WantToClose
if ! eval(::bQueryClose, self) //Zeile 1345
RETURN self
endif
::WantToClose := True
endif
// set modal dialog result
if ::lModal .and. ! IsNil(uRet)
::uDlgResult := uRet
endif
::WantToClose := True
if ! ::lModal .and. ::nAppMode == DS_CHILD_DLG
PostAppEvent(dsEV_DLG_DESTROY,,, self)
elseif ::nAppMode != DS_CHILD_DLG
oSelf:Destroy()
endif
RETURN SELF
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hmm,
damit hast Du eine ziemlich alte XClass++-Version...
Was für eine Xbase++-Version nutzt Du denn?
Viele Grüße,
Martin
damit hast Du eine ziemlich alte XClass++-Version...
Was für eine Xbase++-Version nutzt Du denn?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Re: Fehlermeldung bei Abbruch der Beenden-Routine
Hallo,stevie hat geschrieben:
Jetzt meine Frage: Wenn ich das über einen Button aufrufe funktioniert es einwandfrei, d.h. Ja beendet das Programm und Nein schließt die Meldung und lässt das Fenster offen. Wenn ich aber das mit setappclose() zum Standard-Schließendialog mache, wird beim aufs rechte Kreuz klicken, die Routine aufgerufen und bei Ja auch das Programm beendet, aber bei Nein erscheint diese Meldung:
mal zum Verständnis:
kann es sein, dass du statt setappclose eher setQueryClose von xclass meinst?
Wenn ja dann sieht ein Aufruf sehr wahrscheinlich so ähnlich aus:
oDlg: setQueryClose := { |o| AppQuit() }
Falls dem so ist, muss AppQuit() .T. oder .F. zurückgeben, jenachdem, ob das Fenster geschlossen werden soll oder nicht.
So wäre dir auch beim "Ja" der Fehler aufgetaucht, da du aber mit QUIT das Programm schon vorher beendest, wird das Ergebnis des Codeblocks nicht mehr ausgewertet.
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Re: Fehlermeldung bei Abbruch der Beenden-Routine
So siehts aus. Das das was zurückgeben muss, wusste ich nicht.Robert hat geschrieben:Hallo,stevie hat geschrieben:
Jetzt meine Frage: Wenn ich das über einen Button aufrufe funktioniert es einwandfrei, d.h. Ja beendet das Programm und Nein schließt die Meldung und lässt das Fenster offen. Wenn ich aber das mit setappclose() zum Standard-Schließendialog mache, wird beim aufs rechte Kreuz klicken, die Routine aufgerufen und bei Ja auch das Programm beendet, aber bei Nein erscheint diese Meldung:
mal zum Verständnis:
kann es sein, dass du statt setappclose eher setQueryClose von xclass meinst?
Wenn ja dann sieht ein Aufruf sehr wahrscheinlich so ähnlich aus:
oDlg: setQueryClose := { |o| AppQuit() }
Falls dem so ist, muss AppQuit() .T. oder .F. zurückgeben, jenachdem, ob das Fenster geschlossen werden soll oder nicht.
So wäre dir auch beim "Ja" der Fehler aufgetaucht, da du aber mit QUIT das Programm schon vorher beendest, wird das Ergebnis des Codeblocks nicht mehr ausgewertet.
Es war nur komisch, dass der Fehler nur beim Kreuz auftrat und sonst nicht.
Der Fehler ist deshalb nur bei Nein gekommen, weil nur in diesem Fall die Funktion AppQuit() bis zum Ende ausgeführt wurde und somit der Codeblock keinen Rückgabewert erhalten hat.stevie hat geschrieben:bei Ja auch das Programm beendet, aber bei Nein erscheint diese Meldung:
Bei Ja wurde QUIT aufgerufen und das Programm beendet. Dadurch wird der Rückgabewert von AppQuit gar nicht mehr ausgewertet.