Ich Versuche gerade eine in einem Editorgadget bearbeitet Datei zu speichern => Minieditor
Dazu habe ich im englischen Forum eine kleine Procdure gefunden.
leicht angepaßt sieht sie vereinfacht so aus.
Code: Alles auswählen
Procedure Editor_Save()
File.s = Ziel.s + "xyz.dat"
Protected FileID.l, result.l
Protected StreamData.EDITSTREAM
FileID = CreateFile(#PB_Any, File)
If FileID
StreamData\dwCookie = FileID(FileID)
StreamData\dwError = #Null
StreamData\pfnCallback = @StreamFileOut_Callback()
If UCase(GetExtensionPart(File)) = "RTF"
;result = SendMessage_(GadgetID(#Editor_3), #EM_STREAMOUT, #SF_RTF, @StreamData)
Else
;result = SendMessage_(GadgetID(#Editor_3), #EM_STREAMOUT, #SF_TEXT, @StreamData)
EndIf
CloseFile(FileID)
EndIf
;MessageRequester("Info", "Bitte")
;rocedureReturn result
EndProcedure
Fall 1 so auskommentiert wie zu sehen kann ich sie beliebig oft anspringen und sie tut ihre Arbeit.
Fall 2 der Messagerequester wird aktiviert, dann wird nach dem vierten Aufruf im Messagerequester das Programm mit "Invalid memory access" in den Wald geschickt.
Fall 3 werden die 2 Zeilen mit "result =" aktiviert kommt der "Invalid memory access" in der Zeile mit "result =" im zweiten Aufruf schon.
Kann mir da jemand helfen ?
Alternativ wäre ich auch bereit das ganze anders zu lösen wenn es da einen neuen Ansatz gäbe.
kleiner Nachtrag
Code: Alles auswählen
Procedure StreamFileOut_Callback(hFile, pbBuff, cb, pcb)
ProcedureReturn WriteFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure