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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MDI и TabOrder, Как заставить это работать? 
:(
    Опции темы
Serggggg
Дата 19.6.2004, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



_hunter, установил конечно. Form1.KeyPreview установлен в True - не пашет. Form1.KeyPreview установлен в False - не пашет.
RAdmin, а если на форме порядка 15 контролов, как в моём случае? И каждому по TAB'у надо передать управление.
Здесь что-то принципиальное, не могу въехать - что именно. MDI-форма, созданная внутри динамически подгружаемой DLL, рубит на корню все переходы по TAB'у. А та же форма (MDIChild) с теми же параметрами и свойствами, созданная в exe-шнике, работает вполне нормально - TAB отлично работает и без обработчиков нажатия кнопок. Может при Create формы ей надо какие-то ещё параметры указать?

--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
Serggggg
Дата 19.6.2004, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Наткнулся на ещё более интересную деталь - допустим, в главной программе создаётся MDI-окно с 4-мя Edit'ами. Переход по Tab'у возможен только в порядке TabOrder.
Метод SetFocus или SendMessage() не работают. Почему?
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
_hunter
Дата 19.6.2004, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



проверь, ты нажатие Tab ловиш?
поставь OnKeyDown и фильтр


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
RA
Дата 19.6.2004, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



Цитата(Serggggg @ 19.6.2004, 10:39)
Наткнулся на ещё более интересную деталь - допустим, в главной программе создаётся MDI-окно с 4-мя Edit'ами. Переход по Tab'у возможен только в порядке TabOrder.
Метод SetFocus или SendMessage() не работают. Почему?

А ты попробуй эти Методы фызывать не из обработчика OnKeyPress а из контрола типа Бутон (Для теста, просто мне кажется что у тебя обработчик ослеп)


Цитата

RAdmin, а если на форме порядка 15 контролов, как в моём случае? И каждому по TAB'у надо передать управление.


Ну если ты используешь мой пример (и он у тебя работает) и у тебя 15 контролов то
подработай код малость:

Код
   
   if 'tab'=LowerCase(c) then
   begin
      if Edit1.Selected then SendMessage(Edit2.Handle,WM_SETFOCUS,0,0);
      if Edit2.Selected then SendMessage(Edit3.Handle,WM_SETFOCUS,0,0);
     
     и тд.........

  end;

PM   Вверх
Serggggg
Дата 19.6.2004, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



_hunter, так и есть - не хочет обрабатывать нажатие TAB. Нажимаю TAB в нужном окошке - ShowMessage не показывается. Меняю на ENTER, INSERT - все работает.
И в программе, и в DLL. Т.е. программа тупо не замечает нажатия TAB.
Как быть?

P.S. Использовался обработчик OnKeyDown

--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
_hunter
Дата 19.6.2004, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



для начала попробуй отключить TabStop у Edit' ов
если не поможет -- запускай WinSight и смотри куда идут клавиатурные сообщения, особенно TAB


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Serggggg
Дата 19.6.2004, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL ICQ   Вверх
_hunter
Дата 19.6.2004, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а теперь расшифровка: smile.gif
окно 09h 9d забрало себе ( Dispatched ) сообщение о нажтии TAB и соответственно фокус стал на 00000000
так что ищи что за оно забирает сообщения


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Serggggg
Дата 19.6.2004, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Глупый вопрос, но не могу понять, как именно использовать WinSight. Перестали появляться сообщения внизу. Делаю Start/Stop, а результата не вижу. withstupid.gif
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
_hunter
Дата 19.6.2004, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



странно, все перепробывал -- воспроизвести такое не смог

у тебя винда какая?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Serggggg
Дата 19.6.2004, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



2000 Server Service Pack 4
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
_hunter
Дата 19.6.2004, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



попробуй в Messages поставить All Windows
а в Messages->Processes...->All processes
если не поможет -- переставляй винды smile.gif



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Serggggg
Дата 19.6.2004, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



_hunter, я уже не вижу выхода. Отказаться от DLL, наверное, надо. Слишком большие проблемы. Всем спасибо за участие.

--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
_hunter
Дата 19.6.2004, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



выход есть: поставить хук и в нем пересылать сообщеня дальше

а если можно отказаться от DLL -- отказывайся ибо всегда нужно делать проще ( KISS ) smile.gif


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Serggggg
Дата 19.6.2004, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



_hunter, я уже пробовал поставить хук, который прислал RAdmin - прога вообще намертво систему завесила.
Так что пойдём по пути наименьшего сопротивления.

--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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