Вниз
Скачать: 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.01 c
8-14187
UniQ
2002-04-27 14:40
2002.09.05
Спорный вопрос...


3-13878
Slaviq
2002-08-16 15:52
2002.09.05
Query


3-13938
Сошел с ума
2002-08-15 12:46
2002.09.05
Помогите запрос составить:


3-13941
atmospheric
2002-08-15 22:43
2002.09.05
Переташить прогу на другой комп ?


3-13867
michael_b
2002-08-12 22:59
2002.09.05
подскажите где взять исходняк хорошого примера работы с InterBase




   Наверх