Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Расширенный MessageBox   Найти похожие ветки 

 
Wood   (2005-10-07 05:44) [0]

Не сочтите за труд, подскажите, как создать диалог, типа Application.MessageBox c флагом (как: "не показывать больше это сообщение"). И еще, как добавить свою иконку в подобный диалог? Спасибо.


 
easy ©   (2005-10-07 09:08) [1]

procedure TForm1.Button1Click(Sender: TObject);
var
 AMsgDialog: TForm;
 ACheckBox: TCheckBox;
begin
 AMsgDialog := CreateMessageDialog ("This is a test message.", mtConfirmation, [mbYes, mbNo]);
 ACheckBox := TCheckBox.Create(AMsgDialog);
 with AMsgDialog do
   try Caption := "Dialog Title" ;
     Height := 150;
     with ACheckBox do
       begin Parent := AMsgDialog;
       Caption := "Dont show me again.";
       Top := 100;
       Left := 8;
       Width:=AMsgDialog.Width;
     end;
     if (ShowModal = ID_YES) then
       begin
         if ACheckBox.Checked then
           showmessage("checked")
         else
           showmessage("NOT checked");
       end;
   finally ACheckBox.Free;
     Free;
   end;
end;


 
y-soft ©   (2005-10-07 09:35) [2]

>easy ©   (07.10.05 09:08) [1]

Конференция-то вроде называется WinAPI :)

>Wood   (07.10.05 05:44)  

Пользовательскую иконку в стандартный MessageBox добавить легко - посмотрите функцию MessageBoxIndirect

Добавить CheckBox сложнее, если поставлена задача использовать WinAPI, то придется создавать собсбвенное диалоговое окно и самостоятельно обрабатывать сообщения от его элементов управления...

Если такой задачи не стоит, то используйте вариант easy ©, только не удивляйтесь, что размер скомпилированного файла может сильно увеличится...


 
begin...end ©   (2005-10-07 09:49) [3]

> easy ©   (07.10.05 09:08) [1]

> ACheckBox.Free

Зачем?


 
Wood   (2005-10-07 10:26) [4]

Ух...спасибо за быстрый отзыв и помощь. Просто я сдуру подумал, что функция InputBox() виндовая, а она диалоговая...
Еще не пробуя, думаю, если применить то что подсказал easy, то надписи на кнопках диалогового окна будут не на русском (при русской винде), в отличии от применения Application.MessageBox("","",MB_YESNO). Можно ли это как-то предусмотреть?


 
y-soft ©   (2005-10-07 10:44) [5]

>Wood   (07.10.05 10:26) [4]

Если будете использовать вариант Easy ©, то может проще будет скопировать код функции CreateMessageDialog из модуля Dialogs, да и переделать под свои нужды? Все равно там класс TMessageForm определен в секции Implementation, без хака к внутренним полям и методам не подлезть...


 
y-soft ©   (2005-10-07 10:49) [6]

>Wood   (07.10.05 10:26) [4]

Насчет автоматической локализации...

Если делать на чистом WinAPI, то либо (при создании из ресурса RT_DIALOG), придется определить строковые ресурсы для разных языков, либо - грузить дефолтовые строки Windows...


 
GrayFace ©   (2005-10-07 11:13) [7]

> Все равно там класс TMessageForm определен в секции Implementation,
>  без хака к внутренним полям и методам не подлезть...

А это возможно?
Я умею получать доступ к protected методам и полям, писать Read-Only property, но тут ничего, кролме указания явного смещения, в голову не лезет.

> либо - грузить дефолтовые строки Windows...

А можно ли это сделать, не вызывая MessageBox и не читая надписи на его кнопках?


 
y-soft ©   (2005-10-07 11:16) [8]

>GrayFace ©   (07.10.05 11:13) [7]

А это возможно?

Раз есть возможность обойтись малой кровью, то и надо ей обходиться

А можно ли это сделать, не вызывая MessageBox и не читая надписи на его кнопках?

Как вариант - можно покопаться в исследовательских целях в ресурсах системных файлов и найти подходящие строки, а потом - грузить через LoadString...


 
Wood   (2005-10-07 11:28) [9]

>y-soft ©   (07.10.05 10:44) [5]
Это, конечно, мысль. Так и свой компонент для подобных целей можно написать. Спасибо за помощь.


 
y-soft ©   (2005-10-07 11:53) [10]

>Wood   (07.10.05 11:28) [9]

Так и свой компонент для подобных целей можно написать

Конечно, так и надо делать - свой компонент, класс или функцию...

Я правда сам предпочитаю писать диалоги общего назначения на WinAPI+RT_DIALOG и размещать в отдельных Dll, а для доступа из Delphi - простенькие компоненты-оболочки...


 
Игорь Шевченко ©   (2005-10-07 12:21) [11]


> Как вариант - можно покопаться в исследовательских целях
> в ресурсах системных файлов и найти подходящие строки, а
> потом - грузить через LoadString...


Для messageBox они в Win32k.sys живут, скучно оттуда вынимать :)


 
y-soft ©   (2005-10-07 12:32) [12]

>Игорь Шевченко ©   (07.10.05 12:21) [11]

Не только скучно, но и потенциально чревато, учитывая, что Microsoft не приветствует использование своих ресурсов кем-либо другим :)


 
y-soft ©   (2005-10-07 12:53) [13]

Кстати, вот как люди решают сабжевую задачу (кастомизация MessageBox) на CPP:

http://www.codeproject.com/dialog/xmessagebox.asp
http://www.codeproject.com/dialog/CPPMessageBox.asp


 
y-soft ©   (2005-10-07 12:58) [14]

А вот еще проще с помощью хука:

http://www.catch22.net/tuts/msgbox.asp


 
Wood   (2005-10-07 16:40) [15]

да... это интересно...


 
GrayFace ©   (2005-10-07 17:54) [16]

y-soft ©   (07.10.05 11:16) [8]
Раз есть возможность обойтись малой кровью, то и надо ей обходиться

И все-таки?



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.04 c
2-1132841801
Igor_thief
2005-11-24 17:16
2005.12.11
Почему не работает практически идентичный код?


2-1132909381
Рафик
2005-11-25 12:03
2005.12.11
SQL


1-1131744155
злобная танька
2005-11-12 00:22
2005.12.11
текст под углом


14-1132336814
Separator
2005-11-18 21:00
2005.12.11
Антивирусники


4-1128481280
Rentgen
2005-10-05 07:01
2005.12.11
Изменить настройки БИОСа компьютера через RS232





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский