Announcement

Collapse
No announcement yet.

Word von Delphi aus überwachen - DRINGEND !....

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

  • Word von Delphi aus überwachen - DRINGEND !....

    Hallo,

    ich suche eine Möglichkeit Word von Delphi aus zu überwachen.
    Wenn ein Benutzer in Word auf "drucken" klickt, möchte ich das in meinem Programm merken und darauf reagieren, indem ein Dialog geöffnet wird.
    Das selbe auch, wenn der Benutzer auf "senden" klickt.

    Ein weiteres Problem ist:
    Ich habe in Word mithilfe eines Makros ein neuen Menüeintrag erstellt. Wenn ich auf diesen klicke, soll sich ein Dialog aus meinem Delphi Programm öffnen.
    Wie mache ich das ? Ist das überhaupt möglich?

    Bitte um rege antworten....(wirklich dringend)

  • #2
    Erst mal musst du die Menuepunkte von Word auf eigene VBA Makros umsetzen. Dort rufst du erst eine WLL-Funktion (mehr dazu gleich) und erst dann die Original-Funktion.<br><br>
    Eine WLL ist nichts anderes als eine DLL die von Word geladen wird wenn sie in Words "Startup" liegt. Es muessen zwei Funktionen exportiert werden, ansonsten ist es eine normale DLL.<br>
    Ein Beispiel (allerdings fuer Word 97):
    <pre>
    library MeineWLL;

    uses
    Windows,
    Forms;
    {$E wll}
    {$R *.RES}

    const
    WordsFensterKlassenName = 'OpusApp';

    procedure InitFunktion;
    begin
    Running := True; { den Semaphor setzen gegen Mehrfachaufruf }
    { wir erklaeren uns zum Kind von Words Programmfenster }
    Application.Handle := FindWindow(WordsFensterKlassenName,Nil);
    if Word97 = Nil then { Word ansprechen per COM }
    Word97 := CoGlobal.Create;
    end;

    procedure MeineFunktion; stdcall;
    begin
    if NOT Running then
    begin
    InitFunktion;
    { los gehts wir zeigen unseren Dialog }
    MeineForm := TMeineForm.Create(Application);
    MeineForm.Show;
    end
    else
    MeineForm.SetFocus;
    end;

    { wdAutoOpen wird von Word nach dem Laden der WLL aufgerufen }

    function wdAutoOpen(DocID: short): Integer; stdcall;
    begin
    wdAutoOpen := 1; { alles klar signalisieren }
    end;

    { wdAutoRemove entsprechend beim Entladen der WLL }

    procedure wdAutoRemove; stdcall;
    begin
    { falls jemand Word schliesst mit offenem Dialog }
    if Running AND (MeineForm <> Nil) then
    MeineForm.Close;
    Running := False;
    end;

    exports
    wdAutoOpen index 1,
    wdAutoRemove index 2,
    MeineFunktion index 3;

    begin
    end.
    </pre>
    MeineFunktion laesst sich in VBA als externe Funktion deklarieren und dann an einen M;enuepunkt binden wie jedes andere Makro auch.
    Als Besonderheit wird hier ein nicht modaler Dialog gezeigt

    Comment


    • #3
      Hallo,

      wollte die WLL mit Delphi erstellen. Habe den Quelltext kopiert und versucht zu kompilieren. Folgende Fehlermeldung kommt:
      "Undefinierter Bezeichner Running"
      Kannst mir jemand sagen, was ich bei uses angeben muss, damit Delphi das erkennt

      Comment


      • #4
        Hallo,

        wollte die WLL mit Delphi erstellen. Habe den Quelltext kopiert und versucht zu kompilieren. Folgende Fehlermeldung kommt: "Undefinierter Bezeichner Running" Kannst mir jemand sagen, was ich bei uses angeben muss, damit Delphi das erkennt

        Comment


        • #5
          Hallo dinchen,

          "Running" ist eine Variable vom Typ boolean. Diese ist dafür da, damit deine Form nur 1 mal erzeugt wird, ist das Fenster bereits vorhanden, dann wird kein neues erzeugt, sondern das vorhande genommen

          Comment


          • #6
            Sorry, ich habe Dateien weggelassen und diese Source anonymisiert. Das sollte auch nur als Beispiel dienen

            Comment

            Working...
            X