Autor Beitrag
Stoffel1984
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Mo 19.09.05 22:23 
Hallo,

wie kann ich überprüfen ob meine Anwendung bereits einen MessageDlg
ausgegeben hat - Hintergrund ist, ich möchte vermeiden, dass mehrere MessageDlgs
nacheinander erscheinen.

Danke!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 19.09.05 22:33 
Wenn Du einfach nur wissen willst, ob bereits ein MessageDlg offen ist, gibt es mindestens zwei Möglichkeiten:

1. Setzen einer Variablen
Funktioniert aber nur bei explizit ausgelösten MessageDlgs, in dem Du immer, wenn Du einen öffnest, eine Variable auf True setzt.

2. Überprüfung des Enabled-Status der Mainform
MessageDlgs (und andere Modal-Fenster deaktivieren vor ihrer Anzeige jegliche Formulare (außer sich selbst). Daher kann man, wenn man die Mainform auf "enabled" prüft relativ sicher modal geöffnete Formulare feststellen. Da die VCL aber nicht alle Informationen direkt an Enabled weiterreicht, kann es notwendig sein, den Aktivierungsstatus des Hauptfensters per WinAPI abzufragen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Mo 19.09.05 22:38 
Hallo Ben,

Danke für deine Hilfe.

Mhh das Problem ist, dass ShowMainForm = false ist
und das Programm in der TNA schlummert....

Das Programm gibt die Dialoge in einer Schleife raus.
Ich möchte jedoch nicht, dass wenn ein Dialog geöffnet ist ein weiterer erscheint.
Sondern der alte gelöscht wird und ein neuer angezeigt wird.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 19.09.05 22:54 
Dann kannst Du mit Screen.ActiveForm.ModalResult := mrCancel; das aktuelle Meldungsfenster schließen. Auf nicht-modale Fenster hat das keine Auswirkung.

Achtung: Das Fenster schließt sich erst im nächsten Idle-Zyklus. Du musst also per (z.B.) PostMessage (KEIN SendMessage!!!) dafür sorgen, dass das nächste Formular erst nach dem Schliießen des Meldungsfensters aktiviert wird.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
Type
    TMainform = class(TForm)
    {...}
    private
        procedure WMUser(var MSG: TMessage); message WM_USER;
        procedure CloseModalDlgs;
    {...}
    end;

{...}

Procedure TMainform.WMUser(var Msg: TMessage);
begin
    //Show the nextr Dlg
end;

Procedure TMainform.CloseModalDlgs;
var
    AF: TForm;
begin
    AF := Screen.ActiveForm;
    If Assigned(AF) Then
        AF.ModalResult := mrCancel;
    PostMessage(Handle, WM_USER, 0, 0);
end;


Achtung: Ungetestet!

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.