Hallo an alle Beteiligten und Interessierten,
VO hat seine eigene Runtime, innerhalb derer mit diesen untypisierten Geschichten umgegangen werden kann.
X# hat die nicht, daher muss das Team versuchen, das mit dem Compiler irgendwo hinzubekommen.
Ich finde es sehr beeindruckend, welcher Grad der Kompatibilität da erreicht wurde.
Auf der anderen Seite denke ich auch, daß wir unseren Code entsprechend anpassen müssen - und zwar schon auf der VO-Seite, wo immer möglich.
Gerade die Migration gibt uns Hilfen an die Hand, unseren VO-Code besser, performanter und sicherer zu gestalten - und als Nebenwirkung wird die Migration dann auch noch erleichtert.
Gerade in Eventhandlern ist der Einsatz von Typisierung sehr lohnend - und ganz besonders in der Dispatch-Methode, die unzählige Male ausgeführt wird. Also kann ich nur empfehlen, Euren VO-Code anzupassen, ja, jetzt sofort, unverzüglich (um jemand anderen zu zitieren <g>).
Wolfgang
RedimDataWindow
Moderator: wriedmann
RedimDataWindow
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
-
- Posts: 774
- Joined: Wed May 17, 2017 8:50 am
- Location: Germany
RedimDataWindow
Hallo Franz,
das Grundgerüst der App mit der ich die Hoverbuttons getestet habe sieht so aus:
Wobei die Hoverbuttons auf dem MainDialog angeordnet sind. Dieses App Gerüst erhält man wenn man eine App per XIDE Galary erzeugt. Wird im Programmablauf nun eine Exception ausgelöst wird in der obigen Start() die Runtime Funktion ErrorDialog() aufgerufen, die dann genau das anzeigt was Du in meinem geposteten Image siehst. Hast Du nicht solch einen Aufbau ?
Da Du in Deiner ResizeWindow() einen BEGIN...END SEQUENCE Block hast siehst Du auch nur das
was dort per ErrorBox{, uError:Description}:Show() anzeigt wird. Ersetze einfach mal die Zeile:
mit:
Nun noch die 3 Dispatch() Änderungen temporär deaktivieren, da es ja sonst nicht scheppert
Gruß
Karl-Heinz
das Grundgerüst der App mit der ich die Hoverbuttons getestet habe sieht so aus:
Code: Select all
[STAThread];
FUNCTION Start() AS INT
LOCAL oXApp AS XApp
TRY
oXApp := XApp{}
oXApp:Start()
CATCH oException AS Exception
ErrorDialog(oException)
END TRY
RETURN 0
CLASS XApp INHERIT App
METHOD Start()
LOCAL oDlg AS MainDialog
oDlg := MainDialog{}
oDlg:Show()
RETURN SELF
END CLASS
Da Du in Deiner ResizeWindow() einen BEGIN...END SEQUENCE Block hast siehst Du auch nur das
was dort per ErrorBox{, uError:Description}:Show() anzeigt wird. Ersetze einfach mal die Zeile:
Code: Select all
ErrorBox{, uError:Description}:Show()
Code: Select all
Errordialog ( uError )
Gruß
Karl-Heinz
-
- Posts: 774
- Joined: Wed May 17, 2017 8:50 am
- Location: Germany
RedimDataWindow
Ja, bei dem war ich Anfang der 1980er genau 2x - jeweils incl. Zwangsumtausch und eingehender Kontrolle ob ich überhaupt rein darf.Also kann ich nur empfehlen, Euren VO-Code anzupassen, ja, jetzt sofort, unverzüglich (um jemand anderen zu zitieren <g>)
Gruß
Karl-Heinz
RedimDataWindow
Hallo Karl-Heinz,
die Start Funktion hatte ich schon so wie beschrieben, aber eben nur die Anzeige von uError:Description und das ist für eine Fehlersuche halt zuwenig. Mit ErrorDialog(uError) kommt jetzt auch eine komplette Meldung.
PS: Gibt es in X# eigentlich auch ein Fehlerlog wie bei VO (VOERROR.LOG), das kontrolliere ich bei den Kunden ab und zu mal und behebe eventuell auftretende Abstürze.
die Start Funktion hatte ich schon so wie beschrieben, aber eben nur die Anzeige von uError:Description und das ist für eine Fehlersuche halt zuwenig. Mit ErrorDialog(uError) kommt jetzt auch eine komplette Meldung.
PS: Gibt es in X# eigentlich auch ein Fehlerlog wie bei VO (VOERROR.LOG), das kontrolliere ich bei den Kunden ab und zu mal und behebe eventuell auftretende Abstürze.
-
- Posts: 774
- Joined: Wed May 17, 2017 8:50 am
- Location: Germany
RedimDataWindow
Hallo Franz,
Das einfachste was Du machen kannst ist die bestehende VO LogFile Klasse zu verwenden. Zusätzlich wird noch die X# Klasse #ErrorDialog benötigt. Innerhalb der WriteLog() Methode könnte z.B. ein "Vorspann" vor der eigentlichen Beschreibung der Excpetion in´s LogFile geschrieben werden. Der Name des LogFile dürfte klar sein: Name der Anwendung + ".log". Geschrieben wird die Datei in das Verzeichnis in dem die exe liegt.
Änderungen in der Start():
Wegen. der #ErrorDialog Klasse muss noch die Referenz "System.Windows.Forms" hinzugefügt werden.
So, nun Feuer frei
Gruß
Karl-Heinz
Das einfachste was Du machen kannst ist die bestehende VO LogFile Klasse zu verwenden. Zusätzlich wird noch die X# Klasse #ErrorDialog benötigt. Innerhalb der WriteLog() Methode könnte z.B. ein "Vorspann" vor der eigentlichen Beschreibung der Excpetion in´s LogFile geschrieben werden. Der Name des LogFile dürfte klar sein: Name der Anwendung + ".log". Geschrieben wird die Datei in das Verzeichnis in dem die exe liegt.
Code: Select all
CLASS ErrorDialogCustom INHERIT ErrorDialog
CONSTRUCTOR( txt AS STRING )
SUPER( txt )
SELF:WriteLog ( txt )
CONSTRUCTOR( e AS Exception )
SUPER( e )
SELF:WriteLog ( e:ToString() )
PUBLIC METHOD WriteLog ( txt AS STRING ) AS VOID
LOCAL oLog AS Logfile
LOCAL cErrorHeader AS STRING
IF SetErrorLog()
cErrorHeader := "*************** Fehler ***************" + CRLF + ;
"Version: " + Version() + CRLF + ;
"Uhrzeit: " + DToC ( Today() ) + " " + Time() + CRLF + ;
"Anwendung: " + ExecName ( TRUE ) + CRLF + CRLF
oLog := LogFile { "" , FALSE , TRUE }
oLog:DebugMsg( cErrorHeader + txt )
ENDIF
RETURN
END CLASS
Code: Select all
[STAThread];
FUNCTION Start() AS INT
LOCAL oDlg AS ErrorDialogCustom // <-----------
LOCAL oXApp AS XApp
TRY
oXApp := XApp{}
oXApp:Start()
CATCH oException AS Exception
oDlg := ErrorDialogCustom { oException } // <-------------
oDlg:ShowDialog() // <------------
END TRY
RETURN 0
CLASS XApp INHERIT App
METHOD Start()
LOCAL oDlg AS MainDialog
SetErrorLog ( TRUE) // <---- Nur dann wird ein LogFile geschrieben !
oDlg := MainDialog{}
oDlg:Show()
RETURN SELF
END CLASS
So, nun Feuer frei
Gruß
Karl-Heinz
RedimDataWindow
Hallo Karl-Heinz,
den Code habe ich soeben eingebaut, funkioniert, vielen Dank!
LG Franz
den Code habe ich soeben eingebaut, funkioniert, vielen Dank!
LG Franz