AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Dialogs.CreateMessageDialog abfangen

Ein Thema von QuickAndDirty · begonnen am 19. Aug 2022 · letzter Beitrag vom 19. Aug 2022
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.571 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie Dialogs.CreateMessageDialog abfangen

  Alt 19. Aug 2022, 16:16
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 (Delphi-Referenz durchsuchenTApplicationEvents)
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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Aug 2022 um 16:37 Uhr)
  Mit Zitat antworten Zitat
 


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 15:27 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