Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизРасширенный 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 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.041 c