Embedded Word in Application



  • Hallo,

    leider funktioniert die Suchfunktion heute nicht 😞
    Daher muss ich meine Frage auf die Gefahr hin stellen, dass sie bereits in der Vergangenheit diskutiert wurde.

    Ich möchte Word embedded in meiner Application starten.
    Wie mache ich das?

    Danke!



  • ich hab ebis jetzt einen OLE Container in dem ich ein Word starte.

    if ((OleContainer1->State == osEmpty) ||
        (MessageDlg("Delete existing object?", mtConfirmation,
                    TMsgDlgButtons() <<  mbOK << mbCancel, 0) == mrOk))
        {
            OleContainer1->DestroyObject();
            Object1Click(Sender);
            OleContainer1->DoVerb(ovPrimary);
            ObjectFileName = "";
        }
    

    will ich das word File jetzt aber mit "speichern unter" speicher

    if (SaveDialog1->Execute())
          {
            OleContainer1->SaveToFile(SaveDialog1->FileName);
            ObjectFileName = SaveDialog1->FileName;
          }
    

    erhalte ich zwar eine Datei, diese ist aber nicht durch Word leesbar. Sie enthält nur Binäre Daten mit denen Word nichts anfangen kann.
    Weiß jemand was ich falsch mache?

    Danke!



  • hat denn niemand erfahrungen mit word ansteuerung mit dem builder?
    ich habe mir schon die ganzen besipiele in examples angesehen. allerdings wollen die embedded sachen alle nicht funktionieren. ich könnte mir vorstellen, das das mir neuen office versionen zusammenhängt?


  • Mod

    Hallo

    in der Hilfe steht was im Zusammenhang mit Excel
    Moeglicherweise hilft dir das weiter
    (sollte sich eigentlich sehr aehnlich sein)

    MfG
    Klaus



  • Die Steuerung geht natürlich mit einem Variant Objeckt viel leichter von der Hand!
    Dazu gibt es hier auch sehr aufschlussreichen Code:
    [url]
    http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc06023.php
    [/url]

    Leider kann ich damit das Word nicht embedded laufen lassen. 😞

    Daher versuche ich gerade aus dem Word im OleContainer eine Referenz zu einem Variant Objeckt zu erstellen. Leider bisher erfolglos.
    Folgendes habe ich schon probiert.

    Variant vOLEWord = OLEContainer->OleObject.GetActiveObject(OLEContainer->Name);
    Variant vOLEWord = OLEContainer->OleObject.GetActiveObject("ActiveDocument");
    Variant vOLEWord = OLEContainer->OleObject.AsType(vOLEWord.Type());
    

    Dabei kommt immer die selbe Exceptionmeldung (es läßt sich kompilieren):

    Schnittstelle nicht unterstützt

    Weiß jemand wie das klappen könnte?
    Danke!



  • machnmal ist es einfacher als man denkt:

    Variant vOLEWord = GetActiveOleObject("Word.Application");
    

    und um das Dokument zu kriegen:

    Variant vActiveDocument = vOLEWord.OlePropertyGet("ActiveDocument");
    


  • Oben genannte Methode hat den Nachteil, das die mit "GetAvticeOLEObject()" ein beliebiges Aktives OLE Object geholt wird. Sind z.B. mehrere Word Dokumnte offen, so wird das zuletzt bearbeitete geholt.
    Um genau das Word aus einem OLE Container einer eigenen Application zu holen muss zunächst das im OLE Container "liegende" Word aktiviert werden (es muss im Bearbeitungsmodus sein.). Dies geschieht immer wenn man etwas im Word schreibt.
    Danach kann man sich das Word aus dem OLE Container wie folgt in ein Variant Objeckt holen.:

    // Variant aus Ole Container holen
        Variant vOLEWord = OLEContainer->OleObject.GetActiveObject("Word.Application");
    
        // Dokument aus OLE Container holen
        Variant vActiveDocument = vOLEWord.OlePropertyGet("ActiveDocument");
    
        // speichern
        vActiveDocument.Exec(Procedure("SaveAs") << Filename << 11 << 0 << "" << 1 << "" << 0 << 0 << 0 << 0 << 0 );
        // "gespeichert"-Flag in Word setzen, damit keine Nachfragen kommen
        vActiveDocument.OlePropertySet("Saved", true);
    

    Filename ist ein String mit den Filenamen


Anmelden zum Antworten