Jeder Delphi Programmierer kennt den Befehl: MesssageDlg
Er erzeugt in Delphi die typische Messagebox von Windows:
Hmm, gab es die denn nicht schonmal mit einem hübschen Logo? Also ich habe:
MessageDlg('This is a Messagebox with Text', mtInformation, [mbOK], 0);
eingegeben, aber das Icon fehlt. Nur der Fehler und die Warnung hat noch ein Icon, bei den Infoboxen hat Microsoft/Embarcadero dieses Icon ausgeblendet. Was mich noch an diesem Befehl störte, ist dass ich keinen Titel für den Dialog angeben wie beim TTaskDialog angeben kann. Also der "wichtige" Titel fehlt, das nette Icon fehlt, dafür gibt man jedesmal ein paar selten benötigte/nicht funktionierende Parameter an. Ich fände folgendes hübscher:
MessageDlgEx('This is a Messagebox with Text', 'Test Title');
Das umzusetzen ist nicht sonderlich schwer, enthält aber ein paar Stolperfallen. Zuerst einmal wieder das Icon zurück. Dies lässt sich mit:
MsgDlgIcons[TMsgDlgType.mtInformation]:=TMsgDlgIcon.mdiInformation;
bewerkstelligen, die Definition steht nämlich auf "mdiNone" zum ausblenden. Ich wusste das der Titel irgendwie über Application.Title definiert werden kann, bei mir steht aber nur "Informationen". Ich habe mal in die Sourcen geschaut, und gesehen, dass man einen eigenen Titel nur über mtCustom definieren kann. Dieses ganze Wissen einmal in eine Funktion gepackt sieht so aus:
function MessageDlgEx(const Msg, Caption: string; DlgType: TMsgDlgType = mtInformation; Buttons: TMsgDlgButtons = [mbOK]; HelpCtx: LongInt = 0): word;
var
oldTitle: string;
begin
MsgDlgIcons[TMsgDlgType.mtInformation]:=TMsgDlgIcon.mdiInformation; //MS/Emba has deleted it in newer Dialogs
MsgDlgIcons[TMsgDlgType.mtCustom]:=MsgDlgIcons[DlgType]; //we use custom for Title
oldTitle:= Application.Title;
Application.Title:= Caption;
MessageDlg(Msg, TMsgDlgType.mtCustom, Buttons, HelpCtx);
Application.Title:= oldTitle;
end;
Die Box sieht nun so aus:
Nun, ganz schön viel Aufwand, aber wozu das ganze, es gibt doch den modernen "TTaskDialog" mit seinen vielen Möglichkeiten:
https://specials.rejbrand.se/TTaskDialog/
https://stackoverflow.com/questions/4979556/how-to-use-the-ttaskdialog
Nun ja, die moderne Box stellt ein paar Anforderungen:
- Windows 7+ (Win32MajorVersion >= 6)
- Themes müssen aktiviert sein (ThemeServices.ThemesEnabled)
- Es muss eine VCL-Anwendung sein (die alte Variante läuft auch im Kommandozeilentool)
cheers,
VoSs2o0o