Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Tastaturverarbeitungsereignis(Taste und Dauer des Drucks) (https://www.delphipraxis.net/61540-tastaturverarbeitungsereignis-taste-und-dauer-des-drucks.html)

Preddy2005 22. Jan 2006 22:03


Tastaturverarbeitungsereignis(Taste und Dauer des Drucks)
 
Hallo erstmal!

Nach langem lesen in verschiedenen Foren und stöbern im Internet wende ich mich jetzt mal an euch...

Delphi-Quellcode:

procedure TfrmTitel.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  Tastendruck_Anfang      := GetTickCount;
  Schiffsaktionen(Key,frmTitel,Shift); // SCHIFFFUNKTIONEN.PAS // Hier werden die Keys weiterverarbeitet , irrelevant hoffe ich

end;

{**********************************************************************************
**********************************************************************************}

procedure TfrmTitel.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

 Tastendruck_Ende := GetTickCount;

 Differenz_Tastendruck := ((Tastendruck_Ende - Tastendruck_Anfang) div 1000) ;
 edtTastenDruckSek.Text := IntToStr(Differenz_Tastendruck);

end;

{**********************************************************************************
**********************************************************************************}
Nun meine Fragen:

1.Wieso kommt in dem Editfeld immer 0 raus?
2.Hat jemand eine bessere Idee wie man das mit der Zeitmessung machen kann?
Am besten einfacher...


Hoffe ihr könnt mir helfen.Danke im voraus für den Aufwand und die Mühe.

marabu 22. Jan 2006 22:19

Re: Tastaturverarbeitungsereignis(Taste und Dauer des Druck
 
Herzlich Willkommen in der Delphi-PRAXiS.

Da du nur vollendete Sekunden berechnest, ist doch Null als Ergebnis durchaus plausibel, oder? Du musst wissen, dass in Anhängigkeit von den Einstellungen deines keyboard controller das KeyDown Ereignis auch beim auto repeat ausgelöst wird. Schau mal in deinem BIOS nach den eingestellten Zeiten.

Freundliche Grüße vom marabu

Preddy2005 23. Jan 2006 21:47

Re: Tastaturverarbeitungsereignis(Taste und Dauer des Druck
 
Erstmal danke für die Antwort. Nur leider weiss ich nicht wie ich das Problem sonst noch gut lösen kann.Ich brauche eine Möglichkeit wie beim Parameter Shift ... Mit Shift halten geht das ja , aber ich möchte das wenn man Space gedrückt hält sich ein Balken am unteren Rand des Bildschirmes auflädt (Benutze dafür eine Fremdkomponente für den Balken). Wäre sehr hilfreich wenn mir einer sagen könnte, wie ich das bewerkstelligen kann ohne GetTickCount oder wenn mit wie... Mit der Methode habe ich ja keinen Erfolg.

omata 23. Jan 2006 21:56

Re: Tastaturverarbeitungsereignis(Taste und Dauer des Druck
 
Hallo,

Zitat:

Zitat von Preddy2005
Differenz_Tastendruck := ((Tastendruck_Ende - Tastendruck_Anfang) div 1000) ;

warum teilst du ganzzahlig durch 1000.
Du solltest die Auswertung in Millisekunden machen (nimm das div weg!)

Edit: hier mal ein Beispiel...

Delphi-Quellcode:
  :
  private
    { Private-Deklarationen }
    FStartZeit:Cardinal;
    FGedrueckt:boolean;
  :

procedure TForm.FormCreate(Sender: TObject);
begin
  FGedrueckt:=false;
end;

procedure TForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if not FGedrueckt then begin
    FGedrueckt:=true;
    FStartZeit:=GetTickCount;
  end;
end;

procedure TForm.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if FGedrueckt then begin
    showmessage(inttostr((GetTickCount - FStartZeit)));
    FGedrueckt:=false;
  end;
end;
MfG
Thorsten

marabu 24. Jan 2006 12:32

Re: Tastaturverarbeitungsereignis(Taste und Dauer des Druck
 
Hi,

ich würde das ähnlich machen wie Thorsten. Den Zustand GEDRUECKT brauche ich nicht, da er aus der Startzeit abgeleitet werden kann.

Delphi-Quellcode:
procedure TDemoForm.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_SPACE then
  begin
    ResetBar;
    Key := 0;
  end;
end;

procedure TDemoForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_SPACE then
    if tcStart = 0
      then tcStart := GetTickCount
      else ProgressBar(GetTickCount - tcStart);
end;
marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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