![]() |
MessageBox/Dlg per Programm schließen
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. |
AW: MessageBox/Dlg per Programm schließen
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
Delphi-Quellcode:
,
Application.ActiveForm.Close;
und ansonsten WM_CLOSE? (Obwohl das wohl auch auf CloseWindow rauskommen würde :gruebel:) |
AW: MessageBox/Dlg per Programm schließen
Nimm CreateMessageDialog. Damit bekommst Du das fertige Fenste rund kannst jetzt selbst entscheiden, was du damit anstellen willst. Im Normalfall nur das:
Delphi-Quellcode:
Und über FDlg hast du jetzt Zugriff auf die Form und kannst sie schließen (z.B.: Fdlg.Modalresult:=mrCancel).
FDlg:TForm;
procedure TForm1.Button1Click(Sender: TObject); begin Fdlg:=CreateMessageDialog('test',mtInformation,[mbYes,mbNo]); try Fdlg.showmodal; finally freeandnil(Fdlg); end; end; |
AW: MessageBox/Dlg per Programm schließen
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. |
AW: MessageBox/Dlg per Programm schließen
Zitat:
SendMessage(Applicatiom.Handle, WM_CLOSE, 0, 0); oder nur das Meldungsfenster aus der Applikation? Rul |
AW: MessageBox/Dlg per Programm schließen
Zitat:
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:
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.
repeat
Application.HandleMessage; if Application.Terminated then ModalResult := mrCancel else if ModalResult <> 0 then CloseModal; until ModalResult <> 0; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz