Zitat:
WM_INITDIALOG
Es kommt drauf an, Dialoge können im Delphi über die
VCL (TForm) oder die Dialog-
WinAPI ablaufen (TaskDialog usw.).
CreateMessageDialog ist natürlich direkt nur
VCL.
Beim normalen ShowMessage und Co. kommt es grauf an, ob das Windows aktuell genug ist und ob die neue CommonControls-API (ab v6) vorhanden+aktiv ist.
Nicht dass jemand auf die saublöde Idee kam und denkt der alte Win9x/2K-Look sei zu cool.
Und Delphi-
DialogeFenster (CreateWindow) mit ShowModal sind nunmal keine "Dialoge" (mit WM_INITDIALOG usw.).
Zitat:
Stattdessen wird
(in D2007) in der
Unit Dialogs eine
Function CreateMessageDialog aufgerufen, in der das Formular "komplett zufuß" aufgebaut wird .
Normal sollte das nicht passieren, in Delphis der letzten dutzend Jahre ... außer du baust irgendwo bissl Mist,
denn
vor CreateMessageDialog kommt irgendwo eine entsprechende Prüfung, ob der "Fallback" für eine veraltete
API nötig ist.
Aktuell in Delphi 11 (davor jeweils ein bissl anders)
Delphi-Quellcode:
if TOSVersion.Check(6) and UseLatestCommonDialogs and
IsNewCommonCtrl and not ((shDialogs in TStyleManager.SystemHooks) and not StyleServices(Screen.ActiveCustomForm).IsSystemStyle) then
@QuickAndDirty: schau mal in Form.ShowModal rein.
Ich bin mir fast sicher, dass dort irgendwo ein Event bezüglich "Modal" ausgelöst wird und in System oder SysUtils gäbe es etwas, wo du dich dafür registrieren kannst.
Und eventuell noch ein schmutziges
UseLatestCommonDialogs:=False;
.
[add]
Nee, in Forms war es (
TApplicationEvents)
Delphi-Quellcode:
procedure TApplication.ModalStarted;
begin
Inc(FModalLevel);
if (FModalLevel = 1) and Assigned(FOnModalBegin) then
FOnModalBegin(Self);
end;
Achtung: TService hat ein anderes TApplication, aber das TApplication der
VCL läuft dennoch "heimlich" im Hintergrund.
[/add]
Zitat:
Ich will verhindern, dass in einem Dienst Modale Fenster aufgehen, die auf Eingaben warten.
In einem Dienst darf es überhaupt keine Dialoge/Fenster geben, egal ob modal oder nicht,
seit die Alle standardmäßig nicht mehr "interactive" sind.