Eli handleri joka ottaa näppäinpainallukset taulukkoon ja vapauttaa ne, kun nappi löysätään. Näppäintapahtumat pitää itse aiheuttaa vaikkapa lomakkeen KeyUp ja KeyDown -tapahtumissa. Erityisen hyödyllinen kaksinpelejä tehtäessä.
Syötä TKeyStore.Create:ssa parametriksi kuinka monta näppäintä käsittelijä maksimissaan ottaa
unit KeyStore;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
Type
TKeyStore = Class
MemoryCount : Byte;
StoreIndex : Array of Record
Key : Word;
end;
Constructor Create(PMemoryCount: Byte);
function KeyInMemory(PKey: Word): Boolean;
procedure Clear();
procedure EraseKey(PKey: Word);
procedure OnKeyUp(PKey: Word);
procedure OnKeyDown(PKey: Word);
end;
implementation
(*-----------------------------------------------------------------*)
Constructor TKeyStore.Create(PMemoryCount: Byte);
begin
MemoryCount := PMemoryCount;
SetLength(StoreIndex,MemoryCount + 1);
end;
procedure TKeyStore.OnKeyDown(PKey: Word);
var
i :Integer;
begin
if KeyInMemory(PKey) then Exit;
for i := 1 to MemoryCount do
if StoreIndex[i].Key = 0 then
begin
StoreIndex[i].Key := PKey;
Exit;
end;
end;
procedure TKeyStore.OnKeyUp(PKey: Word);
var
i :Integer;
begin
for i := 1 to MemoryCount do
if StoreIndex[i].Key = PKey then
StoreIndex[i].Key := 0;
end;
procedure TKeyStore.Clear();
var
i : Integer;
begin
for i := 1 to MemoryCount do
begin
StoreIndex[i].Key := 0;
end;
end;
function TKeyStore.KeyInMemory(PKey: Word): Boolean;
var
i : Integer;
begin
Result := False;
for i := 1 to MemoryCount do
if StoreIndex[i].Key = PKey then
begin
Result := True;
Exit;
end;
end;
procedure TKeyStore.EraseKey(PKey: Word);
var
i : Integer;
begin
for i := 1 to MemoryCount do
if StoreIndex[i].Key = PKey then
StoreIndex[i].Key := 0;
end;
End.Esimerkki
var
KeyHandler: TKeyStore;
procedure TForm1.FormCreate(Sender: TObject);
begin
KeyHandler := TKeyStore.Create(4); {4 = näppäinten maksimimäärä}
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
KeyHandler.OnKeyDown(Key);
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
KeyHandler.OnKeyUp(Key);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i :Integer;
begin
for i := 1 to KeyHandler.MemoryCount do
case KeyHandler.StoreIndex[i].Key of
Key_Arrow_Left : KäännäUkkoaVasemmalle;
Key_Arrow_Right : KäännäUkkoaOikealle;
Key_Arrow_Up : LiikutaUkkoaEteenpäin;
Key_Arrow_Down : LiikutaUkkoaTaaksepäin;
end;
end;Perhana... Minun piti kirjoittaa se tänne :)
enpä tee mitään. mikä se delphi ees on muuta kuin ohjelmointikieli...
nimi
Aihe on jo aika vanha, joten et voi enää vastata siihen.