AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein COM - Word in den Vordergrund bringen
Thema durchsuchen
Ansicht
Themen-Optionen

COM - Word in den Vordergrund bringen

Ein Thema von onk · begonnen am 11. Aug 2014 · letzter Beitrag vom 12. Aug 2014
Antwort Antwort
onk

Registriert seit: 12. Aug 2008
Ort: Berlin-Lichterfelde
8 Beiträge
 
Delphi 10 Seattle Professional
 
#1

COM - Word in den Vordergrund bringen

  Alt 11. Aug 2014, 17:47
Hallo liebe Delphianer,

das ist mein erster Post, aber ich bin schon jahrelanger Besucher von Delphi Praxis. Ich hoffe, ich gehe euch nicht zu sehr auf den Keks. Jetzt kommt die Problemstellung. Wenn ich von meinem Programm aus Word starte bleibt Word im Hintergrund. Das ist unschön, weil das der Monatsbericht ist und man erst mit Alt - Tab zu Word wechseln muss.
Ich starte von der Mainform ein Formular mit folgenden Code:
Delphi-Quellcode:
IrgendeinButtonClick((Sender: TObject);
//hier der Aufruf von Form6 aus Form1...
// den Code habe ich aus eurer Rubrik „Tipps und Tricks“ und dem SwizDelphiCenter.

Form6 := TForm6.Create(nil);
  try
    Form6.ShowModal;
  finally
    FreeAndNil(Form6);
  end;
In Form6 starte ich Word über COM. In einem Wordtemplate habe ich die Textmarke "titel" eingfügt.
Delphi-Quellcode:
// Wenn das Ereignis ausgelöst wird die hier zugewiesene Information im WordDokument eingetragen. Das ist der Monatsbericht.
// hier der Code...
meinebookmark := 'titel';
      if Doc.Bookmarks.Exists(meinebookmark) then
  begin
    R := Doc.Bookmarks.Item(meinebookmark).Range;
    // Add text at our bookmark
    // Text bei Textmarke einfügen
    r.select;
      try
    objword.selection.typetext(adodataset1.FieldByName('bezeichnung').AsString);
     except
      end;
 end;
So jetzt kommt es, die OleVariant ist auf folgende Werte eingestellt:
Delphi-Quellcode:
// ob die Reihenfolge so richtig ist? funktionieren tuts ja...
objword.Activate;
objword.WindowState:=wsNormal;
objword.Visible:=true;
Word starttet korrekt, füllt die Textmarken aus bleibt aber im Hintergrund, so ein Mist… seufz
Da wird der Monatsbericht nach Word ausgedruckt und den sollte man sofort sehen und nicht erst mit der „Alt-Tab-Kombination“ zu Word wechseln.

Jetzt probiere ich das aus...
Delphi-Quellcode:
// einzeln und in Kombination
objword.Activate;
objword.WindowState:=wsNormal;
objword.Visible:=true;
//application.hide;
application.ModalFinished;
application.minimize
//bringt aber auch nicht das gewünschte Ergebnis.
Das Problem ist, dass ich Word von der 2. Form aus starte und mir alle Aktionen mit "application" Form1 anzeigen, wo aber alles auf enabled:=false steht, weil Form6 showmodal ist.
Bin über jeden Tipp dankbar.
Liebe Grüße aus Berlin
MichiZi





Michael Zimpel

Geändert von onk (11. Aug 2014 um 18:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: COM - Word in den Vordergrund bringen

  Alt 11. Aug 2014, 20:01
Vielleicht hilft das (nach Deinen ersten 3 Zeilen, also nach "objword.Visible:=true;"):

Delphi-Quellcode:
Application.NormalizeAllTopMosts;
//Falls Dein Anwendungsfenster minimiert werden soll, nächste Zeile auskommentieren
//SendMessage (Application.mainform.handle, wm_SysCommand, sc_Minimize, 0);
Application.ProcessMessages;
BringWindowToTop (FindWindow ('opusApp', NIL));
//... evtl. weitere Aktionen
Application.RestoreTopMosts;
Kurze Erläuterung: NormalizeAllTopmost macht alle Deine Fenster Nichtmodal, so dass andere Fenster (z.B. eben Word) darüber liegen können.
Die nächste Zeile sorgt dafür, dass Dein Hauptformular minimiert wird (falls gewünscht).
Mit BringWindowToTop wird Word auf die oberste Ebene des Z-Fensterstapels verfrachtet.
RestoreTopMosts stellt wieder den Ursprungszustand Deiner Fenster her, lässt Word aber im Vordergrund.

Das funktioniert zumindest bei meinem Programm PC-Adreßzz!, welches auch Word startet, Adressdaten an ein Briefformular übergibt und Word dann anzeigt.
  Mit Zitat antworten Zitat
onk

Registriert seit: 12. Aug 2008
Ort: Berlin-Lichterfelde
8 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: COM - Word in den Vordergrund bringen

  Alt 12. Aug 2014, 06:20
Vielen Dank Harry Stahl, es funktioniert.
Endlich ist das Problem gelöst. Was ich da schon für Stunden gegoogelt und ausprobiert habe.
Darauf wäre ich ja nie gekommen. Nochmals vielen Dank und viele liebe Grüße aus Berlin von
MichiZi

Funktioniert auch mit Excel:
Delphi-Quellcode:
Application.NormalizeAllTopMosts;
Application.ProcessMessages;
BringWindowToTop (FindWindow ('XLMAIN', NIL));
Application.RestoreTopMosts;
und mit Outlook:
Delphi-Quellcode:
Application.NormalizeAllTopMosts;
Application.ProcessMessages;
BringWindowToTop (FindWindow ('MAPI', NIL));
Application.RestoreTopMosts;
Michael Zimpel

Geändert von onk (12. Aug 2014 um 08:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: COM - Word in den Vordergrund bringen

  Alt 12. Aug 2014, 08:25
Kleine Anmerkung am Rande, weil ich auch mal einen "Reportgenerator" in Word durch Ersetzung von Textmarken entwickelt hatte. OLEVariant ist, abgesehen vom händischen Tippen, die langsamste Zugriffsmöglichkeit, die Du Dir dazu hättest aussuchen können. Bei 10 Textmarken ist das vermutlich egal. Ich hatte über 300...da merkt man das schon

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
onk

Registriert seit: 12. Aug 2008
Ort: Berlin-Lichterfelde
8 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: COM - Word in den Vordergrund bringen

  Alt 12. Aug 2014, 10:39
Hallo Sherlock,
das war bisher mein Ansatz: Word und Textfelder...
Wenn es eine bessere Variante gibt, bin ich für jeden weiteren Hinweis dankbar. Ich hab wirklich nur maximal 8 Textmarken, da ist es noch flott.
Danke Sherlock
Michael Zimpel
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: COM - Word in den Vordergrund bringen

  Alt 12. Aug 2014, 10:49
Dann mach Dir keine Gedanken. Wie gesagt, ist zwar ungefähr Faktor 10 langsamer, aber bei 8 Textmarken vernachlässigbar.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: COM - Word in den Vordergrund bringen

  Alt 12. Aug 2014, 17:07
Vielen Dank Harry Stahl, es funktioniert.
Endlich ist das Problem gelöst. Was ich da schon für Stunden gegoogelt und ausprobiert habe.
Darauf wäre ich ja nie gekommen. Nochmals vielen Dank und viele liebe Grüße aus Berlin von
MichiZi
Gern geschehen. Freut mich, dass Deine erste Frage im Forum direkt erfolgreich geklärt werden konnte.
Weiterhin viel Erfolg hier im Forum und mit Delphi.
  Mit Zitat antworten Zitat
onk

Registriert seit: 12. Aug 2008
Ort: Berlin-Lichterfelde
8 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: COM - Word in den Vordergrund bringen

  Alt 12. Aug 2014, 20:58
Sherlock
Also bei mir ist es so:
Ich klicke auf den WordReportButton und meine Form ist noch sichtbar und der User sieht ein sich drehenden Kreis als Sanduhr verkleidet.
Sind alle Textmarken gefüllt wird Word erst sichtbar. Bei 300 Textmarken würde ich eine Progressbar in Aktion setzen. Also ist alles schön Anwendergerecht,
der kann nämlich dann erst mal eine Pause machen.

Wenn ich so eine Situation mit 300 Textmarken hätte, würde ich erst mal meine TOfficePartner Komponente raus kramen.
Die ist gar nicht mal so schlecht und Freeware. Ob das auch alles mit Office 2007 und aufwärts funktioniert wird sich dann zeigen.

Viele Grüße aus Berlin
MichiZi


Delphi2005(NetFrameWork 1.1), Windows 8.1 mein Ziel: RadStudio XE6
Michael Zimpel

Geändert von onk (12. Aug 2014 um 21:04 Uhr)
  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 11:01 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