AGB  ·  Datenschutz  ·  Impressum  







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

Wiederholung bei gedrückter taste

Ein Thema von schrimm · begonnen am 5. Mär 2007 · letzter Beitrag vom 7. Mär 2007
Antwort Antwort
schrimm
(Gast)

n/a Beiträge
 
#1

Wiederholung bei gedrückter taste

  Alt 5. Mär 2007, 19:00
Also ich bin es schon wieder^^
und schon wiweder mit onkeydown
Folgendes Prob:
Mein "Spiel"(eigentlich ein einziges versuchsfeld) funktioniert so schon mehr oder weniger, nun steuere ich das männel mit den pfeiltasten und bei onkeydown gibt es den effekt, dass es ert 1 Impuls und danach nach einer kurzen pause erst die Impulse in reihe gibt, kann man diese Pause irgendwie verhindern?
falls jemand nicht weis, was ich meine, das ist im Windows ist genau so, wenn man mmmmmmmmmm schreibt, oder so dann kommt erst 1 m und danach dann die vielen hintereinander.
Hoffe es ist verständluich und vor allem zu lösen
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Wiederholung bei gedrückter taste

  Alt 5. Mär 2007, 19:08
Das macht der Tastaturcontroler so (also der in der Tastatur). Der schickt genau auf diese Weise, die Kommandos, das die Taste gedrückt wurde. Und er schickt einmal ein Kommando, wen die Taste losgelassen wird. Man kann die Zeiten bis der nächste Klick kommt auch umprogrammieren (zumindest ging das früher, soweit ich mich erinnere) Und wahrscheinlich geht es heute über den Tastaturtreiber. Brauchst du aber alles nicht. Denn dir reicht ja mitzubekommen, wann eine Taste gedrückt wird und wann sie wieder losgelassen wird.

Also kannst du onkeydown und onkeyup verwenden. Dann wiest du wann die Taste unten (gedrückt) und wann sie oben ist (nicht gedrückt)

Es gibt dann noch Ereignisunabhängig den Befehl GetAsyncKeyState
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
schrimm
(Gast)

n/a Beiträge
 
#3

Re: Wiederholung bei gedrückter taste

  Alt 5. Mär 2007, 19:14
das was du gesagt hast hab ich alles schon rausgefunden, es geht jetzt darum: wenn ich nun ne Pfeiltaste drücke, dann macht das männel einen schritt und dann nach der Pause läuft es weiter, dass wollte ich verhindern, scheint aber schwer zu werden.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Wiederholung bei gedrückter taste

  Alt 5. Mär 2007, 19:20
sirius hat schon recht
Delphi-Quellcode:
var
   weiter, SchonGedrückt: Boolean;

procedure bewegen;
begin
  repeat
    //bewegen
  until weiter;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if not SchonGedrückt then
    begin
      weiter := false;
      schonGedrückt := true;
      bewegen;
    end;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  weiter := True;
  schonGedrückt := false;
end;
oder du schaust über einen timer ob die tase gedrückt ist und bewegst dann
Dominik
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Wiederholung bei gedrückter taste

  Alt 5. Mär 2007, 19:35
Zitat von dominikkv:
oder du schaust über einen timer ob die tase gedrückt ist und bewegst dann
Das sollte man dringend zeitgesteuert machen (am einfachsten über einen Timer). Wie denn auch sonst?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
schrimm
(Gast)

n/a Beiträge
 
#6

Re: Wiederholung bei gedrückter taste

  Alt 5. Mär 2007, 19:39
also bewegen tut sich da schon alles, das problem ist nur , dass es am anfang durch diese Eigenschaft der Tastatur ert nur 1 macht, dann den rest.
erklärung: ani gibt an, welche animation ablaufen soll, 11 ist laufen rechts
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if ani in [11..14] then
begin
 Twait.enabled:=false;
 Tani.enabled:=true;
 case key of
  vk_right:
   begin
    ani:=11;// 1=gehen 1=rechts
   end;
 end;
end;

procedure TForm1.TaniTimer(Sender: TObject);
begin
 case ani of
  11:
   begin
    Ilaufr.left:=Ilaufr.left+5;
   end;
 end;
end;
also nur mal auf das minimale begrenzt
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Wiederholung bei gedrückter taste

  Alt 5. Mär 2007, 19:50
warum machst du dir es so kompliziert?^^
Delphi-Quellcode:
var
  Speed: Integer;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
    vk_right: speed := 5;
    vk_left: speed := -5;
  end;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  speed := 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Ilaufr.left:=Ilaufr.left+Speed;
end;
Dominik
  Mit Zitat antworten Zitat
Norbert987

Registriert seit: 27. Nov 2003
Ort: Aachen
74 Beiträge
 
Delphi 7 Professional
 
#8

Re: Wiederholung bei gedrückter taste

  Alt 6. Mär 2007, 01:17
Also wenn ich das richtig verstanden habe, dann möchte er gerade dass das Männchen nur einen Schritt macht, auch wenn die Taste weitere Signale sendet. Ich würde es so machen:

Delphi-Quellcode:
var
  down : boolean;

[..]

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if down then exit;

  if ani in [11..14] then
    case key of
      vk_right: ani:=11;// 1=gehen 1=rechts
    end;
  down := true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  down := false;
end;
Du musst halt "down := false;" noch zu beginn des Programmes eintragen. Den Timer brachst du nicht mehr und KeyUp muss halt wie KeyDown eingetragen werden.
  Mit Zitat antworten Zitat
schrimm
(Gast)

n/a Beiträge
 
#9

Re: Wiederholung bei gedrückter taste

  Alt 7. Mär 2007, 15:49
Zitat von Norbert987:
Also wenn ich das richtig verstanden habe, dann möchte er gerade dass das Männchen nur einen Schritt macht, auch wenn die Taste weitere Signale sendet.
Genau im gegenteil.
das männel bewegt sich wenn man drauf bleibt weiter und das ist auch so gewollt, aber es gibt den effekt, dass, wenn man lange auf einer taste bleibt es etwa siesen zeitlichen ablauf hat:
m mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
_^diese Pause, bevor da die anderen kommen will ich irgendwie umgehen, falls es geht
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Wiederholung bei gedrückter taste

  Alt 7. Mär 2007, 15:58
Eigentlich nimmt man für sowas (so denke ich auf jeden Fall) die Funktion, die im Beitrag #2 von Sirius erwähnt wurde!
getasynckeystate()

Diese Funktion gibt zurück, ob eine bestimmte Taste zur Abfrage-Zeit gedrückt wurde!
Also muss man in einen Timer folgendes schreiben:
if getasynckeystate(vk_right)<>0 then männel.xwert:=männel.xwert+5; Musst halt noch auf deine Bedürfnisse anpassen!

Edit: Und das läuft dann natürlich ohne die von dir angesprochenen Pausen ab!
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:56 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