Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/20: Рейтинг темы: голосов - 20, средняя оценка - 4.65
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30

Вопрос по TForm::OnKeyPress

02.06.2009, 20:51. Показов 4119. Ответов 24
Метки нет (Все метки)

Есть форма. На ней расположен TStringGrid и несколько кнопочек. Хочется отработать нажатие на клавишу (независимо от того, на каком из элементов находится фокус).

Получается так, что в TForm::OnKeyPress не попадаем вообще. Но выглядит так, что всегда попадаем в TStringGrid::OnKeyPress, даже если фокус находится на кнопках. Поясните, почему так и как вообще данную задачу выполнить правильно.

Кстати, нажатие на клавишу F5 в указанном выше случае не отлавливается (т.е. в обработчик не попадем)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2009, 20:51
Ответы с готовыми решениями:

Вопрос по TForm
Есть главная форма приложения Form1. Есть дополнительная форма Form2, которая создаётся сразу же при запуске приложения, но не...

Вопрос про событие OnKeyPress.
В общем, мне нужно, чтобы при нажатии на кнопки "вниз", "вправо", "влево", "вверх" переменная меняла свои значения и выводилась в лэйбл. Но...

TForm
Доброго времени суток! Но у меня весьма глупый вопрос! Делаю свой проект, уже научился пользоваться базой данных, конектить её,...

24
сишник
Автор FAQ
130 / 36 / 1
Регистрация: 25.07.2009
Сообщений: 291
29.09.2009, 16:13
Evg, для каждой формы ChildForm главного окна делай так:
C++
1
2
3
4
5
6
7
#include "MainForm.h"
void __fastcall ChForm::ChFormCreate(TObject *Sender)
{
OnKeyPress = MainForm->OnKeyPress;
}
//MainForm - главная форма,
//ChForm - экземпляр дочерней формы
Пишу на память, давно не работал с MDI.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.09.2009, 16:18  [ТС]
chelovechek, спасибо конечно, но это по большому счёту то же самое, но более элегантно

Просто при такой трактовке получается, что иерархии между разными окнами нет и они вроде бы как иерархически расположены на одном и том же уровне, хотя одно окно может народить других
0
сишник
Автор FAQ
130 / 36 / 1
Регистрация: 25.07.2009
Сообщений: 291
29.09.2009, 16:30
Цитата Сообщение от Evg Посмотреть сообщение
хотя одно окно может народить других
Нет. Дочернее окно - это экземпляр формы, иначе диалоговое окно. Создание окон в дочернем окне - это именно создание окон, контролов и т.д. Обработка диалоговых окон и WINAPI-шных окон различается (CreateWindowEx и CreateDialogParam).

Добавлено через 3 минуты
Рекомендую к прочтению: http://msdn.microsoft.com/en-u... S.60).aspx.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.09.2009, 16:31  [ТС]
Цитата Сообщение от chelovechek Посмотреть сообщение
Нет. Дочернее окно - это экземпляр формы, иначе диалоговое окно. Создание окон в дочернем окне - это именно создание окон, контролов и т.д. Обработка диалоговых окон и WINAPI-шных окон различается (CreateWindowEx и CreateDialogParam).
Под "хотя одно окно может народить других" я имел в виду то, что главное окно может создать кучу внутренних дочерних. И с этой точки зрения они должны находиться на разных уровнях иерархии. Но поскольку мы из дочернего окна лезем в главное (в обработчик), то получается, что они на одном уровне. Я говорю про логические (идеологические) уровни, но не технические

Добавлено через 1 минуту
И при моей концепции "логично" было бы из обработчика главного окна дёргать обработчик активного дочернего окна. Но событие приходит именно к дочернему, а не к главному
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
01.10.2009, 22:01  [ТС]
Цитата Сообщение от chelovechek Посмотреть сообщение
Evg, для каждой формы ChildForm главного окна делай так:
C++
1
2
3
4
5
6
7
#include "MainForm.h"
void __fastcall ChForm::ChFormCreate(TObject *Sender)
{
OnKeyPress = MainForm->OnKeyPress;
}
//MainForm - главная форма,
//ChForm - экземпляр дочерней формы
Пишу на память, давно не работал с MDI.
А ведь OnKeyPress - это виртуальный метод класса, но никак не указатель на функцию. Т.е. его можно только определить, но подсунуть чужой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.10.2009, 22:01

TForm
Доброго времени суток дорогие программисты Не могу разобраться с динамическим созданием форм. Мне нужно по нажатии клавиши создать n...

Наследник TForm
Доброго времени суток всем. Такая проблема: создал модуль, в нем описал класс: #include <Forms.hpp> class TMyForm : public...

Об'єкт TForm
Помогите пожалуйста сделать: Создайте новый проект. Дайте форме заголовок. Сохраните проект в отдельном каталоге. Установите размер...

Рисовалка TForm
Приветствую всех! У меня такая проблема, нужно чтобы по нажатию левой клавиши мышки рисовался граф. примитив. Но так вышло что сначала у...

Переcоздание TForm
Ребят, в общем задача простая: есть форма, на ней n-контролов (боксы, едиты, листы и пр.), которые заполняются. Есть кнопка по нажатию...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru