2017-10-13 66 views
5

W Delphi 10.1.2 Berlin, w funkcji Vcl.Dialogs.MessageDlg, DlgType stałe mtInformation i mtConfirmation tworzą tę samą ikonę okna dialogowego. Na przykład:Niepoprawna ikona MessageDlg ze stałą 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

Ale nie powinno stała mtConfirmation wyświetlania A znak zapytania ikona DlgType (jak inne DlgType stałych mtWarning i mtError tworzyć każdy inna ikona)?

Jak uzyskać znak zapytania ze znakiem zapytania ze stałą DlgTypemtConfirmation?

+0

miałem dokładnie dzisiaj ten problem .. dzięki za zaproszenie, a dzięki Toma na odpowiedź –

Odpowiedz

10

Mówi się w help:

Mając mtConfirmation wykazują Pytajnik

Okna dialogowe typu TMsgDlgType.mtConfirmation przedstawiają informacje ikonę.

W przeszłości, kiedyś pokazać znak zapytania zamiast, ale Microsoft usunięto symbol znak zapytania z funkcji API Windows, który VCL używa do wyświetlania okien dialogowych TMsgDlgType.mtConfirmation. Cytując Microsoft: "Ikona wiadomości ze znakiem zapytania nie jest już zalecana, ponieważ jest niepoprawnie reprezentatywna dla określonego rodzaju wiadomości o numerze , a ponieważ frazowanie wiadomości jako pytania może mieć wartość dla dowolnego typu wiadomości. może pomylić znak zapytania o symbolu z informacjami Pomocy. " Aby użyć poprzedniego wyglądu okna dialogowego , należy ustawić zmienną UseLatestCommonDialogs jednostki Vcl.Dialogs na False.

Więc ten kod:

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; 

produkuje ten wynik!

enter image description here

+0

Naprawdę nie mogę podążać za logiką Microsoftu. Znaczenie symbolu jest zawsze definiowane przez jego kontekst. Co oznacza: Kiedy kontrola, na której mogę działać (np. Przycisk) ma symbol znaku zapytania, mogę go użyć, aby uzyskać informacje. Ale znak zapytania w oknie dialogowym nie może zostać wykorzystany i dlatego nadaje dialogowi znaczenie informacji o BEING. – user1580348