Thema: If Key = #107

Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#16

AW: If Key = #107

  Alt 17. Mai 2019, 14:40
Hallo,
habe eine Abfrage gebastelt, die jedoch nur teilweise funktioniert.
Delphi-Quellcode:
if Key = #13 then //RETURN-Taste
begin
  ShowMessage('Bin hier 1');
  usw.
end
else if Key = #107 then //+-Taste auf dem Num-Block.
begin
  ShowMessage('Bin hier 2');
  usw.
end
Die Return-Taste funktioniert, die Plus-Taste jedoch nicht. Nach der Recherche dürfte jedoch #107 für die +-Taste korrekt sein. Oder doch nicht. Ich bitte um Hilfe.

Danke, Luckner
+ auf dem Num-Block hat den Wert 107 (Word) und nicht #107 (Char), #107 ist das kleine k.

Wenn man eine nummerischen Wert für eine Taste ermittelt hat, aber in einer Abfrage ein Zeichen benötigt, so kann man nicht einfach vor den nummerischen Wert ein # setzen, auch dann nicht, wenn das vom Compiler dann so "geschluckt" wird.

Der nummerische Wert der Taste k ist übrigens 75, dies ist aber nicht der Ascii-Wert des auf der Taste befindlichen Zeichens k, zumal diese Taste ja durchaus das K liefern könnte.

Wenn Du auf die Taste + vom Num-Block abfragen willst, so musst Du dazu entweder das Ereignis On...KeyUp oder das Ereignis On...KeyDown verwenden. In diesen beiden Ereignisse muss Du jedoch die Entertaste mit 13 abfragen und nicht mit #13, wie im Ereignis On...KeyPress.

Der abzufragende Wert in den Ereignissen ist bei einigen wenigen Tasten (fast) gleich, so dass man #13 äquivalent zu 13 verwenden kann, bei der Tabulatortaste mit #9 bzw. 9 geht das auch, aber beim überwiegenden Teil der Tasten passt das schlicht und einfach nicht.

Bau Dir mal ein Programm, das im OnKeyUp diesen Quelltext enthält:
Delphi-Quellcode:
procedure Tform1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
         s : String;
         s2 : String;
begin
  s := '';
  if ssShift in Shift then s := s + 'Umsch + ';
  if ssAlt in Shift then s := s + 'Alt + ';
  if ssCtrl in Shift then s := s + 'Strg + ';
  if ssLeft in Shift then s := s + 'Left + ';
  if ssRight in Shift then s := s + 'Right + ';
  if ssMiddle in Shift then s := s + 'Middle + ';
  if ssDouble in Shift then s := s + 'Double + ';
  s2 := IntToStr(TextToShortCut(AnsiReplaceText(s + Chr(Key),' ','')));
  s := Trim(s);
  s := ReverseString(s);
  if Copy(s,1,1) = '+then s := Trim(Copy(s,2,Length(s)));
  s := ReverseString(s);
  if s = 'then s := '<leer>';
  Caption := 'Key = ' + IntToStr(Key) + ' - Shift = ' + s + ' - ShortCut für Menüs = ' + s2;
end;
Es zeigt Dir in der Caption des Formulares dann die gedrückte Tastenkombination mit den in OnKeyUp abzufragenden Werten an. Das Formular kannst Du auf die Größe der Caption reduzieren.

Der Quelltext ist werde noch ästhetischen oder sonstwie besonderen Kriterien geschrieben, Effektivität ist auch keine Anforderung gewesen, sondern einfach nur: tut was er soll
  Mit Zitat antworten Zitat