Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi pfeiltasten (https://www.delphipraxis.net/87854-pfeiltasten.html)

eif 6. Mär 2007 12:21


pfeiltasten
 
hi.... programmiere grad ein bomberman clone als info-projekt in der schule... player1 läuft schon... palyer2 nicht... dieser sollte mit der pfeiltasten und der entertaste gesteuert werden... komme nicht mit dem OnKeyPres zurecht... kann mir das mal jem kurz erklären??

folgendermaßen hab ich die delphi-hilfe verstanden... und wenn ich im Form1 onKeyPress clicke erscheint das auch so in meinem quelltext... was ist falsch???

Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
     if key = VK_LEFT then
       begin
         if (feld[p2x,p2y] <> 'kiste') and (feld[p2x,p2y-1] <> 'wand') then
           begin
              //....
           end;
         end;

passsy 6. Mär 2007 12:36

Re: pfeiltasten
 
Delphi-Quellcode:
begin //Taste A
   if ab=true then
                  begin
                   if GetKeyState($41) < 0 then
                      begi  
                           ab:=false;
                           [...]                
                      end;
                   end;
   if GetKeyState($41) >= 0 then
                                begin
                                 ab:=true;
                                 [...]
                                end;
end;

Steve 6. Mär 2007 12:49

Re: pfeiltasten
 
Hi,

die Delphi-Hilfe sagt zum Thema Delphi-Referenz durchsuchenVirtuelle Tastencodes folgendes:
Delphi-Hilfe:
[...] Über diese Konstanten kann dann in Windows-API-Aufrufen oder in den Ereignisbehandlungsroutinen für OnKeyUp und OnKeyDown auf die Tasten Bezug genommen werden.

OnKeyUp und OnKeyDown haben andere Parameter als OnKeyPress, welches Du benutzt.

OnKeyDown/OnKeyUp ist vom Typ TKeyEvent:
Delphi-Quellcode:
TKeyEvent = procedure (Sender: TObject; var Key: Word; Shift: TShiftState) of object;
während OnKeyPress vom Typ TKeyPressEvent ist:
Delphi-Quellcode:
type TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;
Der Parameter Key ist bei OnKeyPress also kein Word, sondern ein Char.

Die Konstanten VK_* sind aber Word.

Daher rührt vermutlich Dein Fehler. Mit einer Fehlerbeschreibung was denn genau nicht geht (Compilermeldung?) wäre die Frage einfacher zu beantworten ;)


PS: Keine Ahnung, ob das hier hilft, aber schau Dir evtl. mal Delphi-Referenz durchsuchenOrd an..

Gruß
Stephan

Robert Marquardt 6. Mär 2007 12:57

Re: pfeiltasten
 
Die uebliche Verwechslung von Tastendruecken und den daraus resultierenden Zeichen. OnKeyDown und OnKeyUp operieren auf der Ebene von Tastendruecken. Sie sind eine Umsetzung von WM_KEYDOWN und WM_KEYUP. Nachdem ein Programm diese Messages empfangen hat generiert es (im DispatchMessage) WM_CHAR Messages. Damit sind wir auf der Ebene von Zeichen. Diese sind es die OnKeyPress handhabt. Es besteht keine 1:1 Relation! Man bekommt nur WM_CHAR Messages fuer Tastendruecke die ein Zeichen erzeugen. Zusaetzlich kann es mehrere WM_KEYDOWN und WM_KEYUP benoetigen um ein WM_CHAR zu bekommen. Bei diakritischen Zeichen naemlich.

Anmerkung: Das ist vereinfacht.

eif 6. Mär 2007 14:05

Re: pfeiltasten
 
okay... danke erstmal.... ich versuch mich mal dran...

lg... eif =)


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