Re: MsgBox nicht blocken
Verfasst: 28.03.2018 16:36
Nicht aufregen...
Geht sehr gut mit Threads. RSBasic hat nur vergessen speicher für den Namen anzufordern
Geht sehr gut mit Threads. RSBasic hat nur vergessen speicher für den Namen anzufordern
Code: Alles auswählen
EnableExplicit
CompilerIf Defined(EventCustomValue, #PB_Enumeration) = 0
Enumeration EventCustomValue #PB_Event_FirstCustomValue
; Nothing
EndEnumeration
CompilerEndIf
Enumeration EventCustomValue
#My_Event_OpenFileName
EndEnumeration
Procedure AllocateString(String.s)
Protected *mem
*mem = AllocateMemory(StringByteLength(String) + SizeOf(Character))
If *mem
PokeS(*mem, String)
EndIf
ProcedureReturn *mem
EndProcedure
Procedure.s FreeString(*Mem)
Protected result.s
If *Mem
result = PeekS(*Mem)
FreeMemory(*Mem)
EndIf
ProcedureReturn result
EndProcedure
Procedure thGetOpenFileName(Null)
Protected OPENFILENAME.OPENFILENAME
Protected *FileName
*FileName = AllocateMemory(#MAX_PATH)
OPENFILENAME\lStructSize = SizeOf(OPENFILENAME)
OPENFILENAME\hWndOwner = 0
OPENFILENAME\lpstrFile = *Filename
OPENFILENAME\nMaxFile = #MAX_PATH
OPENFILENAME\Flags = #OFN_EXPLORER | #OFN_ENABLESIZING | #OFN_FILEMUSTEXIST
If GetOpenFileName_(OPENFILENAME)
PostEvent(#My_Event_OpenFileName, 0, 0, 0, *FileName)
Else
FreeMemory(*FileName)
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateThread(@thGetOpenFileName(), 0)
CreateThread(@thGetOpenFileName(), 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #My_Event_OpenFileName
Debug FreeString(EventData())
EndSelect
ForEver
EndIf