![]() |
Open Dialog autoconnect
Hy,
Ich habe auf meinem formular einen opendialog. Dazu ein WordDokument und eine WordApplikation Nun wird jedes mal wenn ich über einen Button das WordFile öffne noch einmal ein Fenster angezeigt wo ich noch einmal auf öffnen gehen muss. Leider gibt es für den OpenDialoge kein AutoConnect. Beim WordDocument und beim der WordApplication hab ich schon die Ereignisse Autoconnect auf True gestellt. Kann mir Jemand helfen? Grüße SnakeSchitt |
Re: Open Dialog autoconnect
Ich verstehe nicht so recht, was Du machen willst. Willst Du über Delphi ein Word Dokument öffnen ?
|
Re: Open Dialog autoconnect
Ich verstehe es auch nicht ganz. Wenn du den OpenDialog via Execute öffnest kannst du doch danach, in so fern True geliefert wird, zum Word-Dokument connecten.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var WordFileName : String; begin if (OpenDialog1.Execute) then begin WordFileName := OpenDialog.FileName; { Ab hier kannst ja das File der WordApplication übergeben oder damit machen was du willst. } end; end; |
Re: Open Dialog autoconnect
hier mal mein Quelltext:
Delphi-Quellcode:
Nur den Ausschlaggebenden Teil ...
procedure TNeuenbeitraganlegen.Button_beitrag_freistellungClick(
Sender: TObject); var FileName:OleVariant; vWhat, vBookmark:OleVariant; p1, p2, p3, t1, t2, t3, u1, u2, u3 : integer; s, titel, untertitel, titelneu1, titelneu2, untertitelneu1, untertitelneu2 : string; begin if OpenDialog1.Execute then FileName := OpenDialog1.FileName else exit; ... Oder sollte ich einfach nur opendialog1.execute nehmen? Ohne die if anweisung |
Re: Open Dialog autoconnect
Wenn ichs so mache krieg ich trotzdem das Fenster und werd gefragt welche datei ich öffnen will
|
Re: Open Dialog autoconnect
Über gibts Du den Inhalt der Variable Filename an das erstellte OLE-Object ? Das Grundgerüst hat Armin Dir ja schon gegeben. Ich habe zur Zeit kein Delphi, aber das VB-Makro sieht so aus, um eine Datei zu öffnen :
Code:
ChangeFileOpenDirectory "H:\Testdrucke\"
Documents.Open FileName:="Testdruck.doc", ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", Format:=wdOpenFormatAuto |
Re: Open Dialog autoconnect
Ich übergebe dem Wordfile einzelne Daten über die Bookmarks.
Auf dem Wordfile habe ich Textmarken erstellt und gebe dann Strings aus Editfeldern und Comboboxen an das File. |
Re: Open Dialog autoconnect
Wems hilft hier mal der Ganze Hammer an Quelltext:
Delphi-Quellcode:
procedure TNeuenbeitraganlegen.Button_beitrag_freistellungClick(
Sender: TObject); var FileName:OleVariant; vWhat, vBookmark:OleVariant; p1, p2, p3, t1, t2, t3, u1, u2, u3 : integer; s, titel, untertitel, titelneu1, titelneu2, untertitelneu1, untertitelneu2 : string; begin if OpenDialog1.Execute then FileName := OpenDialog1.FileName else exit; // Titel auslesen s := Edit_beitrag_anlegen_titel.text; p1 := Pos('"',s); //Auslesen erste Position p2 := PosEx('"', s, p1 + 1); //Auslesen zweite Position p3 := length(s); // nun wird der Text dazwischen gespeichert und an die Variable Titel übergeben titel := Copy(s, (p1+1), (p2-2)); // Untertitel auslesen, und an Untertitel übergeben untertitel := Copy(s, (p2+2), (p3)); // Länge des Titels auf zwei Zeilen teilen, sollte dieser Länger als 45 Zeichen sein if length(titel) > 45 then begin t1 := 1; t2 := PosEx(' ', titel, 40); t3 := length(titel); titelneu1 := Copy(titel, (t1), (t2)); titelneu2 := Copy(titel, (t2), (t3)); end else begin titelneu1 := titel; end; // Länge des Untertitels auf zwei Zeilen teilen, sollte dieser Länger als 45 Zeichen sein if length(untertitel) > 45 then begin u1 := 1; u2 := PosEx(' ', untertitel, 40); u3 := length(untertitel); untertitelneu1 := Copy(untertitel, (u1), (u2)); untertitelneu2 := Copy(untertitel, (u2), (u3)); end else begin untertitelneu1 := untertitel; end; WordApplication1.Connect; WordApplication1.Documents.OpenOld(FileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); WordDocument1.ConnectTo(WordApplication1.ActiveDocument); WordApplication1.Visible := True; vWhat:=wdGoToBookmark; vBookmark:= 'VORNAME'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText(ComboBox_beitrag_anlegen_vorname.text); vWhat:=wdGoToBookmark; vBookmark:= 'NACHNAME'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText(ComboBox_beitrag_anlegen_nachname.text); vWhat:=wdGoToBookmark; vBookmark:= 'LAENGE'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText(MaskEdit_beitrag_anlegen_dauer.text); vWhat:=wdGoToBookmark; vBookmark:= 'NR'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText(Label_beitrag_anlegen_nummer.Caption); vWhat:=wdGoToBookmark; vBookmark:= 'TITEL1'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText(titelneu1); vWhat:=wdGoToBookmark; vBookmark:= 'UNTERTITEL1'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText(untertitelneu1); vWhat:=wdGoToBookmark; vBookmark:= 'TITEL2'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText(titelneu2); vWhat:=wdGoToBookmark; vBookmark:= 'UNTERTITEL2'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText(untertitelneu2); end; |
Re: Open Dialog autoconnect
Wann tritt das Problem auf ? Wenn Du Word geschlossen hast oder offen hast ?
Edit: Dieses Beispiel funktioniert :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var FileName:OleVariant; vWhat, vBookmark:OleVariant; begin if OpenDialog1.Execute then FileName := OpenDialog1.FileName else exit; if assigned(WordApplication1) then begin WordApplication1.Connect; WordApplication1.Documents.OpenOld(FileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); WordDocument1.ConnectTo(WordApplication1.ActiveDocument); WordApplication1.Visible := True; vWhat:=wdGoToBookmark; vBookmark:='Name'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText('Max Mustermann'#13'Dorfstraße 100'); end; end; |
Re: Open Dialog autoconnect
An sich ist es kein echtes Problem.
Es wäre nur entscheidend bequemer wenn nicht nach dem klicken des Buttons noch einmal ein Fenster aufgeht und ich extra öffnen muss sondern das Dokument sich ohne weiteres nachfragen öffnet. Funktionieren tut es. Auch die Übergabe und alles andere. |
Re: Open Dialog autoconnect
Zitat:
|
Re: Open Dialog autoconnect
Ich habs mal mit deinem Beispiel ausprobiert.
Den einzigen Unterschied zu meiner Variante war die If Anweisung: if assigned(WordApplication1) then begin Aber auch wenn ich das mit drin hab fragt er mich einmal extra. Liegt es vllt am ConnectKind vom OpenDailog? Ich hab im mom die Einstellung: ckRunningOrNew Oder habe ich einen Denkfehler? Muss es denn immer so sein. In der Hilfe zum TOpenDialog steht es nämlich genauso dirn wies bei mir passiert: TOpenDialog zeigt ein Dialogfeld an, in dem der Benutzer Dateien auswählen und öffnen kann. Das Dialogfeld wird zur Laufzeit erst angezeigt, nachdem es mit der Methode Execute aktiviert wurde. Wenn der Benutzer auf Öffnen klickt, wird das Dialogfeld geschlossen, und die ausgewählten Dateien werden in der Eigenschaft File gespeichert. |
Re: Open Dialog autoconnect
Ja, es wird ja explizit gesagt dass ein Dialogfenster geöffnet wird auf dem auf öffnen geklickt werden muss.
Gibt es eine Komponente bei der dies nicht extra notwendig ist? |
Re: Open Dialog autoconnect
Wenn du gar kein Dialogfenster zum auswählen und öffnen einer Datei haben willst, warum machst du dann Opendialog.execute ?
|
Re: Open Dialog autoconnect
weil ich in diesem zusammenhang nur den kannte.
Was gibt es denn für eine clevere Lösung wenn ich das nicht haben will? |
Re: Open Dialog autoconnect
Warum übergibts Du den Pfad mit der Datei direkt an Word übergeben.
|
Re: Open Dialog autoconnect
Wie sähe das denn aus?
Ich hatte mal eine Variante mit cdoc gesehen aber mich nicht weiter damit beschäftigt. |
Re: Open Dialog autoconnect
So zum Beispiel :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var FileName:OleVariant; vWhat, vBookmark:OleVariant; begin FileName := 'C:\Test\testdokument.doc'; if assigned(WordApplication1) then begin WordApplication1.Connect; WordApplication1.Documents.OpenOld(FileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); WordDocument1.ConnectTo(WordApplication1.ActiveDocument); WordApplication1.Visible := True; vWhat:=wdGoToBookmark; vBookmark:='Name'; WordApplication1.Selection.GoTo_(vWhat,emptyParam,emptyParam,vBookmark); WordApplication1.Selection.TypeText('Max Mustermann'#13'Dorfstraße 100'); end; end; |
Re: Open Dialog autoconnect
Danke für deine Hilfe.
Funktioniert jetzt. Habs aber so gelöst:
Delphi-Quellcode:
Hab mich an nem älteren Beispiel orientiert.
var FileName:OleVariant;
vWhat, vBookmark:OleVariant; CDoc : string; p1, p2, p3, t1, t2, t3, u1, u2, u3 : integer; s, titel, untertitel, titelneu1, titelneu2, untertitelneu1, untertitelneu2 : string; begin cdoc:= 'C:\Users\Flo\Desktop\OffenerKanal\DatenbankProjekt\TEST FREISTELLUNG 2010.doc'; FileName := cDoc; Nochmal, Danke für die Hilfe! |
Re: Open Dialog autoconnect
Warum so umständlich über eine extra String Variable ? Zumal würde ich den komplette String noch in doppelte Anführungszeichen setzen, da sich Leerzeichen im Pfad und Dateinamen befinden.
Ich würde es eher so schreiben :
Delphi-Quellcode:
Edit:
var FileName:OleVariant;
vWhat, vBookmark:OleVariant; p1, p2, p3, t1, t2, t3, u1, u2, u3 : integer; s, titel, untertitel, titelneu1, titelneu2, untertitelneu1, untertitelneu2 : string; begin FileName := '"C:\Users\Flo\Desktop\OffenerKanal\DatenbankProjekt\TEST FREISTELLUNG 2010.doc"'; Zusätzlich solltest Du Dir noch diesen ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz