AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Word öffnen / Klasse

Ein Thema von Anuschka · begonnen am 23. Jan 2007 · letzter Beitrag vom 23. Jan 2007
Antwort Antwort
Anuschka

Registriert seit: 22. Okt 2004
19 Beiträge
 
Delphi 5 Enterprise
 
#1

Problem mit Word öffnen / Klasse

  Alt 23. Jan 2007, 10:25
Hallo zusammen,

ich habe wieder mal ein kleines Problem.
Ich möchte mit Delphi ein Word Dokument öffnen und etwas hineinschreiben.
Soweit kein Problem.

Wenn ich alles in ein Project schreibe ohne verschiedene Klassen funktioniert alles wunderbar.

Nun möchte ich aber eine Klasse mit der Graphischen Oberfläche und eine Klasse mit der Word Abwicklung haben
Und genau da läuft es vor den Baum.

Immer wenn ich das Word Dokument öffnen möchte, bekomme ich die Fehlermeldung:
Exception: EAccessViolation

Komisch ist nur, wenn ich wie gesagt das ganze nicht in Klassen trenne funktioniert es.

Ich poste euch mal beide Klassen. Vielleicht sieht einer von euch das Problem.

Die Gui.pas:
Code:
unit Gui;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    WordApplication1: TWordApplication;
    WordDocument1: TWordDocument;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  ExpDoc : TWordExp;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var FileName, newFile: OleVariant;
begin
ExpDoc := TWordExp.Create;
ExpDoc.test;
end;

end.
und hier noch die WordEx.pas
Code:
unit WordEx;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Word97, OleServer, Word2000;

type
  TWordExp = class(TForm)
    SaveDialog1: TSaveDialog;
    WordApplication1: TWordApplication;
    WordDocument1: TWordDocument;
    Constructor Create ;
    Procedure test();
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  WordExp: TWordExp;

implementation

{$R *.DFM}

Constructor TWordExp.Create;
Begin
ShowMessage('Object wurde erzeugt!!!');
end;
Procedure TWordExp.test();
var FileName, newFile: OleVariant;
Begin
ShowMessage('OPEN WORD');
FileName := 'c:\vorlage.dot';
WordApplication1.Connect;
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
WordAppLication1.Visible := true;
end;

end.
In der WordEx.pas bringt er an folgender Stelle
WordApplication1.Connect;
die oben beschriebene Fehlermeldung.


Vielen Dank im Vorraus für Ideen
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Problem mit Word öffnen / Klasse

  Alt 23. Jan 2007, 10:39
kann mich irren, aber evtl. solltest du die Klasseninstanz auch erzeugen vor dem benutzen

greetz
  Mit Zitat antworten Zitat
Anuschka

Registriert seit: 22. Okt 2004
19 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Problem mit Word öffnen / Klasse

  Alt 23. Jan 2007, 10:45
Hi erstmal danke für deine Antwort. Das macht das Projekt doch automatisch.
Das Objekt wird auch erzeugt und funktioniert. Das weiss ich daher, weil die Show Messages komplett kommen.
Delphi-Quellcode:
ShowMessage('Object wurde erzeugt!!!');
end;
Procedure TWordExp.test();
var FileName, newFile: OleVariant;
Begin
ShowMessage('OPEN WORD');
das macht er ja. Daher ist das Objekt auch erzeugt, sonst müsste er die Fehlermeldung da schon bringen.
Aber die kommt ja eben erst bei dem besagten Connect.

LG
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Problem mit Word öffnen / Klasse

  Alt 23. Jan 2007, 10:49
Okay... hab mich zu kurz ausgedrückt.

Bevor du dein TWordApplication benutzen kannst musst du eine Instanz erzeugen. Wärend es als invis-Component auf einer Form automatisch created wird ist das innerhalb deiner Klasse nicht der Fall. Und Achtung. Auch wieder freigeben.

du solltest also deinen Constructor erweitern mit:

Self.WordApplication1 := TWordApplication.Create({weiss nich}); und einen destructor anlegen, der es auch wieder freigibt:

Self.WordApplication1.Free; Noch eine Anmerkung... schieb die ganzen Subklassen ins Private und sprich sie über Public-Funktionen und/oder Properties an. Unter umständen macht sich auch eine Saubere Benennung (z.B.: FWordApp statt WordApplication1) wobei 'F' für Field steht (glaub ich ) und Quelltext-Einrückung positiv bemerkbar (Übersicht und so ).

greetz

Edit: Hoppla.. jetzt erst gesehn.. warum leitest du von TForm ab??? in dem Fall reicht doch TObject
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem mit Word öffnen / Klasse

  Alt 23. Jan 2007, 10:54
Dein Constructor sollte mit override oder reintroduce gekennzeichnet werden. Dann fehlt das inherited - das Object wird nicht korrekt erzeugt. Ausserdem sollte auch noch ein entsprechzend angepasster destructor vorhanden sein.
Delphi-Quellcode:
constructor Create(AOwner: TComponent) ; override;
...
Procedure TForm1.Create(AOwner: TComponent);
begin
   inherited;
   // Hier kommen dann Deine "Spezialitäten"
end;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz