(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.



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

Магазин программного обеспечения   WWW.ITSHOP.RU
TeeChart for .NET with source code single license
SmartBear QAComplete Concurrent User Subscription License - On Premise (1 Year Subscription)
TeeBI for RAD Studio Suite with source code single license
Quest Software. TOAD for SQL Server Xpert Edition
Купить Антивирус Dr.Web Server Security Suite для сервера
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Программирование на Microsoft Access
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
СУБД Oracle "с нуля"
Компьютерные книги. Рецензии и отзывы
Один день системного администратора
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100