Главная страница
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.016 c
1-14023
AndreFJ
2002-08-26 14:39
2002.09.05
Как использовать анимированный курсор в программе?


14-14240
Razpizdyi
2002-08-10 14:48
2002.09.05
MSDN - Что это за справка, и где ее искать?


14-14237
Invega
2002-08-10 12:12
2002.09.05
Мне нужен пример ftp клиента


3-13969
NIKI
2002-08-16 13:53
2002.09.05
Error creating cursor handle!


4-14325
Vvedensk
2002-07-03 17:48
2002.09.05
Как узнать цвет пикселя....