Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Probleme mit CASE Anweisung


DelphiDelphin - So 17.04.05 12:46
Titel: Probleme mit CASE Anweisung
Hi wer weiss den Fehler ???

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case key of
65 and 66:Showmessage('Sie haben a + b gedrückt');

end;
end;



Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Mi 20.04.2005 um 08:02
Moderiert von user profile iconTino: Titel geändert.


Muetze1 - So 17.04.05 12:54

Moin!

Ja, ich - und du kannst ihn auch finden. Schau mal in die Hilfe zu Case Of und vor allem die Beispiele und dann sag uns mal, ob du einen Code findest der deinem auch nur irgendwie ähnlich ist - oder das gleiche macht...

MfG
Muetze1


delfiphan - So 17.04.05 14:21

@DelphiDelphin:
Da hast du das Konzept etwas missverstanden:

1.) Key ist eine Zahl und nicht eine Menge von Zahlen.
2.) Case geht nur mit Zahlen und nicht mit Zahlenmengen. Deswegen gibt es im Case nur die Oder-Verknüpfung (",") und keine Und-Verknüpfung.
3.) Für jeden Tastendruck wird ein separates FormKeyDown gestartet.

Wenn du also A drückst, wird FormKeyDown gestartet, wenn du danach B drückst, wird wieder FormKeyDown gestartet. Wenn du dann A wieder loslässt, wird dann FormKeyUp gestartet, usw.


Heiko - So 17.04.05 14:24

Um eine Kombination zu erzuegn musst du folgendes machen :wink: :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (key=65and (key=66then
  begin
   Showmessage('Sie haben a + b gedrückt')
  end
end;


delfiphan - So 17.04.05 14:29

@Heiko: Deine Variante macht etwa gleich wenig Sinn ;)


feivel3333 - Mo 18.04.05 21:39
Titel: Keydown
Key ist eine Variable. Sie kann einen (und genau einen) Wert annehmen. Also funktioniert so was wie (key=65) and (key=66) ziemlich genau gar nicht.
Was hast du genau vor?
Ich vermute, du möchtest feststellen, ob zwei Tasten gedrückt sind. Richtig?

Prinzipiell ist das auf diese Weise nicht möglich. Aber ich habe da eine Idee. In dem Form würde ich eine private-Variable z.B. niKey1 : integer und niKey2 : integer anlegen. Im OnKeyDown-Event des Formulars würde ich eine futzelig kleine Routine schreiben, die
die letzten beiden Tasten auswertet:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
begin
   niKey2 := niKey1;
   niKey1 := key;

   if ((niKey1 = 65and (niKey2 = 66)) or ((niKey1 = 66and (niKey2 = 65)) then begin
      // Das was auszuführen ist, wenn Taste 65 und 66 nacheinander in beliebiger
      // Reihenfolge gedrückt wurden
      // ...
   end;
end;

Nun kannst du entweder die Taste 65 und dann 66 oder umgekehrt drücken. Die gedrückten Tasten werden permanent gepuffert.

Ich hoffe, dir damit geholfen zu haben.

Viele Grüße, André

Moderiert von user profile iconAXMD: Delphi-Tags hinzugefügt.