PDA

View Full Version : Makro mit msgbox unter CA hat Problem



user4711
24-02-08, 11:18
Hallo Forum,
habe schon einige Makros gebastelt, die auch ganz gut laufen, aber nun stehe ich vor einem Problem und komme nicht weiter.
Wir benutzen oft Daten vom PC, die übernommen werden müssen. Damit die User wie gewohnt ihre Datei auf dem PC auswählen können, will ich den Windows-Dateiauswahl-Dialog einbauen. Das funktioniert auch prima, wenn der Aufruf gleich am Anfang des Makros steht. Aber üblicherweise haben wir vorher noch eine msgbox, die verschiedene Infos austauscht.
Wenn die auskommentierte Zeile im Beispiel unten scharf ist, wird danach das Fenster mit der Dateiauswahl auf dem PC immer im Hintergrund geöffnet (d.h. der Anwender sieht es nicht sofort, sondern muß ahnen, dass er erst dieses Fenster suchen muß, damit das Makro weitergeht).
Wie kann ich erreichen, dass das Fenster IMMER im Vordergrund startet?
Ich hoffe mein Problem ist verständlich.

Beispiel:

[PCOMM SCRIPT HEADER]
LANGUAGE=VBSCRIPT
DESCRIPTION=
[PCOMM SCRIPT SOURCE]
OPTION EXPLICIT
autECLSession.SetConnectionByName(ThisSessionName)
DIM Antwort, dialog, pfad
DIM Mldg, Stil, Titel
Mldg = "Testmakro starten ?"
Stil = vbYesNo + vbDefaultButton1
Titel = "Testtool Datei-Dialog"
' Antwort = MSGBOX(Mldg, Stil, Titel) ' hier liegt das Problem !?
FUNCTION getFilepath(dir)
SET dialog = CreateObject("MSComDlg.CommonDialog")
dialog.Filter = "csv-Dateien (*.csv)|*.csv|alle Dateien (*.*)|*.*"
dialog.Flags = &H1004
dialog.MaxFileSize = 260
dialog.CancelError = false
dialog.DialogTitle = "csv-Datei auswählen"
dialog.InitDir = dir
dialog.ShowOpen
getFilepath = dialog.filename
END FUNCTION
as400
SUB as400
CONST ForReading = 1, ForWriting = 2, ForAppending = 3
CONST TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
pfad = getFilepath("C:\temp")
Antwort = MSGBOX("ausgewählt wurde: " & pfad, , "Funktionsergebnis")
END SUB

Weiß hier jemand Rat ?

Besten Dank !

Fuerchau
25-02-08, 08:03
Da das Makro in einem Hintergrund-Prozess abgearbeitet wird (die 5250-Sitzungen sind Unterprozesse der PC5250), kann der Fokus einer anderen Sitzung nicht einfach weggenommen werden.

Dies ist eine generelle Windowseinstellung !

Wenn eine andere Anwendung eine Nachricht ausgeben möchte, blinkt hierzu die entsprechende Titelzeile in der Taskleiste.
Da der Hintergrundprozess aber in der Taskleiste nicht auftaucht, kann man auch nicht einfach auf diesen Prozess umschalten.

user4711
25-02-08, 14:11
Hallo Herr Fuerchau,
vielen Dank für Ihre schnelle Antwort.
Dann läßt sich wohl nichts dran machen. Da seltsame ist eben nur, dass es so funktioniert, wie ich es gern hätte, wenn diese msgbox nicht vorher abläuft. Lasse ich sie weg (in meinem Test oben), ist der Dateidialog sofort im Vordergrund aktiv.
Ich dachte, es hätte damit was zu tun.

Trotzdem Danke.

Fuerchau
25-02-08, 15:04
Der Dateidialog ist eine quasi eigene Anwendung ohne "Parent"-Fenster und kommt deshalb in den Vordergrund.

Eine MSGBOX hängt sich automatisch an das Hauptfenster der Applikation und wird darüber angezeigt.

In Windows gibts irgendwo einen Parameter "Prevent Application steeling Focus" oder so ähnlich.
Diesen kann man natürlich auch für sich abschalten, was aber mitunter zum spontanen Wechsel von Fenstern führen kann.