Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DXINPUT FRAGE (https://www.delphipraxis.net/11736-dxinput-frage.html)

ATwardz 12. Nov 2003 20:05


DXINPUT FRAGE
 
Wenn ich die Tastenabfrage mit
IF isleft in DXINPUT1.state then
.....

dann kann ich die Taste gedrückt halten und das ereigniss wird immer ausgelöst!


FRAGE:

Nun will ich aber das für jeden Drück nur 1 Ereignis ausgelöst wird egal wie lang der Druck dauert!
GIBT ES DAFÜR N BEFEHL?
Selber machen ginge auch aber würde halt ZEIT und Mühe sparen!

DANKE IM VORRAUS

11.11 ist VORBEI DIE FÜNFTE JAHRESZEIT HAT BEGONNEN
:party: :cheers:

ATwardz 13. Nov 2003 15:57

Re: DXINPUT FRAGE
 
WIESO HAT DENN KEINER NE IDEE? IST GIBT DOCH MEHR ALS HUNDERT LEUTE IN DIESEM FORUM,DIE DIESES PROBLEM SCHON GELÖST HABEN!

Haegar 13. Nov 2003 17:52

Re: DXINPUT FRAGE
 
woher weisste denn das mit den 100 leuten?? wenn dem so wäre, würde darüber sicher was mit der suchfunktion zu finden sein oder nicht.

ich kann dir leider nicht helfen, aber die suche vielleicht!

ciao haegar

Die Muhkuh 13. Nov 2003 17:57

Re: DXINPUT FRAGE
 
@ATwardz


:warn: könntest du es mal sein lassen alles groß zu schreiben??? Deswegen wird dein Thread nicht eher gelesen! :warn:

Die Muhkuh 13. Nov 2003 17:59

Re: DXINPUT FRAGE
 
Nochmalwas:


Wenn das schon über 100 Leute gelöst haben dann SUCH mal danach!

maximov 13. Nov 2003 18:48

Re: DXINPUT FRAGE
 
Direct input ist status orientiert (oder so) nicht ereignisorientiert :wink: ...Obwohl man auch irgendwelche callbacks registrieren kann, frag mich nicht wie. Der normalen weg wäre den status abzufragen, so wie du es machst. Ausserdem is das alles fieses altes DelphiX zeugs *schüttel* ...das kann das garantiert nicht. Aber es hält dich doch keiner davon ab einen work araond zu machen...mengen sind da sehr praktisch.

Wenn du nicht DelphiX benutzen würdest, hätte ich dir meine DirectInput unit überlassen.

viel glück noch.

cu,
maximov.

ATwardz 13. Nov 2003 21:45

Re: DXINPUT FRAGE
 
Habe sicherlich gesucht! Gefand allerdings nichts, so stellte ich diese Frage!
Es gibt sicherlich , vielleicht nicht Hundert aber genügend die dies realisiert haben!
Was eigentlich auch mehr eine ironische Übertreibung war!
Ich dachte das die Antwort demnach leicht ist, nur ich sie nicht kenne!
Ich wusste nicht das grossschreiben hier im Forum so geächtet wird , sorry!
Was mich viel eher aufregt sind überflüssige Kommentare von Leuten die das Forum "zumüllen".
Aber anstatt mich zu beratschlagen, hättest du Spider die Zeit ja auch nutzen können anderen Leuten zu helfen!

Danke Maximov

Seniman 14. Nov 2003 18:42

Re: DXINPUT FRAGE
 
Hallo

benutz doch einfach das OnKeyDown-Event der Form. Das wird beim Drücken der Taste einmal(!) ausgeführt. In dem Parameter "Key" wird die gedrückte Taste gespeichert. Dabei steht
37 für links
38 für oben
39 für rechts
40 für unten
13 für Enter
32 für Leertaste
Ich denke, das sind die wichtigsten Taste.

Das ganze könnte dann in etwa so aussehen:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=37 then //Wurde Taste "Links" gedrückt?
  begin
  // Code für "Links"
  end;
// usw...
end;

Grüße
Seniman

Maximus 15. Nov 2003 10:45

Re: DXINPUT FRAGE
 
Hö? - Ich dachte beim OnKeyDown Event könnte man auch auf der Taste bleiben und das wiederholt sich ständig ....

Und ist das dan nicht key = VK_Left wenn die pfeiltaste nach links abgefragt werden soll?

ATwardz 15. Nov 2003 18:29

Re: DXINPUT FRAGE
 
Aber genau dies geht nicht, das hatte ich auch schon versucht! Die onKeyDown Methoden von Form1 und DXDraw1 funkzen nit!
Bitt ein wenig ratlos!

Daniel B 15. Nov 2003 18:30

Re: DXINPUT FRAGE
 
Hast Du auch KeyPreview von Form1 auf True gestellt?

Seniman 15. Nov 2003 19:01

Re: DXINPUT FRAGE
 
Hallo,

ja es ist richtig. Wenn man eine Taste gedrückt hält, dann wird auch das OnKeyDown-Event wiederholt ausgeführt. Das ist aber anders als bei den DXInput.States. Beispiel: Ich halte die Taste "f" ein paar Sekunden fest:
ffffffffffffffffffffffffff
Nach dem ersten Tastendruck ist eine kleine Pause und dann kommen ganz viele "f"s. Bei jedem f würde jetzt das OnKeyDown-Event ausgeführt. Das hat allerdings nichts mit den Frames des Timers zu tun. In den meisten Fällen halte ich diese Umsetzung aber für ausreichend.
Ansonsten eine neue Idee:
Für jede Taste, um die es geht, eine Variable vom Typ boolean an. Für die Taste "Links" zum Beispiel:

Delphi-Quellcode:
var
  Form1: TForm1;
  GedrLinks: Boolean;
  // usw...

implementation
Denn setzt du ganz an den Schluss der Timer-Prozedur folgendes:
Delphi-Quellcode:
GedrLinks:= (isleft in Form1.DxInput1.States);
Nun kannst du irgendwo vorher in dieser Timer-Prozedur folgendes abfragen:
Delphi-Quellcode:
if (not GedrLinks) and (isleft in Form1.DxInput1.States) then //Code
D.h. in dem vorherigen Frame darf die Taste nicht gedrückt gewesen sein, aber jetzt muss sie es.

So sollte es klappen.
Grüße
Seniman

Daniel B 15. Nov 2003 19:04

Re: DXINPUT FRAGE
 
Zitat:

Zitat von Seniman
Nach dem ersten Tastendruck ist eine kleine Pause und dann kommen ganz viele "f"s.

Das liegt halt einfach da dran wie es der User in Windows eingestellt hat, manche habe halt die Anlagverzögerung ausgemacht, dann gibt es diese Pause nicht.

ATwardz 16. Nov 2003 23:11

Re: DXINPUT FRAGE
 
Hmmmmm, ja,

ich danke euch für eure Vorschläge doch es ist leider nun mal nicht das was ich suche!

Jeder kennt es, das legendäre "Spielhöllen-feeling", wo man wie ein Besessener auf die Tasten gehauen hat um zu schiessen!
Jeder Druck, ein Schuss! So wollte ich es eigentlich auch machen, das der der die schnellere Hand hat einen Vorteil hat!

Deswegen meinte ich auch das es bestimmt schon Hundert Leute gemacht heben, weil es halt zum Ursprung der Videospiele zählt!

Ich bin mir bewusst , das ich mit einen extra Timer eine permanente Abfrage machen könnte!
Ich wollte nur wissen und denke eigentlich das es irgendwo in diesem Delphiuniversum eine elegantere Lösung gibt!

Danke an alle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz