Habe eine WLL mit Delphi, die ich in den Startup Ordner von Word gepackt habe. Die WLL startet also, wenn ich Word starte.
Die WLL erstellt ein Menü-Eintrag in Word. Wenn ich auf diesen Klicke, rufe ich einen Dialog auf (dialog ist ins Delphi-Projekt eingebunden).
Nun bringt mir Word ein Zugriffs-Fehler, wenn ich auf den erstellten Menüeintrag klicke. Dieser muß irgendwie an der Zeile
frmGeschichtsEintrag.Show;
liegen.
Wieso geht das nicht? Was mache ich falsch?
<pre>
Library xword32;
uses
windows,
sysutils,
word32 in 'word32.pas',
worddef in 'worddef.pas',
GeschichtsEintrag in 'GeschichtsEintrag.pas' {frmGeschichtseintrag};
Var
WordBasic:TWordBasic;
Procedure xwTest; export; stdcall;
begin
frmGeschichtsEintrag.Execute;
end;
Function wdAutoOpen(docId : integer) : integer; export; stdcall;
Begin
Result:=1;
WordBasic:=TWordBasic.Create(docID);
WordBasic.RegisterFunction('xwTest','XWord32 DLL');
WordBasic.AddMenu('Travel Master SLK',7,0);
WordBasic.AddMenuItem('Travel Master SLK','Geschichts-Eintrag','xwTest',1,0);
end;
procedure wdAutoRemove; export; stdcall;
begin
WordBasic.Free;
end;
exports
wdAutoOpen INDEX 1,
wdAutoRemove INDEX 2,
xwTest INDEX 3;
begin
end.
</pre>
Die aufgerufenen Prozedur sieht so aus:
<pre>
procedure TfrmGeschichtseintrag.Execute;
begin
if (TfrmGeschichtsEintrag = nil) then begin
TfrmGeschichtsEintrag.Create(Application);
end;
frmGeschichtsEintrag.Show;
frmGeschichtsEintrag.free;
end;
</pre>
Die WLL erstellt ein Menü-Eintrag in Word. Wenn ich auf diesen Klicke, rufe ich einen Dialog auf (dialog ist ins Delphi-Projekt eingebunden).
Nun bringt mir Word ein Zugriffs-Fehler, wenn ich auf den erstellten Menüeintrag klicke. Dieser muß irgendwie an der Zeile
frmGeschichtsEintrag.Show;
liegen.
Wieso geht das nicht? Was mache ich falsch?
<pre>
Library xword32;
uses
windows,
sysutils,
word32 in 'word32.pas',
worddef in 'worddef.pas',
GeschichtsEintrag in 'GeschichtsEintrag.pas' {frmGeschichtseintrag};
Var
WordBasic:TWordBasic;
Procedure xwTest; export; stdcall;
begin
frmGeschichtsEintrag.Execute;
end;
Function wdAutoOpen(docId : integer) : integer; export; stdcall;
Begin
Result:=1;
WordBasic:=TWordBasic.Create(docID);
WordBasic.RegisterFunction('xwTest','XWord32 DLL');
WordBasic.AddMenu('Travel Master SLK',7,0);
WordBasic.AddMenuItem('Travel Master SLK','Geschichts-Eintrag','xwTest',1,0);
end;
procedure wdAutoRemove; export; stdcall;
begin
WordBasic.Free;
end;
exports
wdAutoOpen INDEX 1,
wdAutoRemove INDEX 2,
xwTest INDEX 3;
begin
end.
</pre>
Die aufgerufenen Prozedur sieht so aus:
<pre>
procedure TfrmGeschichtseintrag.Execute;
begin
if (TfrmGeschichtsEintrag = nil) then begin
TfrmGeschichtsEintrag.Create(Application);
end;
frmGeschichtsEintrag.Show;
frmGeschichtsEintrag.free;
end;
</pre>
Comment