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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог keypressed в Delphi, Кто знает? 
:(
    Опции темы
new_
Дата 8.3.2005, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.3.2005

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



Помогите кто нибудь!! smile smile
В TP7 цикл
REPEAT
....
....
Until keypressed;

выполняется до нажатия любой кнопки на клавиатуре.
Есть ли что-нибудь аналогичное в Delphi? Очень надо!!
Заранее СПАСИБО!!
PM MAIL   Вверх
Poseidon
Дата 8.3.2005, 04:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Не знаю что такое TP7, но в Delphi можно так (мне кажется не самый лучший вариант, но работающий):

Значит так.
1. Обьявляешь глобальную переменную типа boolean; Что то вроде этого:
Код
unit Unit1;

interface

uses
 ...


var
 Form1: TForm1;

 keypress: boolean;// это наша переменная

implementation

{$R *.dfm}

...  // тут твои процедуры, в одной из каторых цикл

end.


2. В нужной процедуре пишим вот что
Код
begin
keypress:= False;
Repeat
...// операторы цикла
until not keypress;
end;


3. И наконец в событии OnKeyPress
Код
begin
keypress:= true;
end;



Только есть определенные проблемы (я же говорю, не самый лучший вариант).
Во первых нужно еще знать в OnKeyPress чего это засунуть (формы, кнопки или еще чего), а во-вторых, лучше засунуть цикл в отдельный поток, а то вся прога "повиснет" и никакое нажатие ее не спасет.

PS. Код дан для примера, чтобы была понятна суть того, как это сделать. Использовать же такой способ (именно в случае, когда надо остановить цикл) я не рекомендую.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
p0s0l
Дата 8.3.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Можно использовать функцию GetKeyboardState. Она возвращает массив из 256 байт, каждому элементу соответствует определенная кнопка:
Цитата(MSDN)
When the function returns, each member of the array pointed to by the lpKeyState parameter contains status data for a virtual key. If the high-order bit is 1, the key is down; otherwise, it is up.

Тогда KeyPressed будет выглядеть примерно так:
Код
function KeyPressed : boolean;
var
 ks : TKeyboardState;
 i : integer;

begin
 Result := False;
 GetKeyboardState (ks);
 for i := Low(ks) to High(ks) do
// это чтобы клики мыши не мешались:
   if not (i in [VK_LBUTTON, VK_RBUTTON, VK_MBUTTON,]) then
     if (ks[i] and $80) <> 0 then
     begin
       Result := True;
       Break;
     end;
end;

По смыслу, возможно, нужно не все кнопки проверять, к примеру, если не надо учитывать Control, Alt, Shift, CapsLock, NumLock, ScrollLock, то будет так:
Код
function KeyPressed : boolean;
var
 ks : TKeyboardState;
 i : integer;

begin
 Result := False;
 GetKeyboardState (ks);
 for i := Low(ks) to High(ks) do
// это чтобы клики мыши не мешались:
   if not (i in [VK_LBUTTON, VK_RBUTTON, VK_MBUTTON,
                 VK_CONTROL, VK_LCONTROL, VK_RCONTROL,
                 VK_SHIFT, VK_LSHIFT, VK_RSHIFT,
                 VK_MENU, VK_LMENU, VK_RMENU,
                 VK_NUMLOCK, VK_SCROLL, VK_CAPITAL]) then
     if (ks[i] and $80) <> 0 then
     begin
       Result := True;
       Break;
     end;
end;




--------------------
С уважением, г-н Посол.
PM   Вверх
new_
Дата 9.3.2005, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.3.2005

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



Большущее спасибо Poseidon и p0s0l за предоставленные примеры, обязательно проверю, а в OnKeyPress не заходит ни разу.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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