Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.017 c
3-13972
Vikuksa
2002-08-16 15:32
2002.09.05
Запросик


1-14106
den_dnepr
2002-08-23 17:11
2002.09.05
Version Info


3-13891
SET123
2002-08-14 08:28
2002.09.05
Как присвоить с одного столбца ячейку в DBEdit


1-14078
***
2002-08-27 10:33
2002.09.05
InstallShield


1-14091
ErmSergey
2002-08-23 14:15
2002.09.05
Переопределение событий




   Наверх