Avatar billede kinginkvong Nybegynder
06. november 2004 - 20:55 Der er 3 kommentarer og
1 løsning

to forskellige handlinger ved forskellig tastatur key's trykkes

Hej

Jeg har, ikke overraskende, et problem jeg ønsker hjælp til at løse :-o

Jeg har en timer der med et eller andet interval og jeg har to Integer værdier som vi blot kan kalde ”I1” og ”I2”, når jeg trykker på en knap skal I1 adderes med x (et givent tal) og dette sker hver gang timeren løber igennem  så længe jeg holder en knap nede på tastaturet.

Til dette definerede jeg en variabel til som jeg sagde skulde være lig med sig selv plus x, herefter sagde jeg at I1 skulde adderes med denne.

Men problemet er at jeg også vil havde I2 til at live adderet med et andet tal vi kan kalde det y, når jeg trykker  på en anden knap på tastaturet stopper programmet med at addere I1 med x.

Håber det er forståeligt ;-)

Konklusion:
Skal havde handling til at ske nå jeg holder en knap nede på tastaturet og en ny handling til at ske når jeg holder en ny knap nede på tastaturet uden den anden handling stopper.

På forhånd tak
Avatar billede kalp Novice
06. november 2004 - 21:10 #1
kan du ikke skrive i din kode..den til I2 en if sætning hvor du skriver en situation hvor hvis den knap man holder nede for I1 holdes nede og I2's knap også holdes nede så skal begge adderes med x... og en "else" hvor man kan nøjes med at holde I2's knap nede og så adderes den med x..

vil lige sige jeg ikke kan komme med et eksempel... programmere Java: )
Og kun en ide.. ved slet ikke om man kan det.
Avatar billede doc404 Novice
07. november 2004 - 00:01 #2
Lav en ny app. Sæt KeyPreview til True på formen. Drop yderligere en Timer og to labels.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    EventAStartet : boolean;
    EventBStartet : boolean;
    ACounter,BCounter : integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);
begin
  if Key = Ord('A') then
    EventAStartet := True
  else if Key = Ord('B') then
    EventBStartet := True
  else if Key = Ord('S') then
    begin
      EventAStartet := False;
      EventBStartet := False;
    end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if EventAStartet then
    begin
      Inc(ACounter);
      Label1.Caption := IntToStr(ACounter);
    end;
  if EventBStartet then
    begin
      Inc(BCounter);
      Label2.Caption := IntToStr(BCounter);
    end;
end;

end.

Når du trykker på a starter CounterA med at tælle. Trykker du derefter på B starter counter B uden at CounterA stopper. Du stopper de hele med tryk på S.

Er det noget sådan du søger?
Avatar billede hreiff Nybegynder
08. november 2004 - 08:13 #3
Her er noget (løst baseret på ovenstående).
Keypreview på formen er sat til true.


var
  i,j: integer;
  TrykA, TrykB : Boolean;

const
  i1 = 1;
  i2 = 2;



procedure TForm1.FormCreate(Sender: TObject);
begin
  i := 0;
  j := 0;
  label1.caption := '0';
  label2.caption := '0';
  TrykA := False;
  TrykB := False;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  If key = ord('A') then TrykA := True;
  If key = ord('B') then TrykB := True;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  If key = ord('A') then TrykA := False;
  If key = ord('B') then TrykB := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  If TrykA then
  begin
    i := i + i1;
    label1.caption := inttostr(i);
  end;
  If TrykB then
  begin
    j := j+i2;
    label2.caption := inttostr(j);
  end;
end;

end.
Avatar billede kinginkvong Nybegynder
08. november 2004 - 15:18 #4
Det var perfekt tak for hjælpen (jeg troede faktisk ikke det kunne lade sig gøre, da Keyop vil blive annulleret når man trykkede på en anden knap do'h).

men igen tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester