Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Message erhalten während modaler Dialog offen (https://www.delphipraxis.net/13317-message-erhalten-waehrend-modaler-dialog-offen.html)

roderich 16. Dez 2003 09:02


Message erhalten während modaler Dialog offen
 
weiß nicht ob das Topic hier reingehört.... :gruebel:

Normalfall:
Programm A hat zahlreche Fenster (nichtmodal) offen, mit Show angezeigt
Programm B schickt ans Hauptformular von Programm A eine Message
In A wird beim Empfangen dieser Message eine Reaktion auslöst, mehrere Fenster auf/zu etc. usw.

Problemfall:
In A hat der User ein modales Fenster offen (evtl. sogar mehrere, d.h. verschachtelt)
A erhält nun die besagte Message
Obige Reaktion mit Öffnen neuer Fenster (nichtmodal)
-> Problem: die neu geöffneten Fenster sind quasi auch modal, d.h. sie müssen nach Schließen des ersten modalen Fensters auch erst geschlossen werden, bevor der User weitermachen kann.

Meine Frage an die Gurus: kann ich beim Empfang einer Message feststellen, ob gerade ein Fenster (oder Dialog) modal geöffnet ist ? Dann könnte ich die Message einfach ignorieren.


Roderich

Luckie 16. Dez 2003 09:11

Re: Message erhalten während modaler Dialog offen
 
Setz doch eine boolean variable, wenn ein Button geklickt wird, um ein modales Fenster zu öffnen.

sakura 16. Dez 2003 09:12

Re: Message erhalten während modaler Dialog offen
 
Oder nutze einfach diesen simple Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to Pred(Screen.FormCount) do
    if fsModal in Screen.Forms[I].FormState then
      ShowMessage('modal form found');
end;
...:cat:...

roderich 16. Dez 2003 09:21

Re: Message erhalten während modaler Dialog offen
 
@Luckie: geht schlecht, habe zu viele Möglichkeiten, was modales aufzumachen. Könnte ein Form sein (davon hab ich viele...), aber auch irgendein Dialog irgendwo (davon hab ich auch viele...).

@Sakura: hört sich an als wär das genau das Richtige. Weißt Du aus dem Kopf, ob Standard-Dialoge auch in Screen.Forms drin sind ?

vielen Dank für die schnelle Antwort (wie immer... :dp:)
Roderich

sakura 16. Dez 2003 09:22

Re: Message erhalten während modaler Dialog offen
 
Zitat:

Zitat von roderich
Weißt Du aus dem Kopf, ob Standard-Dialoge auch in Screen.Forms drin sind ?

Meinst Du MessageBox etc... ich glaube nicht, da die von Windows erzeugt werden und somit keine Forms im Sinne von Delphi sind :|

...:cat:...

roderich 16. Dez 2003 09:39

Re: Message erhalten während modaler Dialog offen
 
schaut gut aus:

Zitat:

Lists all the forms currently displayed in the application.

property Forms[Index: Integer]: TForm;

Description

Use Forms to access a form by index. The value of Index is a number between zero (the first form) and FormCount - 1. Forms can be used with FormCount when an application needs to iterate over all its forms, including all dialogs.
das einzige was ich dann noch manuell abfragen müßte, sind Dialoge aus dll's, die nicht direkt zur Applikation gehören.

nochmals vielen Dank, hat mir sehr geholfen!
Roderich

sakura 16. Dez 2003 09:40

Re: Message erhalten während modaler Dialog offen
 
Yepp, die letzten drei Worte klingen recht optimistisch.

...:cat:...

OLLI_T 16. Dez 2003 10:08

Re: Message erhalten während modaler Dialog offen
 
Guten Morgen Roderich!

Hab eben versucht, Dein Szenario mit einem Timer(Message), einem OpenDialog und einer weiteren Form nachzuspielen. Also bei mir sieht das ganz nett aus. Wenn man einen kleinen Blick in die Unit Forms wirft und sich dort die Funktionen DisableTaskWindows und DoDisableWindow betrachtet, ist das eigentlich ganz schlüssig.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog.Execute;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  If Not IsWindowEnabled(Self.handle) Then // Hier liegt der Hase im Pfeffer
     Label1.Caption:='Disabled';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  form2.Showmodal;
end;
Wenn´s was bringt freut sich ...

OLLI

Ps.: Nicht die Property Enabled nutzen. Das ist nur "VCL Schnickschnack".

roderich 16. Dez 2003 10:13

Re: Message erhalten während modaler Dialog offen
 
danke Olli !

IsWindowEnabled hört sich laut API-Hilfe auch recht gut an, werd's testen (nicht im Moment, da mein Arbeits-Stack gerade am Überlaufen ist...).

Danke + Gruß
Roderich


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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