AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastenabfrage

Ein Thema von Spurius · begonnen am 31. Jan 2004 · letzter Beitrag vom 18. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#1

Tastenabfrage

  Alt 31. Jan 2004, 10:32
Hallo,
ich hab bei einem Prog eine Abfrage, ob die Leertaste gedrückt wurde.
Wird sie gedrückt, wird eine procedure ausgeführt. Wenn man aber 2 mal drückt, wird die Procedure 2 mal ausgeführt, aber erst wenn die eine fertig ist, folgt die andere.
Wie kann ich das verhindern?
Solange die eine läuft, soll die Leertaste nicht beachtet werden.
Gruß
Spurius
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Tastenabfrage

  Alt 31. Jan 2004, 10:35
Hi Spurius,

ich würde eine 'globale' Variable definieren die festhält ob deine Procedure noch läuft
und falls nicht diese wieder aufrufen.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Tastenabfrage

  Alt 31. Jan 2004, 10:40
Kleiner Anhang, hab ich vergessen

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    Laufe : Boolean;
    procedure MachWas;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MachWas;
var
  I : Integer;
begin
  Laufe := True;
  I := 0;
  while I < 32555 do
  begin
    Application.ProcessMessages;
    Inc(I);
  end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = 32) and not Laufe then MachWas;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Laufe := False;
end;

end.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Tastenabfrage

  Alt 31. Jan 2004, 10:42
Oh, Oh

Da war doch glatt ein Fehler drin

Delphi-Quellcode:

procedure TForm1.MachWas;
var
  I : Integer;
begin
  Laufe := True;
  I := 0;
  while I < 32555 do
  begin
    Application.ProcessMessages;
    Inc(I);
  end;
  Laufe := False; //<- Vergessen
end;
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#5

Re: Tastenabfrage

  Alt 31. Jan 2004, 10:59
Klappt leider nicht:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXSprite, DXDraws, StdCtrls, DXInput, DXClass;

type
  TForm1 = class(TForm)
    DXDraw1: TDXDraw;
    DXImageList1: TDXImageList;
    DXSpriteEngine1: TDXSpriteEngine;
    DXInput1: TDXInput;
    DXTimer1: TDXTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
 type
  tcar = class(timagesprite)
   private
   public
    procedure DoMove(MoveCount: Integer); override;
    procedure shootmg;
 end;
 type
  tmg = class(timagesprite)
   public

  end;
var
  Form1: TForm1;
  car: tcar;
  mg: tmg;
  fire: integer;
implementation

{$R *.dfm}

procedure tcar.shootmg;
var i:integer;
begin
 fire := 1;
mg := tmg.Create(form1.dxspriteengine1.Engine);
 mg.Image := form1.dximagelist1.Items.Find('mg');
 mg.Width := mg.Image.Width;
 mg.Height := mg.Image.Height;
 mg.X := car.X;
 mg.Y := car.Y;
 for i := 1 to 100 do begin

   mg.X := mg.X + 3;
   form1.dxinput1.Update;
   form1.dxspriteengine1.Move(0);
   form1.dxspriteengine1.Dead;
   form1.dxdraw1.Surface.Fill(0);
   form1.dxspriteengine1.Draw;
   form1.dxdraw1.Flip;
 end;
   mg.Destroy;
   form1.dxspriteengine1.Move(0);
   form1.dxspriteengine1.Dead;
   form1.dxdraw1.Surface.Fill(0);
   form1.dxspriteengine1.Draw;
   form1.dxdraw1.Flip;
   fire := 0;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 car := tcar.Create(dxspriteengine1.Engine);
 car.Image := dximagelist1.Items.Find('1');
 car.X := 0;
 car.Y := 0;
 car.Width := car.Image.Width;
 car.Height := car.Image.Height;
 form1.DoubleBuffered := true;
 dxdraw1.DoubleBuffered := true;
 fire := 0;
end;
procedure tcar.DoMove(movecount: integer);
begin
 if isLeft in Form1.DxInput1.States then
    car.X := car.X -3;
  if isRight in Form1.DxInput1.States then
    car.X := car.X +3;
  if isdown in Form1.DxInput1.States then
    car.y := car.y +3;
  if isup in Form1.DxInput1.States then
    car.y := car.y -3;
  
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
 form1.dxspriteengine1.Draw;
 form1.dxdraw1.Flip;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
 dxinput1.Update;
 dxspriteengine1.Move(0);
 dxspriteengine1.Dead;
 dxdraw1.Surface.Fill(0);
 dxspriteengine1.Draw;
 dxdraw1.Flip;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (key = vk_space) and (fire=0) then car.shootmg;
end;

end.
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Tastenabfrage

  Alt 12. Feb 2004, 17:29
Hallo! hat jemand vielleicht eine übersicht, welcher key für welche taste steht?

z.b.
#13 --> Enter
#27 --> Escape
...

Hat jemand solch eine übersicht?

oder hat jemand den key für die F-Tasten parrat? (F1,F2 usw.)



Gruß, dopeline
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Tastenabfrage

  Alt 12. Feb 2004, 17:31
Die virtuellen Tastaturcodes findest du in der Hilfe.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Tastenabfrage

  Alt 12. Feb 2004, 17:49
also das funktioniert aber nicht:if key = VK_F1   then showmessage('F1 wurde gedrückt'); woran liegt das?

ich habe es auch mit 'F1' F1 versucht, aber immer kommen fehlermeldungen...


Gruß, dopeline
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Tastenabfrage

  Alt 12. Feb 2004, 17:53
Zitat von dopeline:
also das funktioniert aber nicht:if key = VK_F1   then showmessage('F1 wurde gedrückt');
Komisch, bei mir schon:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_F1 then showmessage('F1 wurde gedrückt');
end;
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Tastenabfrage

  Alt 12. Feb 2004, 18:08
aha! ich habe es im onKeyPress! wo ist denn da der unterschied, ob eine taste gedrückt wird, oder ob sie runter-gedrückt wird?


Gruß, dopeline
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz