Главная страница
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
4-14331
SDv-503
2002-07-01 00:48
2002.09.05
Как программно нажать на клавишу в другом приложении ?


1-14074
Starkom
2002-08-26 14:02
2002.09.05
Как сделать снимок(скриншот) формы во время исполнения?


4-14350
tamerlan311
2002-07-07 00:10
2002.09.05
иконка от определенного типа файла


3-13925
sdram
2002-08-15 14:32
2002.09.05
Почему нельзя изменить размер массива


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