Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm mit Tastatur steuern? (https://www.delphipraxis.net/129523-programm-mit-tastatur-steuern.html)

AlexII 20. Feb 2009 13:34


Programm mit Tastatur steuern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab folgende Freeware (siehe Screenshot) mit zwei Pfeilen, nach Links und Rechts. Zur Zeit kann man sie nur mit der Maus betätigen. Ich will es aber so haben, dass sie auch mit der Pfeiltasten auf der Tastatur betätigt werden können.

Hab aber keine Idee wie es geht, wer kann mir helfen?

Ich kenne sowas ähnliches mir EditFeld und OnKeyDown aber hier... keine Ahnung. :gruebel:

nuclearping 20. Feb 2009 13:35

Re: Programm mit Tastatur steuern?
 
Form.OnKeyUp -> Form.KeyPreview := TRUE

AlexII 20. Feb 2009 13:37

Re: Programm mit Tastatur steuern?
 
Zitat:

Zitat von nuclearping
Form.OnKeyUp -> Form.KeyPreview := TRUE

Und deutlicher vielleicht? :gruebel:
Wie erkenne ich die Tasten, wie lautet der Code? Für Enter z.B. CH(13) und für die Links-Rechts Tasten?

Sir Rufo 20. Feb 2009 13:39

Re: Programm mit Tastatur steuern?
 
Wenn du bei deinem Form die Eigenschaft KeyPreview auf True stellst, dann wird jeder Tastendruck auch an das Formular übergeben, so dass bei jedem Tastendruck die Events OnKeyDown, OnKeyUp aufgerufen werden ...

Zitat:

Zitat von AlexII
Wie erkenne ich die Tasten, wie lautet der Code? Für Enter z.B. CH(13) und für die Links-Rechts Tasten?

Eine ShowMessage in deinem Code würde dich doch vielleicht weiterbringen ;)

mquadrat 20. Feb 2009 13:42

Re: Programm mit Tastatur steuern?
 
Zitat:

Zitat von Sir Rufo
Eine ShowMessage in deinem Code würde dich doch vielleicht weiterbringen ;)

Alternativ das Drücken von F1. In der Delphi Hilfe gibt es (bzw. gab es früher mal) eine Liste aller Kostanten für die Tasten.

Hansa 20. Feb 2009 13:45

Re: Programm mit Tastatur steuern?
 
Zitat:

Zitat von Sir Rufo
...dann wird jeder Tastendruck auch an das Formular übergeben...

Nicht ganz. Knapp daneben ist auch vorbei. :mrgreen: KeyPreview=true heißt, dass das Formular die Möglichkeit erhält, eine Taste auszuwerten, bevor dies im Control selber gemacht wird/werden kann. DIe Form muss nur den Focus haben.

AlexII 20. Feb 2009 13:50

Re: Programm mit Tastatur steuern?
 
Zitat:

Zitat von mquadrat
Alternativ das Drücken von F1. In der Delphi Hilfe gibt es (bzw. gab es früher mal) eine Liste aller Kostanten für die Tasten.

Kannst du mir dann ein Stichwort geben, für die F1 halt?

Hansa 20. Feb 2009 13:52

Re: Programm mit Tastatur steuern?
 
hier steht alles :

http://www.delphipraxis.net/internal...light=tastatur

mquadrat 20. Feb 2009 13:52

Re: Programm mit Tastatur steuern?
 
Zitat:

Zitat von AlexII
Zitat:

Zitat von mquadrat
Alternativ das Drücken von F1. In der Delphi Hilfe gibt es (bzw. gab es früher mal) eine Liste aller Kostanten für die Tasten.

Kannst du mir dann ein Stichwort geben, für die F1 halt?

Würd ich liebend gerne, aber seit dem letzten Help-Update funktioniert meine Hilfe überhaupt nicht mehr :wall: Probieren würd ich's erstmal bei den OnKeyUp und OnKeyDown Methoden und da mal schauen was im Text verlinkt ist bzw. in der siehe auch Rubrik.

Sir Rufo 20. Feb 2009 14:01

Re: Programm mit Tastatur steuern?
 
Schau auch mal in die Unit Windows, da sind die Tasten als Konstanten definiert (VK_*)

AlexII 20. Feb 2009 14:10

Re: Programm mit Tastatur steuern?
 
Hab jetzt folgenden Code

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key=CHR(VK_RETURN) then showmessage('ok');
end;
Das funkt auch, aber das hier:

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key=CHR(VK_RIGHT) then showmessage('ok');
end;
nicht, ich frage mich wieso? :gruebel:

Hansa 20. Feb 2009 14:14

Re: Programm mit Tastatur steuern?
 
Auch das ist bereits vorgekaut in dem Link nachzulesen. :roll:

Sir Rufo 20. Feb 2009 14:15

Re: Programm mit Tastatur steuern?
 
ähhh ... lesen hilft ja bekanntlich ... wir sprachen immer von OnKeyDown, OnKeyUp ... niemales von OnKeyPress :mrgreen:

AlexII 20. Feb 2009 14:20

Re: Programm mit Tastatur steuern?
 
Zitat:

Zitat von Hansa
Auch das ist bereits vorgekaut in dem Link nachzulesen. :roll:

Hab da nix gefunden, VK_Right, CHR(37)Links oder CHR(39)Rechts funktionieren nicht. :wall:

Sir Rufo 20. Feb 2009 14:21

Re: Programm mit Tastatur steuern?
 
ahhhhhhh ... nimm statt dem Event OnKeyPress das Event OnKeyDown ... nur da kannst du die Pfeiltasten abfragen!

AlexII 20. Feb 2009 14:21

Re: Programm mit Tastatur steuern?
 
Zitat:

Zitat von Sir Rufo
ähhh ... lesen hilft ja bekanntlich ... wir sprachen immer von OnKeyDown, OnKeyUp ... niemales von OnKeyPress :mrgreen:

Ach so... und wieso brauche ich zwei Ereignisse? Reicht nur OnKeyDown?

AlexII 20. Feb 2009 14:23

Re: Programm mit Tastatur steuern?
 
Bei OnKeyDown OnKeyUp funkt überhaupt nicht, nicht mal Enter.

Sir Rufo 20. Feb 2009 14:23

Re: Programm mit Tastatur steuern?
 
Du brauchst nicht 2 Ereignisse, sondern du kannst bei diesen 2 Ereignissen die Info zu den Pfeiltasten bekommen.

Du entscheidest, wann du reagieren möchtest

Taste runter -> OnKeyDown
Taste rauf -> OnKeyUp (denn wat runter muss auch wieder rauf)

hoika 20. Feb 2009 14:24

Re: Programm mit Tastatur steuern?
 
Hallo,

OnKeyPress
Warum nicht ShowMessage(Key)

OnKeyDown
Es wird direkt VK_X abgefragt.

Delphi-Quellcode:
If Key=VK_RIGHT

Heiko

Sir Rufo 20. Feb 2009 14:27

Re: Programm mit Tastatur steuern?
 
Delphi-Quellcode:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview := True;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ShowMessage( Format( '%d', [ Key ] ) );
end;

end.

AlexII 20. Feb 2009 14:36

Re: Programm mit Tastatur steuern?
 
Na endlich :thumb:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
If Key=VK_RIGHT then showmessage('Rechts');
If Key=VK_LEFT then showmessage('Links');
end;

Jakob Ullmann 20. Feb 2009 15:19

Re: Programm mit Tastatur steuern?
 
Übrigens: Wenn sich da nicht alles geändert hat, findet man eine Liste der VK-Konstanten unter Delphi-Referenz durchsuchenVirtuelle Tastencodes. :angel2:

edit: Zur Not wäre auch noch GetAsyncKeystate / GetKeystate möglich (falls man eine sofortige Reaktion wünscht):

Delphi-Quellcode:
procedure TFormX.TimerXTimer(Sender: TObject);
// -------------------^ Intervall klein
begin
  if GetAsyncKeystate(VK_LEFT) < 0 then
    ShowMessage('Links');
end;

AlexII 20. Feb 2009 20:49

Re: Programm mit Tastatur steuern?
 
Irgendwie reagierеt das Programm auf die Right- u. Downtaste ganz komisch und das liegt nicht am Code, denn wenn ich die Funktion der Lefttaste (was sehr gut funkt) der rechten zuweise - spinnt das Prog. Wird der Code wieder zurück der linken zugewiesen geht alles ok.

Also bei den Right- und Downtaste funktioniert alles ok, bei den Left- und Uptaste nicht. :gruebel:

AlexII 20. Feb 2009 22:01

Re: Programm mit Tastatur steuern?
 
Kann mir niemand helfen? :pale:

hoika 21. Feb 2009 10:36

Re: Programm mit Tastatur steuern?
 
Hallo,

ohne Code ?

< es liegt nicht am Code >

Hm, im Explorer funktionieren alle 4 Tasten,
was MS da wohl wieder verbrochen hat ...

Im Ernst: Natürlich liegt es an deinem Code!

Hänge mal ein Minimal-Programm (ohne Exe),
was das Problem zeigt an den nächsten Post.


Heiko

AlexII 21. Feb 2009 13:03

Re: Programm mit Tastatur steuern?
 
Ich weise den beiden Tasten die gleiche Funktion zu und sie arbeiten unterschiedlich. Ich spinne doch nicht. Die selbe Funktion, per VK_Left funkt alles richtig, VK_Right nicht. :wall: VK_Up auch ok, VK_Down spinnt wie die VK_Right.

hoika 21. Feb 2009 14:57

Re: Programm mit Tastatur steuern?
 
Hallo,

und was sollen wir ohne Code tun ?
Raten ?

Ich weiss ja nicht mal, was die aktuell auf deinem Form hast.

Mach ein Minimal-Bsp., was sich kompilieren läßt,
und hänge es an ein Post.


Heiko

AlexII 21. Feb 2009 19:33

Re: Programm mit Tastatur steuern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier der Code

Delphi-Quellcode:
procedure TForm1.dsAnzeigen;
begin
Label1.Caption:=losungen[z].ntvers;
Label2.Caption:=losungen[z].ntversst;
Label1.Width:=328;
Image19.Hint:=losungen[z].ntversst;
end;

procedure TForm1.Image16Click(Sender: TObject);
begin
if z=366 then
begin
z:=1;
dsAnzeigen;
Panel1.Visible:=True;
Panel1.SetFocus;
Panel1.Visible:=False;
ComboBox1.ItemIndex:=0;
end else
    begin
    Inc(z);
    dsAnzeigen;
    Panel1.Visible:=True;
    Panel1.SetFocus;
    Panel1.Visible:=False;
    ComboBox1.ItemIndex:=0;
    end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
If Key=VK_Left then
begin
Image16Click(Sender);
end;
If Key=VK_Right then
begin
Image16Click(Sender);
end;
end;
Jetzt das Problem - beide Tasten haben die gleiche Aufgabe. Jetzt wählt mal in der ComboBox irgendwas aus, falls die Stelle falsch ist - erscheint das oben-rechts im Form. Jetzt klickt man die linke Taste kommt ein neuer Vers, die Fehlermeldung verschwindet und in der ComboBox erscheint der Text "Der Vers steht in...?" So muss es auch sein!
Jetzt macht man das selbe mit der rechten Taste - spinnt das Prog, die Fehlermeldung verschwindet nicht und die ComboBox1.Text bekommt den ItemIndex:=1 obwohl es die 0 sein muss. Wenn man aber die Taste das zweite mal klickt geht wieder alles ok.


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