Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 667

/ вопрос решён /

Приветствую, уважаемые эксперты!
Стоит вопрос по передаче кода нажатой клавиши из основной формы в дочернюю.
Суть в следующем:
В основной форме есть TEdit.
При нажатии на клавиатуру в обработчике EditKeyPress(Sender: TObject; var Key: Char) код клавиши нужно послать в создаваемое дочернее окно Form2.
Окно Form2 модальное.
В Form2 имеется компонент DBGridEh, который уже сам обрабатывает полученное значение (поиск по букве в таблице).
Проблема: как передать нажатие клавиши из основной формы в создаваемое дочернее модальное окно.
Ниже приведен код, в котором никак не могу передать нажатие клавиши. Посоветуйте, как можно решить данный вопрос?

Приложение:
  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2. var f2:TForm2;
  3. begin
  4. if Key in [#13, #32..#255] then
  5. begin
  6. if Key=#13 then Key:=#0;
  7. f2:=TForm2.Create(self);
  8. try
  9. SendMessage(f2.Handle, WM_KEYDOWN, Ord(Key),0);
  10.  
  11.  
  12. f2.ShowModal ;
  13. finally
  14. f2.Free ;
  15. end;
  16. end;
  17. end;
  18.  


Ed Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ed (статус: 1-ый класс)
Вопрос отправлен: 1 июля 2017, 17:22
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 10 июля 2017, 01:54; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 1 июля 2017, 17:41 [#1]:

Нахрена SendMessage, если ты окно создаёшь? Передавай код клавиши прямо через параметр конструктора (или метода ShowModal) или через свойство Tag формы, или ещё 100500 способами.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ed

Ed (статус: 1-ый класс), 1 июля 2017, 18:00 [#2]:

Можно, конечно, передать тысячами другими способами, а потом уже внутри формы передать на внутреннюю обработку в DBGridEh. Но меня уже заинтересовала сама возможность передать данные в создаваемую модальную форму.
Скорее всего, нужно передать с задержкой, чтобы успело сработать f2.ShowModal.
min@y™

min@y™ (статус: Доктор наук), 1 июля 2017, 18:12 [#3]:

WM_KEYDOWN дойдёт до контрола, когда он получит фокус. Не раньше.

Мой тебе совет: перестань заниматься всякой хуйнёй, усложняющей жизнь. В данном случае это надо - как зайцу стопсигнал.

Если так уж хочется извратиться, юзай метод Perform своего грида. Но не советую. Это как лечить зубы через жопу.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ed

Ed (статус: 1-ый класс), 1 июля 2017, 21:39 [#4]:

Сделал самый простой вариант - передал через f2.Tag.
Но возникла новая проблема.
DBGridEh.KeyPress(var Key: Char) описан в разделе protected, к нему не могу обратиться.
При передаче через FormKeyPress(Sender: TObject; var Key: Char) значение Key в DBGridEh не идет.

Как пример, попробовал передать через нажатие на кнопку, не срабатывает:
procedure Tf2.Button1Click(Sender: TObject);
var c:char ;
begin
c:=char(parent.tag);
DBGridEh1.SetFocus;
FormKeyPress(self,c);
end;

Если непосредственно с клавиатуры ввожу - все нормально обрабатывается в DBGridEh1 (поиск по введенным буквам).
Кроме DBGridEh1 и кнопки на форме ничего нет.

Вопрос: как довести значение Form.tag до DBGridEh1?
min@y™

min@y™ (статус: Доктор наук), 1 июля 2017, 21:55 [#5]:

Я ж тебе сказал - Perform юзай. Этот метод эмулирует приём оконного сообщения от системы.

Только я один хрен не понимаю, зачем тебе это всё понадобилось на практике...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ed

Ed (статус: 1-ый класс), 10 июля 2017, 01:54 [#6]:

Вопрос решен, Perform самодостаточен.

10 июля 2017, 01:55: Статус вопроса изменён на решённый (изменил автор вопроса — Ed)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 ноября 2017, 08:32
Выполнено за 0.03 сек.
Рейтинг@Mail.ru