* Soweit ich weiß macht das ShowMessage intern das Fenster selber und verwendet keine Windows-Dialoge. Ergo simuliert die
VCL auch.
Nein, bzw. nicht immer.
Entweder es wird selber aus einer TForm der Dialog zusammengebaut oder es wird die
WinAPI genutzt.
ShowMessage landet irgendwann hier
Delphi-Quellcode:
function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; const HelpFileName: string): Integer;
begin
if TOSVersion.Check(6) and UseLatestCommonDialogs and IsNewCommonCtrl and StyleServices.IsSystemStyle then
Result := DoTaskMessageDlgPosHelp('', Msg, DlgType, Buttons, HelpCtx, X, Y, HelpFileName)
else
Result := DoMessageDlgPosHelp(CreateMessageDialog(Msg, DlgType, Buttons), HelpCtx, X, Y, HelpFileName);
end;
Oben geht es zu den Task-Dialogs der
WinAPI (ab Vista mit aktiven XP-Styles)
und CreateMessageDialog baut eine eigene TMessageForm der
VCL auf.
Du kannst auch selber
WinApi.Windows.
MessageBox oder
Application.MessageBox aufrufen.
Bei Letzterem wird zusätzlich noch die Fensterposition bestimmt, die Aktivität der anderen
VCL-Forms gestuert und UseRightToLeftReading als MB_RTLREADING an die
API übergeben.
Aber simuliert wird nichts.
MessageBox erstellt ein Windows-Fenster und legt ein Image, ein Label und paar Buttons auf dieses Fenster.
Genau das Gleiche macht auch
CreateMessageDialog, nur dass da noch die
VCL-Wrapper um jede einzelne Windows-Komponente drumrum sind, aber nativ sind diese Komponenten dennoch.