RedimDataWindow

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

User avatar
wriedmann
Posts: 3700
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

RedimDataWindow

Post by wriedmann »

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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Karl-Heinz
Posts: 774
Joined: Wed May 17, 2017 8:50 am
Location: Germany

RedimDataWindow

Post by Karl-Heinz »

Hallo Franz,

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

Code: Select all

ErrorBox{, uError:Description}:Show()
mit:

Code: Select all

Errordialog ( uError ) 
Nun noch die 3 Dispatch() Änderungen temporär deaktivieren, da es ja sonst nicht scheppert ;-)

Gruß
Karl-Heinz
Karl-Heinz
Posts: 774
Joined: Wed May 17, 2017 8:50 am
Location: Germany

RedimDataWindow

Post by Karl-Heinz »

Also kann ich nur empfehlen, Euren VO-Code anzupassen, ja, jetzt sofort, unverzüglich (um jemand anderen zu zitieren <g>)
Ja, bei dem war ich Anfang der 1980er genau 2x - jeweils incl. Zwangsumtausch und eingehender Kontrolle ob ich überhaupt rein darf. :-)

Gruß
Karl-Heinz
lagraf
Posts: 442
Joined: Thu Jan 18, 2018 9:03 am
Location: A

RedimDataWindow

Post by lagraf »

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.
Karl-Heinz
Posts: 774
Joined: Wed May 17, 2017 8:50 am
Location: Germany

RedimDataWindow

Post by Karl-Heinz »

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.

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 
Änderungen in der Start():

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
Wegen. der #ErrorDialog Klasse muss noch die Referenz "System.Windows.Forms" hinzugefügt werden.

So, nun Feuer frei ;-)

Gruß
Karl-Heinz
lagraf
Posts: 442
Joined: Thu Jan 18, 2018 9:03 am
Location: A

RedimDataWindow

Post by lagraf »

Hallo Karl-Heinz,
den Code habe ich soeben eingebaut, funkioniert, vielen Dank!
LG Franz
Post Reply