Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.05;
Скачать: CL | DM;

Вниз

как в windows прочитать буфер клавиатуры?   Найти похожие ветки 

 
sector   (2002-06-26 20:20) [0]

у меня в программе на Delphi длинный цикл и из него
необходимо выйти по нажатию на клавишу (любую), на
стандартные процедуры обработки событий прога не реагирует,
надо как то прочитать состояние буфера либо какой нибудь
функцией WinApi либо на asm.


 
rhf ©   (2002-06-26 20:46) [1]

application.ProcessMessages в цикл и обработчики onKeyPress, onKeyDown .... и если будешь делать для формы, то не забудь поставить keyPreview в TRUE.


 
sector   (2002-06-26 21:04) [2]

не совсем понял...
там ситуация примерно следущая:


for i:=0 to N do
begin
{что вставить?}
end;


proc. onKeyPress...
begin
end;

proc. onKeyPress... не проверяется походу



 
rhf ©   (2002-06-26 21:31) [3]

не забудь поставить у формы keyPreview в TRUE... тогда все нажатия клавишь в программе будут поступать в обработчик формы


var stoped:boolean; //глобальная переменная
....

stoped:=FALSE;
for i:=0 to N do
begin
application.ProcessMessages; // обработка сообщений
if stoped then break;
....
end;



//в обработчике onKeyPress
....
if key=#27 then stoped:=TRUE;
....







 
rhf ©   (2002-06-26 21:49) [4]

Ну а если коснуться твоей темы....
то состояние клавиши можно узнать через

getKeyState(vCode) // vCode - вирт код клавиши


 
sector   (2002-06-26 21:58) [5]

я кстате я пробывал использовать getKeyState(vCode)
не помогло...:(


 
rhf ©   (2002-06-26 22:06) [6]

просто надо использовать вместе с application.ProcessMessages


 
sector   (2002-06-26 22:18) [7]

Кстате первый предложенный способ сработал .
Большое спасибо!


 
rhf ©   (2002-06-26 22:36) [8]

getKeyState тоже пойдет ... просто не забывай ставить applic....

удачи...


 
Proton ©   (2002-06-27 08:35) [9]

Может имеет смысл организовать твой цикл вот так ?
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
hInstallThead : thandle;
public
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

function InstallThead(Parameter: Pointer): Integer; stdcall;
var i:integer;
begin
for i:=1 to 50 do
begin
form1.Label1.Caption := IntToStr(i);
Sleep(100);
end;
result := 0;
form1.hInstallThead := 0;
end;


procedure TForm1.Button1Click(Sender: TObject);
var thid:dword;
begin
hInstallThead := CreateThread(nil,0,@InstallThead,nil,CREATE_SUSPENDED,thid);
SetThreadPriority(hInstallThead,THREAD_PRIORITY_ABOVE_NORMAL);
ResumeThread(hInstallThead);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if hInstallThead <> 0 then
begin
SuspendThread(hInstallThead);
if TerminateThread(hInstallThead,0) then
ShowMessage(": ) Uups i did it again");
end;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2002.09.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
3-13887
Пушкин
2002-08-14 11:03
2002.09.05
Я ненавижу StoredProc!


14-14238
BAHO
2002-08-08 02:07
2002.09.05
Прокси сервер в Delphi6 на Indy


3-13961
Guest2
2002-08-16 11:58
2002.09.05
Помогите с SQL


3-13885
Aon
2002-08-13 09:06
2002.09.05
Не могу отобразить корректно данные из MySQL


6-14196
Белый Орел
2002-06-26 15:07
2002.09.05
Постояное соединение с сервером