Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2009-02

Automation problem

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Bart

Hi,

I'm trying to interact with MS Word.
I started with the example from the wiki, but I'm getting errors and problems.

Here's my code:

procedure TForm1.GridToWordTable;
const
  ServerName = 'Word.Application';
var
  Server: Variant;
begin
  DebugLn('GridToWordTable A');
  DebugLn('  Assigned(InitProc) = ',DbgS(Assigned(InitProc)));
  if Assigned(InitProc) then TProcedure(InitProc);
  Try
    Try
      Server := GetActiveOleObject(ServerName);
      DebugLn('  Found a running MS Word object');
    Except
      DebugLn('  Dit not find a running MS Word object, trying to
create one ...');
      Server := CreateOleObject(ServerName);
    end;
  Except
    DebugLn('  Error creating ',ServerName);
    Exit;
  end;
  Try
    DebugLn('  Found or created ',ServerName);
    Server.Visible := True;
    Server := Unassigned;
  Except
    On E: Exception do
    begin
      DebugLn('GridToWordTable raised exception:');
      DebugLn('  Class = ',E.ClassName);
      DebugLn('  Message = ',E.Message);
    end;
  end;
  DebugLn('GridToWordTable End');
end;

If I run this it always ouputs this, wether or not I have an active MS Word running at the time.

F:\LazarusProjecten\UurCodes>uurcodes
GridToWordTable A
Assigned(InitProc) = False
Dit not find a running MS Word object, trying to create one ... Found or created Word.Application
GridToWordTable raised exception:
Class = EOleException
Message = Visible is geen verwijzingseigenschap.
GridToWordTable End

The end result is a non visible MS Word object:
ProcessID Naam
FFC7052B E:\PROGRAMMA'S\OFFICE 2000\OFFICE\WINWORD.EXE

which can only be closed by killing it (in TaskManager) (In taskmanager on XP it is listed as a process, not as an application, not sure if this is relevant)

If I run the same code in Delphi 3 it runs just fine. If Word is running it says it has found it, if not it creates and makes visible.

I compiled with fpc 2.2.2 / Lazarus 0.9.27 (SVN)
I have MS Word 2000 and I've tested my code on WinMe and XP, both behave the same.

So I have two questions:
1) why does GetActiveOleObject not "find" a running MS Word instance?
2) why can't i do Server.Visible := true in fpc?

I'm really not looking forward to having to develop this (small and simple) app with Delphi 3, because I've grown fond of the Lazarus IDE's capabilities.

Bart