// Eventuell Felder aktuallisieren im Optionendialog.Drucken von Word ausschalten,
// sonst kann es passieren, dass den Anwendern beim Drucken Daten verloren gehen.
// Den Schalter Feldfunktionen Optionendialog.Ansicht ausschalten, sonst sieht
// man den Inhalt der Felder nicht.
// WordBool -> True und False werden durch WordBool(1) und WordBool(0) dargestellt.
unit WordSchnittstelle;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleServer, Grids, ValEdit, ExtCtrls, IniFiles,
ActnList, ComObj,
ActiveX;
type
TfmWordSchnittstelle =
class(TForm)
pnMain: TPanel;
pnTop: TPanel;
btnWordStarten: TButton;
btnWordBeenden: TButton;
vleWordVorlagen: TValueListEditor;
odVorlagen: TOpenDialog;
procedure btnWordStartenClick(Sender: TObject);
procedure btnWordBeendenClick(Sender: TObject);
function WordStarten(sTemplate :
String) : Boolean;
procedure WordBeenden;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure FormKeyPress(Sender: TObject;
var Key: Char);
function CreateWord : Boolean;
private
{ Private-Deklarationen }
CanClose : Boolean;
sCaption :
String;
sCaptionTemp :
String;
public
{ Public-Deklarationen }
FVisible: Boolean;
FWord: Variant;
FWordCreated: Boolean;
FWordDoc : Variant;
end;
var
fmWordSchnittstelle: TfmWordSchnittstelle;
implementation
{$R *.dfm}
function tfmWordSchnittstelle.CreateWord : Boolean;
begin
FWordCreated := False;
Try
FWord := GetActiveOleObject('
Word.Application');
FWordCreated := True;
Except
on e :
Exception Do Begin
// MessageDlg(e.Message + #13 + 'Word.Application not Active',mtError,[mbok],0);
FWordCreated := False;
End;
End;
If Not FWordCreated
Then Begin
try
FWord := CreateOLEObject('
Word.Application');
FWordCreated := True;
except
on e :
Exception Do Begin
// MessageDlg(e.Message,mtError,[mbok],0);
FWordCreated := False;
End;
End;
End;
FWord.Visible := True;
If FWordCreated
Then Begin
Try
FWordDoc := CreateOleObject('
Word.Document');
FWordDoc.Activate;
FWordCreated := True;
Except
on e :
Exception Do Begin
MessageDlg('
Der Aufruf von Word ist fehlgeschlagen.' + #13
+ '
Ursache: ' + e.
Message,mtError,[mbok],0);
FWordCreated := False;
End;
End;
End;
Result := FWordCreated;
End;
function TfmWordSchnittstelle.WordStarten(sTemplate :
String) : Boolean;
Var
ovTemplate : OleVariant;
ovVisible : OleVariant;
sError :
String;
Begin
Result := False;
ovVisible := WordBool(0);
odVorlagen.Title := '
Bitte Serienbriefvorlage auswählen.';
If CreateWord
Then Begin
If Trim(sTemplate) <> '
'
Then Begin // wurde uns gesagt, welche Vorlage?
ovTemplate := vleWordVorlagen.Values[sTemplate];
Try // diese öffnen
FWordDoc := FWord.Documents.Add(ovTemplate,WordBool(0),EmptyParam, EmptyParam);
Result := True;
Except
on e :
Exception Do Begin
MessageDlg('
Falsche WinWord-Version.' + #13 + e.
Message,mtError,[mbok],0);
FWord := UnAssigned;
End;
End;
End Else If odVorlagen.Execute
Then Begin // es wurde nicht gesagt, welche Vorlage,
ovTemplate := odVorlagen.FileName;
// über Dialog Vorlage auswählen lassen.
Try
FWordDoc := FWord.Documents.Add(ovTemplate,WordBool(0),EmptyParam, EmptyParam);
Result := True;
Except
on e :
Exception Do Begin
MessageDlg('
Falsche WinWord-Version.' + #13 + e.
Message,mtError,[mbok],0);
FWord := UnAssigned;
End;
End;
End Else Begin
sError := '
Fehlerhafter Aufruf der Wordschnittstelle.';
MessageDlg(sError,mtInformation,[mbOk],0);
End;
End Else Begin
MessageDlg('
Word konnte nicht gestartet werden',mtError,[mbok],0);
End;
End;
procedure TfmWordSchnittstelle.WordBeenden;
Begin
FWordDoc.Activate;
FWord.Activate;
FWordDoc := Unassigned;
FWord := Unassigned;
End;
procedure TfmWordSchnittstelle.btnWordStartenClick(Sender: TObject);
Var
sTemplate :
String;
begin
sTemplate := vleWordVorlagen.Cells[0,vleWordvorlagen.Row];
WordStarten(sTemplate);
end;
procedure TfmWordSchnittstelle.btnWordBeendenClick(Sender: TObject);
begin
WordBeenden;
end;
procedure TfmWordSchnittstelle.FormCreate(Sender: TObject);
Var
iniVorlagen : tIniFile;
begin
CanClose := True;
sCaption := Caption;
sCaptionTemp := Caption;
iniVorlagen := tIniFile.Create(Application.ExeName + '
.ini');
iniVorlagen.ReadSectionValues('
WORDVORLAGEN',vleWordVorlagen.Strings);
iniVorlagen.Free;
vleWordVorlagen.Col := 1;
vleWordVorlagen.Row := 1;
end;
procedure TfmWordSchnittstelle.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
If CanClose
Then Begin
Action := caHide;
End Else Begin
Action := caNone;
End;
end;
procedure TfmWordSchnittstelle.FormShow(Sender: TObject);
begin
CanClose := True;
end;
procedure TfmWordSchnittstelle.FormKeyPress(Sender: TObject;
var Key: Char);
begin
Case Key
Of
#32..#255 :
Begin
Caption := sCaptionTemp + '
*';
End;
End;
end;
end.