![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 18.04.2012
Сообщений: 17
|
![]()
Пишу графическую программку. Не могу сделать передвижение графического объекта при нажатии двух стрелок одновременно. Подскажите, пожалуйста,как это сделать. Внизу код программы.
Код HTML:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; form,burd,plan: TBitmap; x,y: integer; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin form.Canvas.Draw(0, 0, burd); form.Canvas.Draw(x, y, plan); Form1.Canvas.Draw(0, 0, form); end; procedure TForm1.FormCreate(Sender: TObject); begin Form1.Width := 1280; Form1.Height := 800; burd:= TBitmap.Create; burd.LoadFromFile('burd.bmp'); burd.Width:= 1280; burd.Height:= 800; form:= TBitmap.Create; form.LoadFromFile('burd.bmp'); form.Width:= 1280; form.Height:= 800; Canvas.Draw(0, 0, burd); plan:= TBitmap.Create; plan.LoadFromFile('plan.bmp'); plan.Transparent:= True; plan.TransparentColor:= plan.Canvas.Pixels[1,1]; Canvas.Draw(120, 120, plan); end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); const n = 5; begin Timer1.Enabled:= true; if Key = 37 then x:= x - n; if Key = 38 then y:= y - n; if Key = 39 then x:= x + n; if Key = 40 then y:= y + n; if Key = ord(' ') then y:= y - 666; {if ((key=37) and (key=38)) then begin x:= x - n; y:= y - n; end; } end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Timer1.Enabled:= false; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin form.Destroy; burd.Destroy; plan.Destroy; Timer1.Enabled:= false; end; end. |
![]() |
![]() |
![]() |
#2 |
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
![]()
Ох... мда точно не скажу
но попробуй так проверять по VK типо так Код:
Mess with the best, die like the rest.
![]() Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 18.04.2012
Сообщений: 17
|
![]() |
![]() |
![]() |
![]() |
#4 |
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
![]() Код:
да вы шутите! код строки 38 откуда компидятор его знает как то так Код:
Mess with the best, die like the rest.
![]() Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 18.04.2012
Сообщений: 17
|
![]() |
![]() |
![]() |
![]() |
#6 |
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
![]()
вы в OnKeyDown или OnKeyPress обрабатываете?
Mess with the best, die like the rest.
![]() Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 18.04.2012
Сообщений: 17
|
![]() |
![]() |
![]() |
![]() |
#8 |
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
![]()
Так всё осинило!
Shift хранит состояние хлавишь Ctrl Shift Alt Что вам делать Либо через GetAsyncKeyState/GetKeyState либо делать вот так Код:
Ток сработает ли это я не знаю! ![]()
Mess with the best, die like the rest.
![]() Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 |
![]() |
![]() |
![]() |
#9 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]() Код:
вообще же, всё это убого, лучше замутить сингелтон KeyboardManager и через его интерфейс получать состояние клавиш... тогда будет легче менять логику взаимодействия с устройствами ввода все вопросы к хакеру, он же девелопер, а я так, жалкий архитектор =) спать смылся Последний раз редактировалось GreenWizard; 08.05.2012 в 00:34. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]() Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
одновременное нажатие | glebast | Общие вопросы Delphi | 2 | 30.04.2012 13:59 |
[Qt] Одновременное нажатие клавиш | Voltrex | Помощь студентам | 1 | 20.05.2011 22:06 |
Одновременное нажатие N клавишь | tanas | Win Api | 1 | 23.06.2010 13:06 |
одновременное нажатие клавиш | DeDoK | Общие вопросы Delphi | 3 | 08.01.2010 16:59 |
Одновременное нажатие клавиш. | Вадим Буренков | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 11 | 08.04.2009 18:17 |