![]() |
Word-OleObject korrekt schliessen?
Hallo,
Ich öffne per OleContainer ein Worddokument, habe jetzt beim Beenden des Programms folgende Probleme: 1.Es existiert nach wie vor eine WINWORD.EXE im Taskmanager //2.Es kommt eine AV in der ole32.dll und dann dreimal Runtime Error 216 bei 004038A6 und zweimal 0042CDAE(Hat sich erledigt :) ) ich löse ein Olecontainer1.OleObject.Application.Quit vor dem schliessen aus, was eigentlich doch genügen sollte oder? Hoffe ihr habt Antworten :? :angel: |
Re: Word-OleObject korrekt schliessen?
So, nachdem die Runtime-Errors zwischenzeitlich weg waren, sind diese schon wieder da.
Das programm schliesst sich immernochnicht... hat keiner eine Idee? :angel: |
Re: Word-OleObject korrekt schliessen?
Die Fehler aus den andern beiden Threads konnte ich zwar beheben, aber die Runtime-Errors sind noch da.
Weis da mittlerweile jemand was ich da falsch machen könnte? Also der Ablauf sieht so aus: CreateObjectFromFile; Objektinhalt bearbeiten Objekt, bzw. Dokument in Datei speichern //Hier muss ich denke ich etwas tun, aber ich weis nicht was... Formular schliessen |
Re: Word-OleObject korrekt schliessen?
Hallo,
das erzeugte OLE-Objekt auf NIL setzen ? Heiko |
Re: Word-OleObject korrekt schliessen?
Das Problem ist, das mein OLE-Objekt(OleContainer1.OleObject) eine Nur-Lesen-Eigenschaft ist und ich der keinen Wert, also auch nicht NIL zuweisen kann.
Deswegen versuche ich die Funktion OleContainer1.DestroyObject aufzurufen um es freizugeben, was zwar functioniert, aber nichts an den Fehlern ändert. |
Re: Word-OleObject korrekt schliessen?
hatte mal so eine meldung wegen meinem virenprogram von norton
|
Re: Word-OleObject korrekt schliessen?
Virenprogramm war aktiv, habs grad ausgeschaltet, Runtime-Errors kommen aber immernoch
|
Re: Word-OleObject korrekt schliessen?
Hat echt keiner ne Ahnung was ich verkehrt mache? Ich kann echt keine Runtime Errors mehr sehn :cry:
|
Re: Word-OleObject korrekt schliessen?
Moin :-)
Probier das mal so:
Delphi-Quellcode:
...
//--Dokument in OleContainer laden if (OleContainer1.State = osEmpty) then begin OleContainer1.CreateObjectFromFile(cDokument, False); OleContainer1.Run; OleContainer1.Align := alClient; OleContainer1.SizeMode:= smScale; OleContainer1.Visible := True; //--falls noch nicht sichtbar end else OLEContainer1.doVerb(1); ... //--Dokument schließen(speichern) und OLEContainer freigeben (vorzugsweise im FormClose): ... if OleContainer1.State<>osEmpty then begin //änderungen im Formular speichern OleContainer1.SaveAsDocument(cDokument); Visible := False; OleContainer1.Close; OleContainer1.DestroyObject; end; |
Re: Word-OleObject korrekt schliessen?
zum schliessen evrwende ich:
OleContainer1.OleObject.Application.Quit; OleContainer1.DestroyObject; OleContainer1.Destroy; Aber das Word geht einfach nicht zu, es ist und bleibt in den Prozessen... ich verwende OleContainer1.DoVerb(ovShow); um das Objekt anzuzeigen, vllt macht das Probleme, denn ovShow ist -1, aber ein Versuch mit 1 hat auch keine Besserung gebracht. :( Edit: Mir ist grad aufgefallen, dass das Programm wenns "normal" läuft 9 Threads im Taskmanager anzeigt, wenn ich diesen OleContainer öffne jedoch 4 dazukommen, also 13. Wenn ich das Fenster mit dem OleContainer jetzt schliesse und auch freigebe, bleibt es allerdings auf 13. :gruebel: |
Re: Word-OleObject korrekt schliessen?
Also das Problem ist gefunden:
Ich habe im Container das AllowActiveDoc Element auf True, damit das Dokument direkt in dem Container ist und ich alle Möglichkeiten von Word ebenfalls direkt in meinem Programm habe. Das ist sehr schön und angenehm zu handeln, allerdings tritt eben dieser Fehler auf. Wenn ich jetzt AllowActiveDoc aus False setze öffnet sich Word extern und ich kann das Dokument dort bearbeiten. Das find ich nicht schön, da ich dann zurück in mein Programm muss um Das Dokument wieder zu schliessen. Sehr umständlich wie ich finde, Allerdings kommen keine Fehler mehr. Ist es möglich das der Fehler kommt weil das Fenster und somit auch der Container zu dem Zeitpunkt wo ich Word schliesse nichtmehr sichtbar ist? ich mach das etwa so:
Delphi-Quellcode:
Edit: :wall: Jop, wenn ich das Word zuerst schliesse und danach mein Formular funzt alles ohne Probleme :wall:
Word.Open
Form.ShowModal Word.Close |
Re: Word-OleObject korrekt schliessen?
OK, scheint doch nicht das Problem gewesen zu sein..
Aber ich weis jetzt was das Problem ist.. ich weis nicht warum oder weshlab.. aber da liegt dem Hund sein Knochen begraben: Ich erzeuge eine Tabelle. Lasse ich diesen Part weg, dann funktioniert es ohne Probleme. Das Erzeugen geht mit:
Delphi-Quellcode:
Das Problem ist jetzt.. ich hab keine Ahnung wo das Problem ist :wall:
OleContainer1.OleObject.Application.ActiveDocument.Tables.Add(OleObject.Application.ActiveDocument.Range,6,5);
Ich kann die Tabelle auf jedenfall nicht weglassen, weil sie definitiv da rein muss.. |
Re: Word-OleObject korrekt schliessen?
Scheinbar lag das problem darin das ich die Tabelle erzeugt habe und dann zwei Borders davon unsichtbar gemaht habe.
Wenn ich diesen code verwende, kommt der Fehler: vTable.Cell(5,3).Range.Borders.Item(wdBorderLeft). Visible:=False; Hier funktioniert alles: vTable.Cell(5,3).Borders.Item(wdBorderLeft).LineSt yle := wdLineStyleNone; Darauf muss man erstmal kommen :coder2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz