Announcement

Collapse
No announcement yet.

Ole mit Word! Was mach ich falsch?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ole mit Word! Was mach ich falsch?

    Hallo

    Wenn man in einem OLE container einen Doppelklick auf ein Word-Dokument macht, dann wird Word automatisch gestartet und man kann Word wie gewohnt benutzten.

    Wie kann ich die selbe Funktionalität einem Button-Click zuordnen? Wie muss der Code aussehen?

    Ich habe es mit

    "OleContainer.DoVerb(1)"

    versucht. Doch damit wird Word in einem neuen Delphi Form geöffnet und das Menü ist verschwunden. Was mache ich falsch?

    Besten Dank für Eure Hilfe

    Gruss Fabian

  • #2
    Hallo,

    in meinem Buch <i>COM/DCOM/COM+ mit Delphi</i> ist ein Beispielprojekt, mit dem der Inhalt von Word-Dokumenten direkt in der Datenbank gespeichert wird (ohne den Umweg über eine Datei). Wenn ein Datensatz direkt aus der Datenbank ausgelesen und editiert wird, passiert folgendes:
    <pre>
    (* Ereignisbehandlungsmethode für OnDateChange reagiert auf
    3 Bedingungen:
    a) Tabelle noch nicht aktiv -> Exit
    b) Benutzer wählt einen anderen Datensatz aus -> ReadDocData
    c) Benutzer editiert einen Datensatz -> Word aktivieren *)

    procedure TDM.DataSourceWordOLEDataChange(Sender: TObject; Field: TField);
    begin
    with TableWordOLE do begin
    // Sicherheitsabfrage
    if not Active then exit;
    // Datensatz wird eingelesen
    if State = dsBrowse
    // Dokumentinhalt aus der Datenbank einlesen
    then ReadDocData;
    // Datensatz wird editiert
    if State = dsEdit
    // Word (Menüpunkt/Toolbar) aktivieren
    then FormMain.OleContainerWord.DoVerb(1);
    end;
    end;
    </pre>
    Über <b>OleContainerWord.DoVerb(1)</b> wird das Word-Dokument innerhalb des OleContainers aktiviert, wobei auch das Word-Menü zur Verfügung steht.

    Der Fehler kann also nicht an DoVerb(1) liegen

    Comment


    • #3
      Hallo Andreas

      Besten Dank für Deine rasche Antwort. Ich habe Dein Buch "COM/DCOM" mit Delphi (Vorgänger vom oben angesprochenen?). Das Beispielprojekt von dem Du sprichst habe ich auch ausprobiert. Aber genau dort passiert es. Wenn ich auf "bearbeiten" klicke, dann sind alle Menüpunkte zwar sichtbar, aber die Befehle in den einzelnen Menüs sind alle disabled. Wenn ich selber ein Versuchsprojekt mache und ein Word Dokument in den Container setzte, dann läuft mit Doppelklick auf das Dokument alles richtig. Warum dieser Unterschied?
      Ich arbeite mit D5, NT4(SP5) und Office97. Kann es an meiner Umgebung liegen?

      Vielleicht hast Du noch einen Tipp für mich.

      Besten Dank.

      Fabia

      Comment


      • #4
        Hallo,

        läuft zu diesem Zeitpunkt Office 97 bereits? In meinem neuen Buch <i>COM/DCOM/COM+ mit Delphi</i> sieht das Beispiel für Word 2000 jetzt so aus:

        Hauptformular:
        <pre>
        uses ComObj, ActiveX, WordOLETestDM;

        // Neu: OLEContainer beim Aktivieren der Anwendung neu initialisieren

        procedure TFormMain.FormCreate(Sender: TObject);
        begin
        Application.OnActivate := ActivateWordDocInContainer;
        end;

        // Datenmodul-Methode aufrufen: Im Edit-Modus wird DoVerb(1) aufgerufen

        procedure TFormMain.ActivateWordDocInContainer(Sender: TObject);
        begin
        DM.ActivateContainer
        end;

        // Manuelle Aktivierung via Menüpunkt

        procedure TFormMain.MWActivateClick(Sender: TObject);
        begin
        OleContainerWord.DoVerb(1);
        end;
        </pre>
        Datenmodul:
        <pre>
        procedure TDM.ActivateContainer;
        begin
        if TableWordOLE.State = dsEdit then
        FormMain.OleContainerWord.DoVerb(1);
        end;
        </pre>
        Im Buch liest sich das so: "<i>Allerdings gibt es da ab Office 97 ein Problem, das dem universellen Einsatz von Word in einem OLEContainer im Weg steht. Microsoft hat dieses Problem offiziell als Bug klassifiziert und in dem Knowledge-Base-Beitrag Q202476 „Cannot Edit Word Document in OLE or WebBrowser Control“ beschrieben. Immer dann, wenn zusätzlich zum OLEContainer noch eine andere Word-Instanz offen ist und der Anwender zu dieser Word-Instanz wechselt, kann er beim Zurückwechseln zum OLEContainer dort keine Eingaben mehr vornehmen. Als Workaround für dieses Problem empfiehlt Microsoft, das Word-Fenster nicht in den Container einzubetten, sondern als eigenständiges Fenster anzuzeigen. Die ist nicht der einzige Bug von Word. Falls Sie mit dem Problem zu kämpfen haben, dass Word seine Menüpunkte deaktiviert, sollten Sie sich den Knowlegde-Base-Beitrag Q191615 „Bug: Menu Disabled in Application Activated Using OLE Control“ näher anschauen.</i>&quot

        Comment

        Working...
        X