Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Pascal: Yksinkertainen näppäimistökäsittelijä

Janezki [30.05.2005 11:14:46]

#

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;

Wukkopi [01.06.2005 08:48:27]

#

Perhana... Minun piti kirjoittaa se tänne :)

temu92 [04.06.2005 00:14:47]

#

enpä tee mitään. mikä se delphi ees on muuta kuin ohjelmointikieli...

NanoSoft [31.03.2006 14:37:27]

#

nimi

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta