Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi KeyPress Problem (https://www.delphipraxis.net/127975-keypress-problem.html)

thomas2009 22. Jan 2009 01:17


KeyPress Problem
 
Hallo
der Panel bewegt immer mit 10 Pixel !
egal ob ich die taste Pfeil allein oder CTRL+Pfeil Taste
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if ((Key = 17) and (Key = 39)) then begin
 Panel1.left:= Panel1.left+1;
end;

 if Key = 39 then begin
Panel1.left:= Panel1.left+10;
end;
end;
Woran liegt es dann ?

jaenicke 22. Jan 2009 03:23

Re: KeyPress Problem
 
Zitat:

Zitat von thomas2009
Delphi-Quellcode:
if ((Key = 17) and (Key = 39)) then begin

Eigentlich sollte an der Stelle die Warnung vom Compiler erscheinen, dass die Bedingung nie erfüllt werden kann. Wie auch? Wie soll ein Wert denn gleichzeitig 17 UND 39 sein? :gruebel:

Wenn du den Status der Tasten Shift, Strg usw. auslesen möchtest, dann schau dir doch einmal den Wert des Parameters Shift an. ;-)

hitzfeld 22. Jan 2009 05:14

Re: KeyPress Problem
 
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if ((Key = 17) and (Key = 39)) then begin
Panel1.left:= Panel1.left+1;
end;

if ((Key <> 17) and Key = 39)) then begin
Panel1.left:= Panel1.left+10;
end;
end;
Vielleicht hilft das?

Gerd

jaenicke 22. Jan 2009 06:10

Re: KeyPress Problem
 
Zitat:

Zitat von hitzfeld
Delphi-Quellcode:
if ((Key = 17) and (Key = 39))

:wall: :wall: :wall:
Wie soll das gehen?
Ich habe das doch schon geschrieben... :roll:

Vielleicht anders... Das ist wie wenn du im Laden sagst:
Wenn diese Frucht eine Banane ist UND diese Frucht eine Ananas ist, dann nehme ich sie.

Kann die selbe Frucht jemals eine Banane UND eine Ananas gleichzeitig sein? Nein. Genauso wenig kann Key gleichzeitig 17 UND 39 sein...

Die richtige Lösung ist die Abfrage des Parameters Shift.

HighSpeed 22. Jan 2009 06:12

Re: KeyPress Problem
 
Es müsste wohl eher so aussehen:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (ssCtrl in Shift) and (Key = 39) then
  Panel1.left := Panel1.left + 1;
 end else if Key = 39 then
  Panel1.left:= Panel1.left+10;
end;

HighSpeed 22. Jan 2009 06:17

Re: KeyPress Problem
 
Wichtig ist das else, da die 2. Bedingung in beiden Fällen erfüllt ist und ausgeführt werden würde.

Uwe Raabe 22. Jan 2009 07:18

Re: KeyPress Problem
 
@HighSpeed: Da war dann doch ein end zuviel...

Etwas anders formuliert funktioniert es auch:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = 39 then begin
    if ssCtrl in Shift then
      Panel1.left := Panel1.left + 1
    else
      Panel1.left := Panel1.left + 10;
    Key := 0; // optional, damit kein anderes Control mehr auf den Key reagieren kann
  end;
end;

thomas2009 22. Jan 2009 12:53

Re: KeyPress Problem
 
es ging nun
Ich habe allerdings ein ganz neues Projekt erstellt.

Danke

HighSpeed 22. Jan 2009 17:25

Re: KeyPress Problem
 
@ Uwe Raabe:
stimmt, is beim begin / end löschen wohl irgendwie übrig geblieben...

aber das passiert ja schonmal, wenn man nich alles immer duch n compiler laufen lässt

Blackheart 22. Jan 2009 20:07

Re: KeyPress Problem
 
Zitat:

Zitat von thomas2009
es ging nun
Ich habe allerdings ein ganz neues Projekt erstellt.

Danke

Wenn du in deinen ettlichen Threads zum Thema Keys mal erwähnt hättest worum es geht oder worauf du hinaus willst, wäre dir und auch andereren damit ziehmlich geholfen. :gruebel:


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