(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Увеличение возможностей функции MessageDlg (документация)

Источник: articles
Michael Bruus. Перевод Руденко Е.В.

Необходимость в двух неочевидных (не по умолчанию) возможностях функции messagedlg
заставили меня исследовать исходный код модуля dialogs.
Во-первых, мне нужна была форма диалога, которая закрывалась бы при нажатии клавиши и
возвращала при этом код нажатой клавиши .
Что-то наподобие команды turbopascal if keypressed then thekey:=readkey.
Во-вторых, мне нужно было контролировать,
какая кнопка диалога активна по умолчанию.
Если , например, у вас появилась форма messagedlg с вопросом : " Вы действительно хотите удалить файл?"
и по умолчанию фокус находится на кнопке yes (что верно в стандартном окне messagedlg) ,
то для нетерпеливого пользователя могут возникнуть проблемы.
В модуле dialogs имеется функция, называемая createmessagedialog ,
которая используется в messagedlg для собственно формирования диалога.
Используя функцию createmessagedialog прямо вы получаете наилучшую форму messagedlg и плюс больший контроль за поведением данной формы.
Ниже показано решение этих моих двух проблем.
Создайте новое приложение. Разместите две кнопки ( buttons) и Метку ( label) на форме.
Назовите событие onclick кнопки button1
tform1.button1click и событие onclick кнопки button2 tform1.button2click.
Щелкните кнопкой button1 , чтобы появилась диалоговая форма,
которая закроется , когда пользователь нажмет одну из видимых диалоговых кнопок или нажмет
esc или щелкнет на иконке закрытия формы диалога. Нажатая кнопка будет показана в метке label1.
Щелкните кнопкой button2 , будет показана стандартная диалоговая форма,
но с одним отличием : по умолчанию выбрана кнопка no, а не кнопка yes.
Для выбора кнопки no я использую код : if tbutton(controls[n]).name='no'.
Вместо 'no' можно использовать 'yestoall', 'abort' или любые другие заголовки кнопки ,
используемой по умолчанию.
unit unit1;
interface
uses
windows, messages, sysutils, classes, graphics, controls,
forms, dialogs,
stdctrls;
type
tform1 = class(tform)
button1: tbutton;
label1: tlabel;
button2: tbutton;
procedure button1click(sender: tobject);
procedure helpboxkeypress(sender: tobject; var key:
char);
procedure button2click(sender: tobject);
private
{ private declarations }
public
{ public declarations }
end;
var
form1: tform1;
implementation
{$r *.dfm}
var
legalkeys: string;
procedure tform1.button1click(sender: tobject);
var
s:string;
begin
legalkeys:='abc123';
s:='what do you want to do now?'#13#13'a. go home'#13'b.
eat lunch'#13+
'c. sleep'#13'1. program in delphi'#13'2. order a
pizza'#13'3. nothing';
with createmessagedialog(s, mtco
begin
try
onkeypress:=helpboxkeypress;
if showmodal=mrok
then label1.caption:='you pressed: '+legalkeys[tag]
else label1.caption:='you pressed: '+'cancel';
finally
free;
end; //try..finally
end; //with
end;
procedure tform1.helpboxkeypress(sender: tobject; var key:
char);
begin
if pos(upcase(key),legalkeys)> 0 then
begin
tform(sender).tag:=pos(upcase(key),legalkeys);
tform(sender).modalresult:=mrok;
end
else if key=#27 then tform(sender).modalresult:=mrcancel;
end;
procedure tform1.button2click(sender: tobject);
var
n:integer;
begin
with createmessagedialog('do you really want to delete
the file?',mtwarning,[mbyes,mbno]) do
begin
for n:=0 to controlcount-1 do
if (controls[n] is tbutton)
then if tbutton(controls[n]).name='no' then tbutton
(controls[n]).taborder:=0;
showmodal;
end;
end;
end.



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 29.01.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Panda Internet Security - ESD версия - на 1 устройство - (лицензия на 1 год)
SAP Crystal Reports 2008 INTL WIN NUL License
Allround Automation PL/SQL Developer - 5 user license
Toad Data Modeler Per Seat License/Maint
erwin Data Modeler Workgroup Edition r9.7 - Product plus 1 Year Enterprise Maintenance Commercial
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Программирование на Microsoft Access
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
СУБД Oracle "с нуля"
Новые материалы
Программирование на Visual Basic/Visual Studio и ASP/ASP.NET
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100