Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
389 / 188 / 47
Регистрация: 11.07.2013
Сообщений: 1,120
1

Как узнать, было ли сообщение "MessageDlg"?

23.08.2017, 11:14. Показов 437. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть задачи такая:
Delphi
1
2
3
4
5
6
7
8
9
10
11
// Имитация нажатия кнопки с клавиатуры.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of 
    107, 187: begin // Кдавища "+" - опустить головку..
      if not BCButton9.Down then begin
        BCButton9MouseDown(Sender, mbLeft, [], 0, 0); // Здесь может появиться сообщение "MessageDlg".
        BCButton9.Down:=true;
      end;
    end;
    ........
Delphi
1
2
3
4
5
6
7
8
// Имитация отпускания кнопки.
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if((Key=107) or (Key=187))and BCButton9.Down then begin 
    BCButton9MouseUp(Sender, mbLeft, Shift, 0,0);
    BCButton9.Down:=false;
  end;
  ......
В случае, если в процедуре BCButton9MouseDown появляется сообщение MessageDlg событие FormKeyUp не наступает, а кнопка BCButton9 остаётся в нажатом состоянии.
Устанавливать после каждого сообщения что-то типа
Delphi
1
2
3
4
5
6
7
MessageDlg(...)...
BCButton1.Down then BCButton1.Down:=false;
BCButton2.Down then BCButton2.Down:=false;
.......
BCButton9.Down then BCButton9.Down:=false;
.......
BCButton40.Down then BCButton9.Down:=false;
не целесообразно, т.к. в программе много кнопок и различных сообщений, которые могут появляться в зависимости от ситуации после нажатия каждой кнопки.
Есть ли возможность каким-то образом "отлавливать" события появления сообщения "MessageDlg" (вернее закрытие этого окна), чтобы затем сбросить нажатую кнопку?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2017, 11:14
Ответы с готовыми решениями:

Как сделать MessageDlg всегда сверху или чтобы окно сообщения было модальным?
Как сделать MessageDlg всегда сверху или чтобы окно сообщения было модальным? Использую RAD Studio...

Как узнать какое поле было изменено
Сори, есть ли способ узнать в ADO в BeforPost или AfterPost Какое поле было изменено. Заранее...

Как узнать что было заменено на компьютере?
Стоит windows7. Как проверить что было заменено на компьютере (процессор, память и тд), так как...

Как узнать из какого файла было запущено приложение?
Как узнать из какого файла было запущено приложение, то есть например нажимаю пкм на файле выбираю...

Как узнать на какую кнопку мыши было нажато?
Podskazite mozno li uznat na kakuju knopku mishki bil sdelan click na pravuju ili na levuju? ...

1
112 / 74 / 28
Регистрация: 26.07.2015
Сообщений: 123
23.08.2017, 17:12 2
Цитата Сообщение от shyub Посмотреть сообщение
Есть ли возможность каким-то образом "отлавливать" события появления сообщения "MessageDlg" (вернее закрытие этого окна)
Есть-то оно есть, только как бы это потом в других местах боком не вышло. Ну да ладно:

Pascal
1
2
3
4
5
6
7
8
9
10
type
  { TForm1 }
  TForm1 = class(TForm)
 
    { ... тут компоненты и события ... }
 
  public
    { А вот тут - самое интересное: }
    procedure EditingDone; override;
  end;
реализация:
Pascal
1
2
3
4
5
procedure TForm1.EditingDone;
begin
  inherited EditingDone;
  // тут можно реагировать на закрытие MessageDlg-а, этот метод сработает ровно в момент его закрытия
end;
Но еще раз повторяю: надо очень внимательно протестировать, не будет ли это срабатывать при показе других форм.
2
23.08.2017, 17:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2017, 17:12
Помогаю со студенческими работами здесь

Как узнать внутри чего было выброшено исключение?
Как узнать внутри чего (свойства/конструктора/метода) было выброшено исключение?

Как узнать сколько было блокировок при вызове метода
привет есть многопоточное приложение использую synclock можно как то узнать как часто потоки...

Как узнать что было добавлена новая запись в бд и вывести её
У меня чат на sse, всё выводится, кроме введённого мною сообщения, почему может быть так? <?...

IP адрес, как сделать, что бы не возможно было узнать настоящий IP
Скажите, пожалуйста, если пользоваться прокси сервером, то можно ли каким то образом определить...

Как узнать имя компонента в котором было вызвано PopupMenu?
Подскажите как узнать имя компонента в котором было вызвано PopupMenu Добавлено через 9 минут...

Как узнать, что было выбрано в динамически созданном ComboBox
Здравствуйте уважаемые форумчани, подскажите пожалуйста в одном вопросе. Я динамически создаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru