![]() |
If Key = #107
Hallo,
habe eine Abfrage gebastelt, die jedoch nur teilweise funktioniert.
Delphi-Quellcode:
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.
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 Danke, Luckner |
AW: If Key = #107
Nach meinem Test ist + die 43 und - die 45. Egal ob Nummernblock oder nicht.
Delphi-Quellcode:
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin ShowMessage(Ord(Key).ToString); end; |
AW: If Key = #107
Versuch mal
Delphi-Quellcode:
Gruss, Jörn
..........
else if Key = VK_Add then //+-Taste auf dem Num-Block. begin ShowMessage('Bin hier 2'); usw. end |
AW: If Key = #107
VK_ADD ist auch die 107. + ist aber laut Windows 10 Bildschirmtastatur die 43.
|
AW: If Key = #107
Im OnKeyPress kommt lediglich das +-Zeichen an. Willst du den Tastencode, dann musst du das im OnKeyDown machen.
|
AW: If Key = #107
Der Unterschied ist, das eine ist der Virtuelle Tastencode, das andere der ASCII-Wert des Zeichens.
Im KeyPress bekommt man die ASCII-Werte in KeyDown/KeyUp bekommt man die virtuellen Tastencodes. Im KeyPress kann man dementsprechend einfach abfragen:
Delphi-Quellcode:
Im KeyDown/KeyUp:
if Key = '+' then
...
Delphi-Quellcode:
if Key = VK_ADD then
... |
AW: If Key = #107
Zitat:
Es gibt tatsächlich Leute, die haben und wollen keinen Nummernblock :thumb: |
AW: If Key = #107
Zitat:
Wenn er im KeyDown auf 43/45 abprüft funktioniert es weder mit noch ohne Nummernblock. Umgekehrt bringt VK_ADD im KeyPress nichts. Zitat:
Ohne Numblock geht gar nicht :? |
AW: If Key = #107
Danke für die Hinweise. 43/45 in KeyPress funktionieren nicht. Ebenfalls '+' nicht. Warum funktioniert #13 in KeyPress so gut?
Luckner |
AW: If Key = #107
Zitat:
Ggf. "KeyPreview" der Form auf true setzen? |
AW: If Key = #107
"KeyPreview" der Form auf true gesetzt. #43 und '+' in KeyPress ausprobiert. Geht nicht.
Schreibe das ganze für "KeyDown" um. Möglicherweise funktioniert es dort. Luckner |
AW: If Key = #107
Zitat:
|
AW: If Key = #107
Zitat:
|
AW: If Key = #107
Wie wär's mit
Delphi-Quellcode:
um zu sehen, ob und was ankommt?
Messagebox(0, pChar(IntToStr(key)), 'Info', mb_ok)
|
AW: If Key = #107
Zitat:
![]() Falls Du einigermaßen Englisch lesen kannst und 'ne Stunde Zeit hast kannst Du dir ja mal diesen Artikel ansehen: ![]() |
AW: If Key = #107
Zitat:
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:
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.
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; 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 ;-) |
AW: If Key = #107
Man sollte hier aber auch bedenken:
EIn Zeilenumbruch unter Windows ist NICHT
Delphi-Quellcode:
sondern die beiden Zeichen
#13
Delphi-Quellcode:
, die nacheinander gedrückt werden!
#13#10
Das mag ja in 99% der Fälle keinen Unterschied machen, aber in dem einen Prozent kann es das durchaus. Besonders bei Text, der von Linux-oder MacOS-Plattformen kommt (dort ist der Zeilenumbruch nämlich nur
Delphi-Quellcode:
). Auch macht es bei Stringverarbeitungen wie
#10
Delphi-Quellcode:
einen Unterschied. Benutze auch hier lieber
StringReplace
Delphi-Quellcode:
bzw.
OnKeyDown
Delphi-Quellcode:
mit
OnKeyPress
Delphi-Quellcode:
. Da weißt du dann zu 100% sicher, dass es ein Enter ist.
VK_RETURN
|
AW: If Key = #107
Zitat:
Delphi-Quellcode:
Gruß
System.pas
... const sLineBreak = {$IFDEF POSIX} _AnsiChr(#10) {$ENDIF} {$IFDEF MSWINDOWS} _AnsiStr(#13#10) {$ENDIF}; ... Andreas |
AW: If Key = #107
Die Unterscheidung der Zeikenübrüche mit #13 und #13#10 ist ja durchaus richtig und wichtig, nur welche Auswirkungen hat das auf die Abfrage von Tastatureingaben?
|
AW: If Key = #107
Keine natürlich!
Gruß K-H |
AW: If Key = #107
eben, warum dann der Hinweis?
|
AW: If Key = #107
Hallo Delphi.Narium und Andere,
habe die Abfrage unter "On...KeyDown" eingebaut und es funktioniert. Danke für den Hinweis auf #. Gruß, Luckner |
AW: If Key = #107
Zitat:
|
AW: If Key = #107
Zitat:
Wenn ein Tastendruck ein Zeichen produziert, ist immer der Tastaturtreiber daran schuld. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz