Ich wollte sie aber nicht einfach weghaben, sondern auch wissen, was sie bedeutet.
Etwas ausführlicher:
MessageDlg ist in
Vcl.Dialogs als
inline deklariert. In diesem Fall erzeugt der Compiler keinen Funktionsaufruf, sondern fügt den Code der Funktion direkt ein. Damit das gelingt, muss dieser Code natürlich auch an dieser Stelle compilierbar sein.
Nun sind einige der Typdeklarationen in
Vcl.Dialogs einfach nur Aliase zu Typen aus
System.UITypes:
Delphi-Quellcode:
type
TMsgDlgType = System.UITypes.TMsgDlgType;
{$NODEFINE TMsgDlgType}
TMsgDlgBtn = System.UITypes.TMsgDlgBtn;
{$NODEFINE TMsgDlgBtn}
TMsgDlgButtons = System.UITypes.TMsgDlgButtons;
{$NODEFINE TMsgDlgButtons}
Aus nicht näher ersichtlichen Gründen braucht der Compiler im Falle einer Inline-Auflösung Zugriff auf die originalen Deklarationen. Deswegen muss in deiner
Unit die
System.UITypes aufgeführt sein.
Machst du das nicht, wird das
inline nicht aufgelöst und ein regulärer Call erzeugt.