Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars (https://www.delphipraxis.net/187615-fremde-anwendung-modal-starten-neuzeichnen-des-eigenen-formulars.html)

ernschd 15. Dez 2015 08:55

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:
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);
Leider friert mir dabei mein Hauptformular ein, bzw. benötigt ein Refresh, wenn das fremde Programm im Fenster darüber gezogen wird (siehe Screenshot).

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

mm1256 15. Dez 2015 09:05

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;

ernschd 15. Dez 2015 09:09

AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
 
Funktioniert leider nicht bei mir, es sieht noch genau so aus :(

himitsu 15. Dez 2015 09:26

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:
Application.ProcressMessage;
, in einer Schleife. :roll:

ernschd 15. Dez 2015 09:47

AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
 
Ok, danke, ich habe es so gelöst:

Delphi-Quellcode:
while WaitForSingleObject(info.hProcess, 50) = Wait_Object_0 do
    Application.ProcessMessages;
Edit
Die Lösung hat nur den kleinen Nachteil, dass die fremde Anwendung nicht mehr modal ist. Ich kann also munter in meinem Hauptformular rumklicken...

Sir Rufo 15. Dez 2015 10:02

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?

himitsu 15. Dez 2015 10:03

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)

Sir Rufo 15. Dez 2015 10:11

AW: Fremde Anwendung modal starten, Neuzeichnen des eigenen Formulars
 
Zitat:

Zitat von himitsu (Beitrag 1324491)
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)

Natürlich kann man da rumklicken ... und es passiert dort nur das, was ich auch zulasse ... ist ja mein Formular, da kann ich mit machen was ich will ... ;)

himitsu 15. Dez 2015 10:22

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".

ernschd 15. Dez 2015 10:42

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).


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr.
Seite 1 von 2  1 2      

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