![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
3D игра - переход от управления с клавы на мышь [D7, XP]
thing © (2009-07-20 22:38:00)Приветствую Вас, уважаемые.
Прошу вашей помощи в решение задачи!
Есть игрушка, которая стартует в полноэкранном режиме (разрешение 640х480) управление производится с помощью клавиатуры, программа написана на том же дельфи, используется TDXDraw. Прога реагирует на альтаб, но не переходит в оконный режим, а просто сворачивается.
Мне необходимо реализовать управление мышкой, т.е. всё управление переложить на мыша.
Пришла такая мысль, что каким-то образом вытащить игрушку из полноэкранного режима в оконный (если это возможно) задать размеры, положение, стиль главному окну игрушки и надстроить к ней кнопки (по клику на эти нарисованныеотправлять PostMessage'м коды кнопок). Прога с кнопкамиэто уже отдельное приложение, которое по задумке будет не перехватывая фокус "висеть" позади игрушки.
иллюстрация http://imageshost.ru/links/237cb80e20480c8950247f9764a44ddd
Нашел, способ задать рабочее пространство экрана (т.к. из хелпа по DXDraw понял, что переход в полноэкранный "doFullScreen" режим осуществляется путём вычисление рабочей области экрана - прим.перевод) - SystemParametersInfo(SPI_SETWORKAREA, 0, @Rect, SPIF_SENDCHANGE). Как я понял из эксперимента SPI_SETWORKAREA хорош для стандартных прог, а игрушке фиолетово, какая рабочая область задана.
Может есть у кого идеи как решить эту задачку?
Заранее благодарю за ответ!
thing (2009-08-01 02:30:00) [1]
> @!!ex
Спасибо огромное за помощь!
Нашел даже ещё один способ - длл-инъекция с созданием дочернего окна, а уже на этом окне всё, что угодно можно разместить.
@!!ex (2009-07-21 10:17:00) [2]> [11] thing © (21.07.09 02:04)
Получить достум к управлению DX.
thing (2009-07-21 02:04:00) [3]
> @!!ex ©
а что значить "контекст поймать" ?
@!!ex (2009-07-21 01:42:00) [4]> [6] thing © (20.07.09 23:58)
Ну нужно дополнительное окно. Я в первос своем сообщении написал: перехватывай DX контекст и рисуй прямо поверх игры.
Это лучшй вариант.
Я так делал в Tactics'e: http://sol-online.org/index.php?content=info&project=tactics
У меня правда всего ничего: текст, да стрелка.
Тебе придеться рисовать больше, но количество значения не имеет. Главное контекст поймать.
thing (2009-07-21 00:05:00) [5]
> так игрушка не твоя, что ли?
Забыл сказать. Прошу прощения.
Нет, игрушка не моя :(( - если бы была моя, то проблем бы не было :)))
thing (2009-07-21 00:04:00) [6]
> А типа в оконном режиме оно появиться? :))
в том плане, что поместить окно игрушки в нужное место на экране (привёл пример на картинке). - в оконном режиме размер окна игрушки был бы 640х480, а разрешение выставить 800х600, следовательно, остальное пространство можно было бы отдать под кнопки :) - вот такая была идея
KilkennyCat (2009-07-21 00:01:00) [7]так игрушка не твоя, что ли?
thing (2009-07-20 23:58:00) [8]2@!!ex
Отличная идея (если делать полупрозрачные кнопки)! Спасибо!
Но вот теперь проблема с тем, чтобы вывести окно своей проги поверх игрушки.
Попробовал поставить на таймер
showwindow(Application.handle, SW_SHOWNOACTIVATE);
SetForegroundWindow(Application.handle);
- окно появляется на секунду, но потом снова исчезает.
@!!ex (2009-07-20 23:41:00) [9]> [4] thing © (20.07.09 23:21)
А типа в оконном режиме оно появиться? :))
Сделай псевдо окошко, котороу пользователь сам разместит там, где ему удобно будет. Как в Urban Assault сделано
thing (2009-07-20 23:21:00) [10]Спасибо за то, что откликнулись!
2@!!ex
Если я правильно понял, то Вы предлагаете рисовать прямо на игрушке. Я об этом думал, но там места нет :(
@!!ex (2009-07-20 23:14:00) [11]Я бы перехватывал контекст и рисовал прямо в фуллскрине.
thing (2009-07-20 23:00:00) [12]2KilkennyCat
Цель перевода в оконный режим - нарисовать кнопки по которым можно кликать :), т.к. в игрушке нет этих нарисованныхкнопок. То есть полностью отказаться от управления с клавы. Вот почему и пришла мысль о приложении на фоне.
KilkennyCat (2009-07-20 22:52:00) [13]Что-то я не совсем понял цели перевода в оконный режим... только для того, чтобы получить мышиное управление? Но оно и в полноэкранном работает и очень даже хорошо работает...
А какие-то фоновые приложения, что-то перехватывающие, в данном случае, извиняюсь, бред полнейший.