Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реакция на нажатие mbOk CreateMessageDialog 
:(
    Опции темы
Arex
Дата 24.3.2010, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 2.6.2007

Репутация: нет
Всего: нет



Добрый день.
Требуется помощь.
В сети существует много примеров с использованием CreateMessageDialog.
Однако, везде используется Showmodal.
Т.е. программа ожидает реакции пользователя.
Задача состоит в том, чтобы вывести сообщение и продолжить работу ( используя Show а не Showmodal ),
а при нажатии пользователем кнопки Ok в окне сообщения ( возможно нажатие произойдет через продолжительное время ), произвести действие.
Собственно, вопрос как отследить нажатие mbOk на форме ?

Типичный пример, ожидания реакции пользователя:

Код

var
  MyMsgDialog: TForm;
...............
MyMsgDialog := CreateMessageDialog('   сообщение   ', mtInformation, [mbOk]);
...............
Case MyMsgDialog.ShowModal of 
       ID_YES: ;  
       ID_NO:  ; 
     end; 





Это сообщение отредактировал(а) Rrader - 24.3.2010, 06:27
PM MAIL   Вверх
former
Дата 24.3.2010, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 4
Всего: 17



Эта строка
Код

MyMsgDialog := CreateMessageDialog('   сообщение   ', mtInformation, [mbOk]);

противоречит этой (ОК и YES NO)
Код

Case MyMsgDialog.ShowModal of 
       ID_YES: ;  
       ID_NO:  ; 
     end; 

Окно диалога возвращает "модальный" результат. Выход - создай свой диалог и управляй им как хочешь.

Это сообщение отредактировал(а) former - 24.3.2010, 08:55


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Grag
Дата 24.3.2010, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.12.2007
Где: Красноярск

Репутация: нет
Всего: нет



Сделай как посоветовал Former, сделай свою форму диалога, выведи ее на экран, только не забудь разместить ее поверх всех окон, а то может затеряться.... А нужные действия выполняй в обработчике кнопки "Ok" этой формы...
PM MAIL ICQ Skype   Вверх
Arex
Дата 24.3.2010, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 2.6.2007

Репутация: нет
Всего: нет



Цитата(former @ 24.3.2010,  08:54)
противоречит этой (ОК и YES NO)

Противоречит ? В чем именно ?
Вот пример, многократно тиражированный в сети.
Взят отсюда: http://www.delphisources.ru/pages/faq/base...age_dialog.html

Код


procedure TForm1.Button1Click(Sender: TObject);
var
  AMsgDialog: TForm;
  ACheckBox: TCheckBox;
begin
  AMsgDialog := CreateMessageDialog('This is a test message.', mtWarning, [mbYes, mbNo]);
  ACheckBox := TCheckBox.Create(AMsgDialog);

  with AMsgDialog do
    try
      Caption := 'Dialog Title' ;
      Height := 169;

      with ACheckBox do
      begin
        Parent := AMsgDialog;
        Caption := 'Don''t show me again.';
        top := 121;
        Left := 8;
        Width := 140;
      end;

      case ShowModal of
        ID_YES: ;//здесь Ваш код после того как диалог будет закрыт
        ID_NO: ;
      end;

      if ACheckBox.Checked then
      begin
        //...
      end;

    finally
      ACheckBox.Free;
      Free;
    end;
end;

Так вот, если использовать Show ( без оператора case ) вместо Showmodal, то ответ от пользователя мы не ждем, а идем дальше как и требуется.
Вопрос в том как отследить последующее нажатие на кнопку Ok на форме ? Форма есть, кнопка есть, а отследить невозможно ?


PM MAIL   Вверх
former
Дата 24.3.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 4
Всего: 17



Цитата(Arex @  24.3.2010,  11:01 Найти цитируемый пост)
Противоречит ? В чем именно ?

Диалог создаешь с кнопкой OK, а проверяешь YES и NO.
В статье (по ссылке) следующий код
Код

AMsgDialog := CreateMessageDialog('This is a test message.', mtWarning, [mbYes, mbNo]);

Цитата(Arex @  24.3.2010,  11:01 Найти цитируемый пост)
Вопрос в том как отследить последующее нажатие на кнопку Ok на форме ? Форма есть, кнопка есть, а отследить невозможно ?

А ты необходимые действия (например вызов процедуры или функции) выполняй из формы диалога при нажатии на кнопку. Сами процедуры и функции могут располагаться в других модулях (при необходимости).

Это сообщение отредактировал(а) former - 24.3.2010, 12:59


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Arex
Дата 24.3.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 2.6.2007

Репутация: нет
Всего: нет



Цитата(former @ 24.3.2010,  12:57)
Диалог создаешь с кнопкой OK, а проверяешь YES и NO.


Согласен на 100% - недоглядел.
Но по большому счету, это отношения к делу не имеет.

Я вот о чем говорю , в случае если мы указывает в коде
Код

AMsgDialog.Showmodal;

///действия 


до действий мы не доходим пока пользователь не отмерзнет и не нажмет что нибудь
а в случае
Код

AMsgDialog.Show;

///действия 

мы переходим к действиям, как и нужно, НО если пользователь отмерзнет только через полчаса и нажмет таки кнопку Ok ( или Yes , это не важно ) на форме,
то как выполнить какие-либо действия.
Вот в чем вопрос.
Если возможно, приведите код как именно отследить нажатие на кнопку на появившейся после Show форме, а как ее назвать -  Ok или Yes это дело десятое.

Спасибо.
PM MAIL   Вверх
former
Дата 24.3.2010, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 4
Всего: 17



Держи пример (D 2009)

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  OwnDlg.7z 7,39 Kb


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.