![]() |
Delphi-Version: 2007
Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
mit folgendem Code öffne ich erfolgreich ein fremdes Programm "modal":
Delphi-Quellcode:
Leider friert mir dabei mein Hauptformular ein, bzw. benötigt ein Refresh, wenn das fremde Programm im Fenster darüber gezogen wird (siehe Screenshot).
FillChar(info, sizeof(info), 0);
info.cbSize := sizeOf(info); info.lpVerb := 'open'; info.lpFile := PChar(CmdLine); info.lpParameters := PChar(parameters); info.nShow := SW_SHOW; info.fMask := SEE_MASK_NOCLOSEPROCESS; ShellExecuteEx(@info); WaitForSingleObject(info.hProcess, Infinite); Wie kann ich das Formular neu zeichnen lassen oder dieses Verhalten umgehen? Ich habe auch schon vor dem ShellExecuteEx das Hauptformular ausgeblendet, aber das könnte den Anwender verwirren. Danke und Grüße |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Delphi-Quellcode:
if info.hProcess > 32 then begin
WaitForInputIdle(info.hProcess, INFINITE); WaitForSingleObject(info.hProcess, INFINITE); end; |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Funktioniert leider nicht bei mir, es sieht noch genau so aus :(
|
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Wenn DU sagst "Warte bis fertig und mache nix Anderes", dann macht Delphi das auch.
Code in einen Thread auslagern ODER kein INFINITE, sondern ab und an mal
Delphi-Quellcode:
, in einer Schleife. :roll:
Application.ProcressMessage;
|
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Ok, danke, ich habe es so gelöst:
Delphi-Quellcode:
Edit
while WaitForSingleObject(info.hProcess, 50) = Wait_Object_0 do
Application.ProcessMessages; Die Lösung hat nur den kleinen Nachteil, dass die fremde Anwendung nicht mehr modal ist. Ich kann also munter in meinem Hauptformular rumklicken... |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Wie schaltet man die eigene Anwendung in so einen modalen Zustand?
In dem man eine Form modal anzeigt? |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
In einem "modalen" Fenster kann man auch rumklicken, wenn die Anwendung richtig läuft. :angle:
PS: vorher z.B. Enabled der Form auf False setzen :zwinker: (oder den/die Button) |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Zitat:
|
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Wollte nur sagen:
Modal bezieht sich nicht auf das Fenster selber, sondern auf andere Fenster der Anwendung ... bin ich "modal", dann sind vorherrige Fenster "Disabled". |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Genau, ich meine damit, dass die fremde Anwendung ganz normal bedienbar sein soll, mein Hauptformular aber so lange nicht, bis die fremde Anwendung wieder beendet wird.
So wie das Verhalten von ShowModal beim Anzeigen eines Formulars (die Hintergrundanwendung ist nicht anklickbar). |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Und was hindert dich jetzt daran ein Formular mit ShowModal aufzurufen, das so lange angezeigt wird, wie die externe Anwendung läuft?
|
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Ich glaube, wir reden aneinander vorbei:
meine Anwendung (z.B. myApp) soll eine andere Anwendung starten (z.B. secApp). Dabei soll secApp im Vordergrund geöffnet werden, und myApp sichtbar bleiben, aber nicht bedienbar sein, so lange secApp läuft. Das habe ich mittlerweile auch hinbekommen. |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Wir reden nicht aneinander vorbei, du verstehst mich nur nicht ;)
Stell dir vor, du hast eine
Delphi-Quellcode:
und die verwendest du wie folgt:
TStarteExterneAnwendungForm
Delphi-Quellcode:
und diese Form startet jetzt diese externe Anwendung ... und schliesst sich automatisch, wenn die externe Anwendnung beendet wurde.
procedure DoRun( const CmdLine, Parameters : string );
var LDialog: TStarteExterneAnwendungForm; begin LDialog := TStarteExterneAnwendungForm.Create( nil ); try LDialog.CmdLine := CmdLine; LDialog.Parameters := Parameters; LDialog.ShowModal; finally LDialog.Free; end; end; Wird es jetzt klarer? |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Hallo,
warum machst du vor dem Aufruf des fremden Programmes kein
Delphi-Quellcode:
?
Self.Enabled:= False;
Heiko |
AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
Zitat:
Auch das "Zwischenschalten" eines modalen Fensters ist keine "optimale" Lösung, weil das Problem ganz einfach beseitigt werden kann.... Zitat:
Delphi-Quellcode:
info.Wnd := ....das Handle des aufrufenden Fensters
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 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