AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Message erhalten während modaler Dialog offen
Thema durchsuchen
Ansicht
Themen-Optionen

Message erhalten während modaler Dialog offen

Ein Thema von roderich · begonnen am 16. Dez 2003 · letzter Beitrag vom 16. Dez 2003
Antwort Antwort
roderich
(Gast)

n/a Beiträge
 
#1

Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 09:02
weiß nicht ob das Topic hier reingehört....

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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 09:11
Setz doch eine boolean variable, wenn ein Button geklickt wird, um ein modales Fenster zu öffnen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 09:12
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;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#4

Re: Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 09:21
@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... )
Roderich
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 09:22
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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#6

Re: Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 09:39
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 09:40
Yepp, die letzten drei Worte klingen recht optimistisch.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
OLLI_T

Registriert seit: 13. Okt 2003
Ort: Nähe Wetzlar / Hessen
143 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 10:08
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".
No Pain No Gain!
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#9

Re: Message erhalten während modaler Dialog offen

  Alt 16. Dez 2003, 10:13
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
  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 22:18 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