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.