![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
И ещё раз привет всем.
Помогите PLZZZ - на MDi-форме есть куча окошек (TEdit), у каждого из которых есть свой TAB ORDER. Однако перейти по нажатию TAB с одного окна на другое не получается - просто не работает. Пишу обработчик нажатия клавиши TAB - типа
Тот же результат. Как заставить сработать метод SetFocus? --------------------
C уважением, Serggggg. |
|||
|
||||
| _vova_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 18.6.2004 Где: Харьков Репутация: нет Всего: нет |
А зачем SetFocus?
ActiveControl := Edit2 ; По-моему проще и работает |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Попробовал - не работает.
Не хочет переходить по TAB'у - хоть руками прописывай, хоть по умолчанию оставляй. --------------------
C уважением, Serggggg. |
|||
|
||||
| _vova_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 18.6.2004 Где: Харьков Репутация: нет Всего: нет |
А у этого Edit2 случайно TabStop<>False?
|
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Пробовал и True и False - результат тот же.
Это, наверное, какой-то глюк MDI-окон. --------------------
C уважением, Serggggg. |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
SendMessage(Edit2.Handle, WM_SETFOCUS, 0,0);
|
|||
|
||||
| _vova_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 18.6.2004 Где: Харьков Репутация: нет Всего: нет |
Не должно такого быть.
Наваял простенкий MDI Application, натыкал целую кучу контролов и ... все по Tab'у прыгает и туда и обратно. Попробуй пересоздать форму по новой. У меня, при похожих глюках этот вариант как правило спасал. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
проверил SetFocus() -- рботает без проблем --> ошибка в другом месте
ты KeyPreview установил? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Во вот так должно работать (МиниЛовушка)
|
|||
|
||||
| _vova_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 18.6.2004 Где: Харьков Репутация: нет Всего: нет |
Зачем так сложно
Вопрос в том, чтобы по Tab'у поменять Control (насколько я понял). В принцыпе все варианты рабочие и зачем городить огород? Serggggg, сделай новую форму и все пройдёт. Вспомни старый анекдот: "Может выйдем, зайдем она и поедет?". |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Для кого ты пишешь обработчик нажатия? Для формы или контрола? Если для формы, то как тут уже сказали, ставь KeyPreview в True
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Новую форму создавал. Форма создается (просходит Create(Application)) в своем unit'е. Форма создаётся в DLL - может быть проблемы из-за этого. Тот же результат.
Пробовал KeyPreview менять - тот же результат. Только мышкой щелкать надо. Пробовал и SendMessage(Edit2.Handle, WM_SETFOCUS, 0,0); - результат=0; Проклятие какое-то. --------------------
C уважением, Serggggg. |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Да. Проблема в DLL - я создаю простенькое окошко MDI в библиотеке - TAB не пашет. Точно такое же окно MDI в EXE-модуле - все работает, как часы - TAB работает, как и должен - по умолчанию.
Как быть? --------------------
C уважением, Serggggg. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
еще раз спрашиваю
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Зато 100% |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
_hunter, установил конечно. Form1.KeyPreview установлен в True - не пашет. Form1.KeyPreview установлен в False - не пашет.
RAdmin, а если на форме порядка 15 контролов, как в моём случае? И каждому по TAB'у надо передать управление. Здесь что-то принципиальное, не могу въехать - что именно. MDI-форма, созданная внутри динамически подгружаемой DLL, рубит на корню все переходы по TAB'у. А та же форма (MDIChild) с теми же параметрами и свойствами, созданная в exe-шнике, работает вполне нормально - TAB отлично работает и без обработчиков нажатия кнопок. Может при Create формы ей надо какие-то ещё параметры указать? --------------------
C уважением, Serggggg. |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Наткнулся на ещё более интересную деталь - допустим, в главной программе создаётся MDI-окно с 4-мя Edit'ами. Переход по Tab'у возможен только в порядке TabOrder.
Метод SetFocus или SendMessage() не работают. Почему? --------------------
C уважением, Serggggg. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
проверь, ты нажатие Tab ловиш?
поставь OnKeyDown и фильтр -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| RA |
|
||||||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
А ты попробуй эти Методы фызывать не из обработчика OnKeyPress а из контрола типа Бутон (Для теста, просто мне кажется что у тебя обработчик ослеп)
Ну если ты используешь мой пример (и он у тебя работает) и у тебя 15 контролов то подработай код малость:
|
||||||
|
|||||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
_hunter, так и есть - не хочет обрабатывать нажатие TAB. Нажимаю TAB в нужном окошке - ShowMessage не показывается. Меняю на ENTER, INSERT - все работает.
И в программе, и в DLL. Т.е. программа тупо не замечает нажатия TAB. Как быть? P.S. Использовался обработчик OnKeyDown --------------------
C уважением, Serggggg. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
для начала попробуй отключить TabStop у Edit' ов
если не поможет -- запускай WinSight и смотри куда идут клавиатурные сообщения, особенно TAB -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Отключал - не помогло.
Запускал WinSight - Log прислать не могу - не сохраняется. Скажу так - и у клавиши INSERT (для примера), и у TAB в обработчике есть ShowMessage - при нажатии INSERT WinSight прописывает 11 строчек, при TAB'е - 3. При нажатии TAB: WM_KEYDOWN Dispatched 09h 9d VK_TAB Scan 0Fh Down WM_KEYUP Dispatched 09h 9d VK_TAB Scan 0Fh Up WM_KILLFOCUS Sent Focus to hwnd 00000000 --------------------
C уважением, Serggggg. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
а теперь расшифровка:
окно 09h 9d забрало себе ( Dispatched ) сообщение о нажтии TAB и соответственно фокус стал на 00000000 так что ищи что за оно забирает сообщения -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Глупый вопрос, но не могу понять, как именно использовать WinSight. Перестали появляться сообщения внизу. Делаю Start/Stop, а результата не вижу.
--------------------
C уважением, Serggggg. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
странно, все перепробывал -- воспроизвести такое не смог
у тебя винда какая? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
2000 Server Service Pack 4
--------------------
C уважением, Serggggg. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
попробуй в Messages поставить All Windows
а в Messages->Processes...->All processes если не поможет -- переставляй винды -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
_hunter, я уже не вижу выхода. Отказаться от DLL, наверное, надо. Слишком большие проблемы. Всем спасибо за участие.
--------------------
C уважением, Serggggg. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
выход есть: поставить хук и в нем пересылать сообщеня дальше
а если можно отказаться от DLL -- отказывайся ибо всегда нужно делать проще ( KISS ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
_hunter, я уже пробовал поставить хук, который прислал RAdmin - прога вообще намертво систему завесила.
Так что пойдём по пути наименьшего сопротивления. --------------------
C уважением, Serggggg. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Вот универсальный код "пробега" по реквизитам:
-------------------- |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |