Форум: "Система";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Внизкак в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c