Bei PB4.3 kommt in der Zeile 18 'SetGadgetText(#MausPosX, Str(MausPosition\x)' die Fehlermeldung 'Invalid memory access'.
Wenn man 'Str(MausPosition\x)' durch einen String ersetzt, tritt dieser Fehler nicht mehr auf.
Ich muss also davon ausgehen das der Fehler in der Str-Routine zu finden ist.
Kann mir jemand dabei Helfen ?
Code: Alles auswählen
Enumeration
#MausPos
#MausPosX
#MausTrenn
#MausPosY
EndEnumeration
Global ThreadAnzahl.b ;Zähler laufender Threads
Global ThreadEnde.b ;Flag Threads beenden (1 = Ende)
Procedure Thread_MausPos(*Wert) ;Thread Mausposition anzeigen
ThreadAnzahl + 1
Static MausPosition.POINT
Repeat
If ThreadEnde = 1 : Break : EndIf ;Thread beenden ?
GetCursorPos_(@MausPosition.POINT) ;Mausposition lesen
SetGadgetText(#MausPosX, Str(MausPosition\x)) ;Mausposition X anzeigen
SetGadgetText(#MausPosY, Str(MausPosition\y)) ;Mausposition Y anzeigen
Delay(50)
ForEver
ThreadAnzahl - 1
EndProcedure
If OpenWindow(0, 100, 100, 200, 40, "Test Str()")
If CreateGadgetList(WindowID(0)) ;##### Bei PB4.3 auskommentieren
TextGadget(#MausPos , 10, 10, 40, 20, "Maus:")
TextGadget(#MausPosX , 50, 10, 35, 20, "" ,#PB_Text_Right)
TextGadget(#MausTrenn, 85, 10, 10, 20, "/",#PB_Text_Center)
TextGadget(#MausPosY , 95, 10, 35, 20, "")
EndIf ;##### Bei PB4.3 auskommentieren
EndIf
CreateThread(@Thread_MausPos(), 0) ;Thread starten
Repeat
Event.l = WaitWindowEvent()
If Event = #PB_Event_CloseWindow
Break
EndIf
ForEver
ThreadEnde = 1 ;Threads beenden
Endezeit = ElapsedMilliseconds() + 5000 ;Warten bis alle Threads beendet sind (max. 5 Sek.)
Repeat
WaitWindowEvent(100)
If ThreadAnzahl = 0 : Break : EndIf
Until ElapsedMilliseconds() > Endezeit
End