Hallo Karl-Heinz,
die Klasse RedimDataWindow ist nicht von mir, habe ich vor langer Zeit irgendwo mal bekommen. Das Array _aControls wird in RedimDataWindow:PostInit() befüllt:
Ich habe einem MultiHB mal einen Font zugewiesen. Danach knallt es mal, mal nicht.
Anhand der exception ( siehe Anhang ) sieht man aber klar wo das Problem liegt, und zwar im HoverButton Dispatch():
Offenbar kommt da ab und an ein Float an, was dann zu dem "Conversion Error USUAL (FLOAT) to PTR" führt.
Da stellt sich die Frage wie so etwas zustande kommt ...
METHOD Dispatch( oEvent ) // <------------------ Änderung oEvent anstatt oE
LOCAL lpRect IS _WINRECT
LOCAL lpPoint IS _WINPOINT
LOCAL dwMouse AS DWORD
LOCAL hParent AS PTR
LOCAL oE AS Event // <-------------------- neu
oE := oEvent // <-------------- neu
...
Hallo Franz,
prinzipiell hast Du recht, dass sich da X# teilweise anders verhält - und da handelt es sich immer um nicht typisierte Variablen.
Die Event-Parameter von Event-Methoden zu typisieren ist eigentlich immer eine gute Idee - auch in VO selber.
Und wenn ich irgendwo im bestehenden Code eine solche Methode ohne typisiertes Objekt sehe, passe ich das immer an.
Gerade bei Events bringt das Geschwindigkeit.
Wolfgang
P.S. das RedimDataWindow stammt ursprünglich mal von mir
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Ich kann absolut nicht einschätzen in wieweit man dem X# compiler all das beibringen kann was der VO compiler so treibt. In dem Fall hat man halt das "Pech", dass die Exception erst dann auftritt wenn ein anderer Font zugewiesen wird. Wenn Du allerdings zu Beginn den stack trace gezeigt hättest wäre das Problem sicherlich schneller zu beheben gewesen.
Hallo Karl-Heinz,
hast du den Stack Trace aus dem Error Objekt -> Stack oder ist dein Testprogramm mit dem Stack Trace direkt ausgestiegen? Ich habe immer nur uError:Description betrachtet und das zeigt ja nicht den Ort des Geschehens.
Die Dispatch Methode ist doch eine Callback Methode, wird also von VO bzw. X# aufgerufen. Wenn dabei ein fehlerhaftes oEvent mitkommt:
-> Ist das dann nicht ein Fehler in der Sprache / im Compiler?
-> Wenn ich LOCAL oE := oEvent AS Event zuordne und wParam ist falsch, sollte dann nicht dieses Statement auch abstürzen?
The problem is in the code that says:
SELF:lpHBInfo.hFont := PTR(_CAST, oE:wParam)
the PTR(_CAST tells the compiler:
I know what I am doing. Even though you think that wParam is numeric you should treat it as a pointer and assign it to the hFont field of lpHBInfo
As a result there may be a problem that is not properly handled by the compiler.
If you see a _CAST in your code you may want to revise that code.
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu