Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi j-Taste abfangen? (https://www.delphipraxis.net/184560-j-taste-abfangen.html)

DeddyH 6. Apr 2015 14:04

AW: j-Taste abfangen?
 
Dann lass Dir doch einfach ausgeben, was im kyrillischen Tastaturlayout bei 'j' herauskommt.

BadenPower 6. Apr 2015 14:14

AW: j-Taste abfangen?
 
Zitat:

Zitat von DeddyH (Beitrag 1296342)
Dann lass Dir doch einfach ausgeben, was im kyrillischen Tastaturlayout bei 'j' herauskommt.

Das nützt ihm allerdings nur bedingt, denn er möchte ja in jeder Sprache bzw. mit jedem Tastaturlayout beim Druck auf die gleiche Taste die Funktionen aufrufen, egal welches Zeichen die Taste sendet.


Das heisst, dass er im KeyPress-Event ermitteln muss, welche Sprache/Tastaturlayout eingestellt ist und welches Zeichen diese Taste sendet.

AlexII 6. Apr 2015 14:15

AW: j-Taste abfangen?
 
Zitat:

Zitat von DeddyH (Beitrag 1296342)
Dann lass Dir doch einfach ausgeben, was im kyrillischen Tastaturlayout bei 'j' herauskommt.

Das wird ein 'o' ausgegeben mit showmessage(key) wird aber ein '?', voll komisch. Aber das ist eine halbfertige Lösung, da ich das auch für andere nicht germanische Sprachen schreibe.

milos 6. Apr 2015 14:17

AW: j-Taste abfangen?
 
Ich denke wenn du alle Tastaturlayouts unterstützen willst, wäre es am besten wenn du das Layout beim anzeigen und beim ausblenden der Form anpasst und du trotzdem nur mit einem Layout arbeiten kannst.

Also...

Bei FormShow wird das Tastaturlayout auf deutsch gesetzt. Somit kannst du ein einfaches "j" abfragen und jeder wird bei der Taste mit dem Strich, wo bei uns das normale "j" ist, ein "j" schicken.

Dieser Code setzte das Layout auf das Deutsche Layout.
Delphi-Quellcode:
var kbCOde : LongWord;
kbString : Array[0..9] of char;
begin
// The following line is the translation of the MAKELANGID
// macro explained in the WIN32 developper's reference help.
// if you start with "LoadKeyBoardLayout" then click the hyperlink
// to MAKELANGID. You will see all the constant I've used here.
// No more "magic numbers" like 409 or 419.

kbCode := (SUBLANG_DEFAULT shl 10) or LANG_GERMAN;

// The line below is to switch to a french canadian keyboard
//kbCode := (SUBLANG_FRENCH_CANADIAN shl 10) or LANG_FRENCH;

//Convert the binary code to an Hex string;
StrPCopy(kbString, IntToHex(kbCode, 8));

// Switch the keyboard know
LoadKeyboardLayout(@kbString, KLF_ACTIVATE);
end;
Quelle: http://www.delphipages.com/forum/sho...57&postcount=3

Wenn das ausgeführt wurde, kannst du ein einfaches J abfragen.


Das bei dem Kyrillischem Layout ein ? gesendet wird liegt wohl am ascii string.

AlexII 6. Apr 2015 14:36

AW: j-Taste abfangen?
 
@milos

Ok... aber damit zwinge ich den User dazu, noch nen blinden, eine andere Belegung in meinem Prog zu nutzen... so wie ich das verstehe, oder?

himitsu 6. Apr 2015 14:40

AW: j-Taste abfangen?
 
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.

Bei OnKeyDown/OnKeyUp ist das was Anderes. Die Taste 'j' löst natürlich immernoch den TastenCode 'J' aus, aber ob das am Ende wirklich ein 'j' wird, ist was Anderes.

> ScanCode > KeyCode > Char

milos 6. Apr 2015 14:41

AW: j-Taste abfangen?
 
Zitat:

Zitat von AlexII (Beitrag 1296351)
@milos

Ok... aber damit zwinge ich den User dazu, noch nen blinden, eine andere Belegung in meinem Prog zu nutzen... so wie ich das verstehe, oder?

Genau.

Was ich nicht ganz verstanden habe. Willst du das Programm im Hintergrund laufen lassen? Wenn ja wäre mein Vorschlag keine Option dafür. Wenn aber das Programm geöffnet werden muss könnte man es versuchen, denn du könntest das Layout wieder zurück setzen wenn das Forumlar den Fokus verliert.

AlexII 6. Apr 2015 14:45

AW: j-Taste abfangen?
 
Zitat:

Zitat von himitsu (Beitrag 1296352)
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'.

milos 6. Apr 2015 15:23

AW: j-Taste abfangen?
 
Zitat:

Zitat von AlexII (Beitrag 1296354)
Zitat:

Zitat von himitsu (Beitrag 1296352)
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

hathor 6. Apr 2015 15:24

AW: j-Taste abfangen?
 
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 Uhr.
Seite 3 von 5     123 45      

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