AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

MessageBox/Dlg per Programm schließen

Ein Thema von Kraisel · begonnen am 10. Mär 2014 · letzter Beitrag vom 13. Mär 2014
Antwort Antwort
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
63 Beiträge
 
Delphi 10.3 Rio
 
#1

MessageBox/Dlg per Programm schließen

  Alt 10. Mär 2014, 16:01
Hallo,

kann ich die MessageBox und den MessageDlg per Programm schließen, und zwar ohne Messages wie z.B. SendMessage(Application.ActiveFormHandle, WM_CLOSE, 0, 0)?

DestroyWindow(Application.ActiveFormHandle) schließt die Fenster, aber danach reagiert die MainForm nicht mehr, obwohl z.B. mein Timer noch läuft.
Auch ein Application.MainForm.SetFocus nach dem DestroyWindow hilft NICHT.

Nach CloseWindow(..) scheint alles andere richtig zu reagieren, aber die Fenster werden NUR minimiert und müssen per Klick entfernt werden.

Vielen Dank.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.

Geändert von Kraisel (10. Mär 2014 um 16:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.615 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: MessageBox/Dlg per Programm schließen

  Alt 10. Mär 2014, 16:09
Timer?

Du willst nicht zufällig eine MessageBoxTimeout haben?


Modale Fenster erstellt Delphi so, indem es alle anderen Fenster disabled (nicht über .Enable) und wenn du nur das Fenster zerschießt, wird natürlich der Rest nicht "freigegeben".



Gab es nicht vor Kurzem hier schonmal einen Thread, zum chließen vn Dialogen?
> Forensuche


Wenn es sich um eine Delphi-Form handelt, dann Application.ActiveForm.Close; ,
und ansonsten WM_CLOSE? (Obwohl das wohl auch auf CloseWindow rauskommen würde )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: MessageBox/Dlg per Programm schließen

  Alt 10. Mär 2014, 17:58
Nimm CreateMessageDialog. Damit bekommst Du das fertige Fenste rund kannst jetzt selbst entscheiden, was du damit anstellen willst. Im Normalfall nur das:
Delphi-Quellcode:
FDlg:TForm;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Fdlg:=CreateMessageDialog('test',mtInformation,[mbYes,mbNo]);
  try
    Fdlg.showmodal;
  finally
    freeandnil(Fdlg);
  end;
end;
Und über FDlg hast du jetzt Zugriff auf die Form und kannst sie schließen (z.B.: Fdlg.Modalresult:=mrCancel).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
63 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: MessageBox/Dlg per Programm schließen

  Alt 10. Mär 2014, 18:58
Danke himitsu, danke sirius,

nein, nein, ich benötige MessageBox und MessageDlg denn:

MessageBox: ist länderspezifisch (also Yes anstatt ja usw.) und es kann in DLLs und bereits in initialization von Units genutzt werden, wenn alles andere noch gar nicht intitialisiert ist.
MessageDlg: ist eine normale Form, die mit CreateMessageDialog generiert wird. Aber von außen kommt man nicht heran, bzw. ich habe es nicht gefunden.

Das Ganze ist notwendig, wenn eine Meldung dazu führen soll, dass ein Mitarbeiter zwingend manuell z.B. einen Knopf im Schaltschrank drücken muss. Wenn dieser Knopf dann gedrückt ist, sollte die Meldung vom Schirm verschwinden.

Aber ich wiederhole: SendMessage(Application.ActiveFormHandle, WM_CLOSE, 0, 0) funktioniert einwandfrei. Ich möchte aber aus diversen Gründen die Fenster direkt und ohne MessageQueue schließen.

Ich habe hier im Forum keine Hinweise, die mich weiterbringen, gefunden.

Vielen Dank.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Rul

Registriert seit: 13. Mär 2014
10 Beiträge
 
#5

AW: MessageBox/Dlg per Programm schließen

  Alt 13. Mär 2014, 18:50
Aber ich wiederhole: SendMessage(Application.ActiveFormHandle, WM_CLOSE, 0, 0) funktioniert einwandfrei.
Ich möchte aber aus diversen Gründen die Fenster direkt und ohne MessageQueue schließen.
Die Applikation?

SendMessage(Applicatiom.Handle, WM_CLOSE, 0, 0);

oder nur das Meldungsfenster aus der Applikation?

Rul
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.888 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: MessageBox/Dlg per Programm schließen

  Alt 13. Mär 2014, 19:03
Ich möchte aber aus diversen Gründen die Fenster direkt und ohne MessageQueue schließen.
Alles was du in einer Single-Thread-Anwendung machst, ist am Ende das Abarbeiten von Nachrichten aus der MessageQueue.

Je nachdem welcher Dialog intern aufgerufen wird, hast du gar keine andere Wahl als eine Message an das Fenster zu senden. So wird z.B. bei Verwendung der alten Dialoge der Aufruf von MessageDlg in einem ShowModal landen - genauer in einer solchen Schleife:

Delphi-Quellcode:
        repeat
          Application.HandleMessage;
          if Application.Terminated then ModalResult := mrCancel else
            if ModalResult <> 0 then CloseModal;
        until ModalResult <> 0;
Du kannst allenfalls der Form-Instanz einen passenden ModalResult mitgeben. Allerdings wird das nichts, wenn die neuen Vista-und-höher-Dialoge aufgerufen werden - da gibt es keine Form-Instanz. Die MessageQueue ist hier die einzig sinnvolle Möglichkeit.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf