Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2007, 15:35   #1
Wolfic
 
Регистрация: 10.10.2007
Сообщений: 3
Вопрос Перемещение кнопки клавишами

Вот листинг моей проги: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin button1.SetFocus; if key = VK_Left then button1.left:=Button1.left-10 ; end; end. Кнопка Button1 при нажатии клавиши не двигается. В чём моя ошибка?
Wolfic вне форума Ответить с цитированием
Старый 14.10.2007, 17:02   #2
kommunist
C# developer
Форумчанин
 
Аватар для kommunist
 
Регистрация: 03.10.2007
Сообщений: 393
Лампочка

вот правильный листинг, если хочешь чтобы двигалась много раз - зацикли здесь 32 код клавиши-пробел если хочешь поставь другой


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure onleftkeydown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.onleftkeydown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
form1.Button1.SetFocus;
if key =32 then
form1.Button1.Left:=left+10;

end;
end.
I like WPF
kommunist вне форума Ответить с цитированием
Старый 14.10.2007, 18:33   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Wolfic Посмотреть сообщение
Вот листинг моей проги: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin button1.SetFocus; if key = VK_Left then button1.left:=Button1.left-10 ; end; end. Кнопка Button1 при нажатии клавиши не двигается. В чём моя ошибка?
Для начала потрудитесь, пожалуйста, оформлять код (расширенный режим, значок #) в читабельном виде:
Код:
unit Unit1;  
interface  uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls;  
type   TForm1 = class(TForm)
Button1: TButton;     
procedure Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
     { Private declarations }   
public
     { Public declarations }
end;  
var   Form1: TForm1;  
implementation  
{$R *.dfm}    

procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;   Shift: TShiftState); 
begin 
button1.SetFocus; 
if key = VK_Left then 
button1.left:=Button1.left-10 ; 
end;  
end.
Теперь по сути.
Обрабатывать нужно событие TForm1.OnKeyDown:
Код:
begin 
if key = VK_Left then 
button1.left:=Button1.left-10 ; 
end;
Не забудьте в свойствах Form1 поставить свойство KeyPreview в True.
mihali4 вне форума Ответить с цитированием
Старый 15.10.2007, 10:11   #4
Wolfic
 
Регистрация: 10.10.2007
Сообщений: 3
По умолчанию

Цитата:
Сообщение от kommunist Посмотреть сообщение
вот правильный листинг, если хочешь чтобы двигалась много раз - зацикли здесь 32 код клавиши-пробел если хочешь поставь другой


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure onleftkeydown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.onleftkeydown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
form1.Button1.SetFocus;
if key =32 then
form1.Button1.Left:=left+10;

end;
end.
Собственно, теперь мой вопрос заключаецо в том, как же зациклить 32 в коде программы=))).И ещё не могли бы вы сказать откуда можно скачать коды клавиш).Заранее благодарен.
Wolfic вне форума Ответить с цитированием
Старый 15.10.2007, 10:17   #5
Wolfic
 
Регистрация: 10.10.2007
Сообщений: 3
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Не забудьте в свойствах Form1 поставить свойство KeyPreview в True.
Спасибо что сказали, а то бы у меня ничего не работало.
Wolfic вне форума Ответить с цитированием
Старый 15.10.2007, 22:31   #6
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Цитата:
И ещё не могли бы вы сказать откуда можно скачать коды клавиш).Заранее благодарен.
Это уж совсем не дело.... Пишешь "VK_" (без кавычек), жмёшь Ctrl+Space и тебе выдаётся куча кодов. Например, "стрелка влево": VK_LEFT=37
Maslan вне форума Ответить с цитированием
Старый 15.10.2007, 22:39   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Maslan Посмотреть сообщение
Это уж совсем не дело.... Пишешь "VK_" (без кавычек), жмёшь Ctrl+Space и тебе выдаётся куча кодов. Например, "стрелка влево": VK_LEFT=37
И где мы сию мудрость вписываем? На бумажке? Али в тексте модуля? Али в окошке хэлпа?
Уточните, будьте так любезны.
mihali4 вне форума Ответить с цитированием
Старый 16.10.2007, 04:46   #8
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
Счастье

Да, тёзка, вы правы. Должен был уточнить, но привычка принимать опыт за "естественный и единственно возможный" вариант победила.

Исправляюсь:
В редакторе кода Delphi, в теле функции, вводим переменную (i:integer), после чего пишем код "i:=VK_" и уже ТУТ нажимаем Ctrl+space

Сама функция может быть любой, например такой:
(красным помечено то, чего мы не писали)
Код:
 
procedure TForm1.Button1Click(Sender: TObject);
Var i:integer;
begin
 i:=VK_Left
end;
Это на случай, если переменной нужно просто взять и присвоить код клавиши "стрелка влево". Если нужен весь список (просто посмотреть или сделать себе удобную табличку), то:
Вариант 1: Ctrl+Click на слове "VK_LEFT" откроет модуль windows.pas и пролистает его в редакторе кода до строки, в которой "VK_LEFT" и определён.
Вариант 2: Открыть файл windows.pas любым текстовым редактором и найти позицию самостоятельно.


После (для обоих вариантов) ,рассмотрев объявления констант , можно делать с ними то, что душе угодно.
Например, код клавиши "Esc": VK_ESCAPE = 27;,
а "стрелки вниз": VK_DOWN = 40;
Можно скопировать этот участок текста (который с "VK_"), и сохранить в файл... И т.д.
Maslan вне форума Ответить с цитированием
Старый 16.10.2007, 10:24   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

И все же. Видимо, зависит от версии?
Как вам понравится такой ответ дельфей у меня:
"Code Insight(tm) features are disabled while debugging"
mihali4 вне форума Ответить с цитированием
Старый 16.10.2007, 12:32   #10
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

От версии зависит вот так: "на любой, начиная по крайней мере с пятой".

Ваш ответ
Цитата:
Code Insight(tm) features are disabled while debugging
Означает всего лишь, что Ctrl+Space было нажато во время отладки программы, а я ничего не говорил о необходимости установки точки останова и запуска программы на отладку. Закрой отладку и попробуй ещё раз
Maslan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перемещение формы Черничный Общие вопросы Delphi 11 10.12.2009 11:06
Перемещение кнопки? &RiU Общие вопросы Delphi 1 28.05.2008 18:13
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35
Перемещение файлов Nasya Microsoft Office Excel 2 13.10.2007 20:37