| |
|
|
E.T. | Folgende Situation:
Wenn mittels @RTF("LoadRTF"... eine zuvor erzeugte, leere rtf-File geladen wird, wird diese nach dem Laden nicht wieder freigegeben, bis das Programm beendet wird. Dies tritt im Interpreter und in der fertigen exe auf.
Um das zu veranschaulichen, bitte Io l' folgenden Quelltext zu starten und: 1. auf den Button 1. Die 3 Boxen in 3 Datein speichern zu klicken ___Dann werden die RichEdits jeweils (ohne Fehler) in un File geschrieben. 2. auf den Button 2. Die erzeugten 3 Datein neu einlesen zu klicken ___Hier wird dann Fehler:6?? zurückgegeben
Wenn ich nun wieder auf den Button 1. ... klicke (auch, wenn ich jetzt in Box 3 etwas reinschreibe), erhalte Io l' Fehler 32. Das heist, die File ist noch geöffnet !! Das kann man ganz leicht nachvollziehen, wenn man die File RTF-Test_3.rtf (wenn das Prog noch corre) in z.B. Word öffnet und dort auf Speichern klickt. Man kann auch versuchen, bei noch laufendem Prog die 3 erzeugten rtf-Datein zu löschen, bei der ersten und der zweiten klappt das, bei der dritten wird verweigert. In diesem Zusammenhang ist mir auch aufgefallen, das ein Erase auf die betreffende File kein %ioresult setzt (so bin ich erst drauf gekommen, das die File noch geöffnet ist). Interessant ist auch, das der Explorer kein Attribut "schreibgeschützt" bei dieser File anzeigt.
Hier mal mein Test-Code, ich hoffe, ich hab mich verständlich genug ausgedrückt: KompilierenMarkierenSeparierenDeclare rtf_box&[], rtf_Btn&[]Ich liebe diese dynamischen Variablen
Declare Ende%, rtf_error%
Window 800,600
rtf_box&[1] = @Create("RichEdit",%HWnd,"RTF-Box 1",10,10,770,90)
rtf_box&[2] = @Create("RichEdit",%HWnd,"RTF-Box 2",10,110,770,90)
rtf_box&[3] = @Create("RichEdit",%HWnd,"",10,210,770,90)Diese Box bitte leer lassen !!
rtf_Btn&[1] = @Create("Button",%HWnd,"1. Die 3 Boxen in 3 Datein speichern",10,350,770,25)
rtf_Btn&[2] = @Create("Button",%HWnd,"2. Die erzeugten 3 Datein neu einlesen",10,400,770,25)
Clear Ende%
WhileNot Ende%
waitinput
If @Clicked(rtf_Btn&[1])Speichern
WhileLoop 3
rtf_error% = @RTF("SaveRTF",rtf_box&[&loop],"RTF-Test_" + @str$(&loop) + ".rtf")
Case rtf_error% : @messagebox("RTF-Fehler : "+@str$(rtf_error%),"FEHLER BEIM SPEICHERN, Datei : "+ @str$(&loop),64)
Clear rtf_error%
EndWhile
Elseif @Clicked(rtf_Btn&[2])Laden
SetText rtf_box&[1],""
SetText rtf_box&[2],""
SetText rtf_box&[3],""
WhileLoop 3
rtf_error% = @RTF("LoadRTF",rtf_box&[&loop],"RTF-Test_" + @str$(&loop) + ".rtf")
Case rtf_error% : @messagebox("RTF-Fehler : "+@str$(rtf_error%),"FEHLER BEIM LADEN, Datei : "+ @str$(&loop),64)
Clear rtf_error%
EndWhile
EndIf
EndWhile
end
|
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 06.12.2008 ▲ |
|
|
|
|
Dieter Zornow | Das ganze hat nichts mit der Freigabe zu tun, RTF() hat ein Problem mit leeren RTF-File. Es wird ja auch immer die 3. leere File angemeckert. Ich habe mal zuerst die File erzeugt, Das Programm dann beendet und einfach die vorher erzeugten File eingelesen. Der Fehler kam genauso.
Habe dann mit einem anderen Programm die 3. leere File geladen etwas geschrieben, aber das neu geschriebene kann man auch hier nicht abspeichern. Also kann man mit Profanmitteln eine leere bereits abgespeicherte RTF-File nicht neu beschreiben. Das Problem scheint aber schon seit der undokumentierten Call() zu bestehen, nur dass damals eine Fehlermeldung kam. In RTF() kommt keine Fehlermeldung mehr aber das Problem ist nicht behoben
Als workaround kannst du folgendes verwenden.
case gettext$(rtf_box[&loop]) = "":settext rtf_box&[&loop]," "
Wenn in allen 3 File etwas steht, arbeitet dein Programm ohne Fehlermeldung.
Man kann von einem grundsätzlichen BUG in RTF() oder im Richedit ausgehen Mit Wordpad geht es aber ohne Probleme und das verwendet doch bestimmt ebenfalls ein Richedit. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 06.12.2008 ▲ |
|
|
|