Solved

select a word from a Word Document to process using Delphi

Posted on 2002-05-06
8
626 Views
Last Modified: 2007-11-27
Hi guys,

Im working in a spanish check speller program written in delphi. Im using OLE automation to create an instance of Word application. I can load a document from Delphi and also, I can insert text from my delphi application to Word.

So, having a document loaded in Word, I want to get word by word (from Word document to Delphi), so I can process it with my check spell method and then return back corrected to the word document. I think I have to use some sort of select text method but I cant find how to use it...

Any expert around here to help me? I will give the points to a working example...

best regards,
Manuel Lopez (lopem)

Ps.This is the unit I am using:

unit WordAuto;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    LaunchButton: TButton;
    CloseButton: TButton;
    Memo1: TMemo;
    NewDocButton: TButton;
    TypeTextButton: TButton;
    WordText: TEdit;
    Label1: TLabel;
    procedure LaunchButtonClick(Sender: TObject);
    procedure CloseButtonClick(Sender: TObject);
    procedure NewDocButtonClick(Sender: TObject);
    procedure TypeTextButtonClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private Declarations }
    procedure AppQuit(Sender: TObject);
    procedure AppDocumentChange(Sender: TObject);
    procedure DocNew(Sender: TObject);
    procedure DocOpen(Sender: TObject);
    procedure DocClose(Sender: TObject);
  public
    { Public Declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
  AutoImpl;

var
  WordObject : TWordObject;

procedure TForm1.LaunchButtonClick(Sender: TObject);
begin
  if not Assigned(WordObject) then
  begin
    WordObject := TWordObject.Create;
    with WordObject do
    begin
      Caption := 'Delphi is RAD!';
      Visible := True;
      OnQuit := AppQuit;
      OnDocumentChange := AppDocumentChange;
      OnNewDocument := DocNew;
      OnOpenDocument := DocOpen;
      OnCloseDocument := DocClose;
    end;
    LaunchButton.Enabled := False;
    CloseButton.Enabled := True;
    NewDocButton.Enabled := True;
  end;
end;

procedure TForm1.CloseButtonClick(Sender: TObject);
begin
  if Assigned(WordObject) then begin
    LaunchButton.Enabled := True;
    CloseButton.Enabled := False;
    NewDocButton.Enabled := False;
    TypeTextButton.Enabled := False;
    WordObject.Free;
    WordObject := nil;
  end;
end;

procedure TForm1.AppDocumentChange(Sender: TObject);
begin
  Memo1.Lines.Add('Document changed');
  TypeTextButton.Enabled := WordObject.Application.Documents.Count > 0;
end;

procedure TForm1.AppQuit(Sender: TObject);
begin
  Memo1.Lines.Add('Quitting Word');
  WordObject.Free;
  WordObject := nil;
  LaunchButton.Enabled := True;
  CloseButton.Enabled := False;
  NewDocButton.Enabled := False;
  TypeTextButton.Enabled := False;
end;

procedure TForm1.DocNew(Sender: TObject);
begin
  Memo1.Lines.Add('New document');
end;

procedure TForm1.DocOpen(Sender: TObject);
begin
  Memo1.Lines.Add('Document opened');
end;

procedure TForm1.DocClose(Sender: TObject);
begin
  Memo1.Lines.Add('Document closed');
end;

procedure TForm1.NewDocButtonClick(Sender: TObject);
begin
  try
    WordObject.NewDoc('');
  except
    ShowMessage('It seems like somebody killed Word and didn''t tell me about it...');
    if Assigned(WordObject) then begin
      LaunchButton.Enabled := True;
      CloseButton.Enabled := False;
      NewDocButton.Enabled := False;
      TypeTextButton.Enabled := False;
      WordObject.Free;
      WordObject := nil;
    end;
  end;
end;

procedure TForm1.TypeTextButtonClick(Sender: TObject);
begin
  WordObject.InsertText(WordText.Text);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(WordObject) then begin
    WordObject.Free;
    WordObject := nil;
  end;
end;

end.


But... i dont know how i can get word by word from Word document to Delphi.
0
Comment
Question by:lopem
  • 5
  • 3
8 Comments
 
LVL 11

Expert Comment

by:robert_marquardt
ID: 6992894
I would write the spell checker as WLL (Word Addin DLL).
You can write procedures which can be easily assigned to Word menu items.
From there on it is mainly calling VBA. Install the VBA help of Word.
Do NOT use the index properties of the collections of Word. They are SLOW.
I made such an Addin for Word 97 and Word 97 was buggy as hell.
0
 
LVL 3

Author Comment

by:lopem
ID: 6994230
Hi Robert,

How you can write a WLL? I dont really know. In fact, I just want to know how to get an item (a word) from a Word Document to process it in my Delphi application and returnr the item (modified) to the Word document.

Best regards,
Manuel Lopez (lopem)
0
 
LVL 3

Author Comment

by:lopem
ID: 6997288
50 more points!

Any taker?
best wishes
Manuel Lopez (lopem)
0
 
LVL 11

Expert Comment

by:robert_marquardt
ID: 6997315
My Word knowledge is a bit rusty (Word 97). A WLL is nothing but a DLL with some functions with certain names exported. It is placed in a directory of the Word installation where Word loads it and calls the functions. The WLL stays loaded as long as word runs. You can export your own functions from the WLL and bind them in Word to new menu entries.
From the WLL you use COM to automate Word. The complete VBA of Word is available through COM so you implement something which is almost a VBA macro. The VBA help of Word is normally on the Word installation CD, but is not installed per default.

Please nag me and i will send you some WLL source code (in C i am afraid).
0
What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 3

Author Comment

by:lopem
ID: 6997364
Robert,

please send me your c code. Let me see if i can figure out how to do that!  Thanks in advance... My email is morsa@la-morsa.com

best regards
Manuel Lopez (lopem)
0
 
LVL 11

Accepted Solution

by:
robert_marquardt earned 150 total points
ID: 6998105
The good news is hat it is Pascal (Delphi 4 code) , the bad news is that i will need some time to write english comments and strip some confidential parts. I hope to achieve that until Sunday.
0
 
LVL 3

Author Comment

by:lopem
ID: 6998106
Hi Robert,

I appreciate your effort. Where are you from by the way? Are you from Germany?
Anyway, I will looking forward for your code...

best regards,
Manuel Lopez (lopem)
0
 
LVL 3

Author Comment

by:lopem
ID: 7003297
Thanks Robert, It seems I can work around your code...

best regards
Manuel López (lopem)

0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now