| |
|
|
E.T. | Folgende Situation:
Wenn mittels @RTF("LoadRTF"... eine zuvor erzeugte, leere rtf-Datei 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 ich den 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 eine Datei 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 ich den Fehler 32. Das heist, die Datei ist noch geöffnet !! Das kann man ganz leicht nachvollziehen, wenn man die Datei RTF-Test_3.rtf (wenn das Prog noch läuft) 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 Datei kein %ioresult setzt (so bin ich erst drauf gekommen, das die Datei noch geöffnet ist). Interessant ist auch, das der Explorer kein Attribut "schreibgeschützt" bei dieser Datei 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-Dateien. Es wird ja auch immer die 3. leere Datei angemeckert. Ich habe mal zuerst die Dateien erzeugt, Das Programm dann beendet und einfach die vorher erzeugten Dateien eingelesen. Der Fehler kam genauso.
Habe dann mit einem anderen Programm die 3. leere Datei geladen etwas geschrieben, aber das neu geschriebene kann man auch hier nicht abspeichern. Also kann man mit Profanmitteln eine leere bereits abgespeicherte RTF-Datei 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 Dateien 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 ▲ |
|
|
|