AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

j-Taste abfangen?

Ein Thema von AlexII · begonnen am 6. Apr 2015 · letzter Beitrag vom 7. Apr 2015
Antwort Antwort
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 13:45
Ein 'j' im KeyPress bleibt immer ein 'j', egal was für ein Tastaturlayout aktiv ist, oder ob ein Input-Method-Editor (IME) dazwischen klemmt.
In Lazarus aber nicht, wenn ich auf kyrillisch ändere ist Key bei allen Buchstaben ein '?', verstehe ich nicht wieso. Ich meine ShowMessage(Key) gibt ein '?' aus.

Stimmt vllt mit meiner if-Abfrage irgendwas nicht, da ein 'j' ist bei mir nicht immer ein 'j'.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
512 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 14:23
Ein 'j' im KeyPress bleibt immer ein 'j', egal was für ein Tastaturlayout aktiv ist, oder ob ein Input-Method-Editor (IME) dazwischen klemmt.
In Lazarus aber nicht, wenn ich auf kyrillisch ändere ist Key bei allen Buchstaben ein '?', verstehe ich nicht wieso. Ich meine ShowMessage(Key) gibt ein '?' aus.

Stimmt vllt mit meiner if-Abfrage irgendwas nicht, da ein 'j' ist bei mir nicht immer ein 'j'.
Wie wäre es, wenn wir dir schon versuchen zu helfen, du dir wenigstens die antworten gründlich durchliest, damit unsere Zeit die wir für dich aufopfern nicht umsonst gewesen ist?

Ich habe dir schon gesagt was sehr wahrscheinlich der Grund ist wieso du ein '?' bekommst.
Die Antwort lautet "ASCII-String" der nur 128 verschiedene Zeichen beinhalten kann. (Und standardmässig wir bestimmt kein kyrillisch unterstützt)
Ich weiss leider nicht wie du das Problem lösen kannst, ansätze wären jedoch herauszufinden ob du das ganze mit Unicode machen kannst oder die ASCII strings auch auf Kyrillisch umstellen kannst. Weitere ansätze wüsste ich nicht mehr.

Viel erfolg!
Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 14:36
Wie wäre es, wenn wir dir schon versuchen zu helfen, du dir wenigstens die antworten gründlich durchliest, damit unsere Zeit die wir für dich aufopfern nicht umsonst gewesen ist?
Verzeih, aber ich registriere das sehr wohl... habe gerade daran gebastelt.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#4

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 14:44
Ich hab's ... das macht es.

Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=74 then //...
end;

Vielen vielen dank an alle! Auch wenn ich nicht alles anwenden konnte, so habe ich mit eurer Hilfe viel gelernt.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#5

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 14:24
Die j-Taste hat den Scancode 74:

Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=74 then Winapi.Windows.Beep(2000,50);
end;
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#6

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 14:34
Die j-Taste hat den Scancode 74:

Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=74 then Winapi.Windows.Beep(2000,50);
end;
Wo hast Du den Scancode her?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#7

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 14:45
Wo hast Du den Scancode her?
https://de.wikipedia.org/wiki/Scancode

Zitat:
Um aber beim für den Vertrieb in vielen Ländern geplanten IBM PC nicht in jeder länderspezifischen Tastaturvariante andere Codes generieren zu müssen, wurde jeder Taste eine Nummer zugeordnet, der sog. Scancode. Dem Scancode wurde dann erst im Rechner vom Tastaturtreiber ein ASCII-Code zugeordnet. Für den Scancode wurden die Tasten einfach nach ihrer Lage auf der Tastatur reihenweise von links nach rechts durchnummeriert, im Gegensatz zum ASCII-Code, der der alphabetischen Anordnung folgt.

-----------------------
Kleine Änderung:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
Self.KeyPreview:= true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
caption := IntToStr(Key); // so bekommt man den Scancode
if key=74 then Winapi.Windows.Beep(2000,50);
end;

Geändert von hathor ( 6. Apr 2015 um 15:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#8

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 15:19
Ord('J') = 74 = $4F VK_xxx - Virtual-Keycode
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 16:14
Ich frag nur vorsichtshalber: Scancode = (Virtual)KeyCode?

Ich meine ja, aber dann passt das nicht mit der Aussage, das die Tasten einfach durchnummeriert wurden.
Wenn 'J' die 74. Taste ist (was stimmen mag) und gleichzeitig (rein zufällig) Ord('J')=74 ist (was stimmt), dann müsste ja das 'A' (ord('A')=65) 9 Tasten links vom 'J' sein, was jetzt wiederum nicht ganz richtig ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#10

AW: j-Taste abfangen?

  Alt 6. Apr 2015, 16:49
Nein.

ScanCode ist der Code der Taste, (Z = Z und Y = Y)
KeyCode der Code nach übersetzung des KeyboardLayouts (z.B. Z und Y, je Sprache)
und Char, SysChar usw. ist es ganz am Ende, z.B. nach einem eventuellen IME.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 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-2025 by Thomas Breitkreuz