Entwickler-Ecke

Sonstiges (Delphi) - WLL´s - Fehler ... ??


dinchen - Di 23.07.02 14:52
Titel: WLL´s - Fehler ... ??
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?

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
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.

Die aufgerufenen Prozedur sieht so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TfrmGeschichtseintrag.Execute;
begin
  if (TfrmGeschichtsEintrag = nil) then begin
    TfrmGeschichtsEintrag.Create(Application);
  end;
   frmGeschichtsEintrag.Show;
        frmGeschichtsEintrag.free;
end;


Donald - Mi 24.07.02 09:18

Hallo Dinchen!

Wenn Du Dich nicht vertippt hast, dann liegt der Fehler hier:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TfrmGeschichtseintrag.Execute; 
begin 
   if ([b]TfrmGeschichtsEintrag [/b]= nil) then begin 
     [b]TfrmGeschichtsEintrag[/b].Create(Application); 
  end; 
   frmGeschichtsEintrag.Show; 
        frmGeschichtsEintrag.free; 
end;


Es sollte heissen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TfrmGeschichtseintrag.Execute; 
begin 
   if ([b]frmGeschichtsEintrag [/b]= nil) then begin 
     [b]frmGeschichtsEintrag := TfrmGeschichtsEintrag[/b].Create(Application); 
  end; 
   frmGeschichtsEintrag.Show; 
        frmGeschichtsEintrag.free; 
end;



Gruss

Donald


Donald - Mi 24.07.02 09:22

Sorry, aber mit den Maskierungen hat es wohl nicht geklappt.

Anstelle der Überprüfung von TfrmGeschichtsEintrag solltest Du frmGeschichtsEintrag überprüfen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TfrmGeschichtseintrag.Execute; 
begin 
   if (frmGeschichtsEintrag = nil) then begin 
     frmGeschichtsEintrag := TfrmGeschichtsEintrag.Create(Application); 
  end; 
   frmGeschichtsEintrag.Show; 
        frmGeschichtsEintrag.free; 
end;


Gruss

Donald