Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Что-то я не совсем понял цели перевода в оконный режим... только для того, чтобы получить мышиное управление? Но оно и в полноэкранном работает и очень даже хорошо работает...
А какие-то фоновые приложения, что-то перехватывающие, в данном случае, извиняюсь, бред полнейший.


Наверх

Титульная страница Поиск, карта сайта Написать письмо