2017-10-13 12 views
5

Dans Delphi 10.1.2 Berlin, dans une fonction Vcl.Dialogs.MessageDlg, les constantes DlgTypemtInformation et mtConfirmation créent la même icône de boîte de dialogue. Par exemple:Icône MessageDlg incorrecte avec constante DlgType mtConfirmation?

if Vcl.Dialogs.MessageDlg('Do you really want to remove the selected item?', mtConfirmation, mbOKCancel, 0) = mrOk then 
begin 
    RemoveTheSelectedItem; 
end; 

enter image description here

if Vcl.Dialogs.MessageDlg('Do you really want to remove the selected item?', mtInformation, mbOKCancel, 0) = mrOk then 
begin 
    RemoveTheSelectedItem; 
end; 

enter image description here

Mais ne doit pas la constante mtConfirmation affichage DlgType une icône marque question, (comme les autres DlgType constantes mtWarning et mtError créer chaque une icône différente)?

Comment puis-je obtenir un point d'interrogation icône avec la constante DlgTypemtConfirmation?

+0

J'ai eu exactement cette question aujourd'hui .. merci de demander, et grâce à Tom pour la réponse –

Répondre

10

Il est dit dans le help:

Avoir mtConfirmation Afficher une question Mark

boîtes de dialogue de type TMsgDlgType.mtConfirmation montrent une icône d'information .

Dans le passé, ils ont utilisé pour montrer un point d'interrogation à la place, mais Microsoft enlevé le symbole de point d'interrogation de la fonction API Windows VCL utilise pour afficher les boîtes de dialogue TMsgDlgType.mtConfirmation. Citation de Microsoft: «L'icône de message de point d'interrogation n'est plus recommandée car elle ne représente pas clairement un type spécifique de message et parce que la formulation d'un message en tant que question peut s'appliquer à n'importe quel type de message. peut confondre le symbole symbole point d'interrogation avec des informations d'aide. " Pour utiliser l'apparence précédente de la boîte de dialogue , vous devez définir la variable UseLatestCommonDialogs de l'unité Vcl.Dialogs sur False.

donc ce code:

Vcl.Dialogs.UseLatestCommonDialogs := False; 
    if Vcl.Dialogs.MessageDlg('Do you really want to remove the selected item?', mtConfirmation, mbOKCancel, 0) = mrOk then 
    begin 
    RemoveTheSelectedItem; 
    end; 

produit ce résultat:

enter image description here

+0

Je ne peux vraiment pas suivre la logique de Microsoft. La signification d'un symbole est toujours définie par son contexte. Ce qui signifie: Lorsqu'un contrôle sur lequel je peux agir (par exemple un bouton) a un symbole de point d'interrogation, je peux l'utiliser pour obtenir des informations. Mais le point d'interrogation dans le dialogue ne peut pas être agi et ainsi il donne à la boîte de dialogue la signification de ÊTRE information. – user1580348