Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TextToShortCut fehlerhafter Key (https://www.delphipraxis.net/203894-texttoshortcut-fehlerhafter-key.html)

SevenValues 4. Apr 2020 01:19

TextToShortCut fehlerhafter Key
 
Hallo.

Ich bekomme ständig bei
Delphi-Quellcode:
   SC:=VCL.Menus.TextToShortCut('Umsch+-');
   VCL.Menus.ShortCutToKey(SC,Key,Shift);
als Key die 111 zurück (also das '/' auf der Zehnertastatur statt des Underscore '_').
Eigentlich sollte da
Delphi-Quellcode:
   ShortCutToKey(SC,#189,[ssShift]);
drin stehen.
Ist es möglich, dass ich noch vorher ein Tastaturlayout angeben muss?
Glaub ich eigentlich nicht, weil die Umlaute alle korrekt sind. Nur dieses '-' macht Probleme.
Die 111 ist übrigens nichtmal das '-' auf dem Zehnerblock, sondern das '/'. Ist für mich aber erstmal unerheblich.

Vielleicht gibt es aber auch eine elegantere Lösung für die zwei Codezeilen, die dabei gleich noch das Problem löst? Arbeite das erste Mal mit TextToShortCut & ShortCutToKey.

Würde mich über Lösungsansätze freuen.

LG
7

PS: Im Übrigen ist der Code oben nur zur Veranschaulichung, bevor wieder einer fragt, was das soll. Ich speichere ShortCuts als Makro und arbeite die bei Tastendruck an einem externen Gerät nacheinander ab. Funktioniert auch. Nur eben die Verwechslung nicht. Alles Andere geht!

himitsu 4. Apr 2020 12:56

AW: TextToShortCut fehlerhafter Key
 
Ja, bei mir kommt auch 111 aka VK_DIVIDE raus, aber nach ShortCutToText kommt auch wieder Umsch+- raus,
selbst wenn ich die Konvertierung ohne das Shift mach, also nur '-'.

Der erste Teil (Alt/Ctrl/Shift) wird mit der Sprache übersetzt, mit welcher dein Programm kompiliert wurde.
(oder, wenn du mit Packages arbeites, dann auch der Systemsprache, falls eine passende Sprachdatei der RTL/VCL-BPLs mitgeliefert wurde)

Aber die restlichen Zeichen sind "binär" hart kodiert.
Früher, in den alten Delphis mit ANSI, da hängt es von der Systemsprache ab, aber im Unicode sollte es da keine Probleme mehr geben.
Welche Delphi-Version nutzt du? (vor Delphi 2009 war es ANSI)


Das Tastaturlayout hat nur Einfluss auf die Umrechnung von ScanCode der Tastatur zum VirtualKeyCode.
Und die VirtualKeyCodes sind überall gleich, womit dann die ShortCut-Funktionen arbeiten.
Aber ja wenn das Tastaturlayout im Windows nicht zu Tastatur passt, dann kommt natürlich im Windows/Programm nicht das an, was aufgedruckt wurde.



[EDIT]
ShortCutToText geht doch über den ScanCode (VCL.Menus.GetSpecialName > MSDN-Library durchsuchenMapVirtualKey und MSDN-Library durchsuchenGetKeyNameText), womit doch das Tastaturlayout einen Einfluß hat,
aber obwohl das Layout bei mir stimmt, ebenso das falsche Ergebnis, allerdings nur aus Richtung der Tastatur.
VK zu SC und Zurück müsste "eigentlich" stimmen, selbst mit dem falschen Layout, so lange das Zeichen irgendwo auf der Tastatur drauf ist.

Im US-Layout steht da unten /? wo bei uns -_ liegt.
http://kbd-intl.narod.ru/english/


Ich hab auch keine Ahnung, warum die Entwickler hier über den ScanCode gehn, anstatt direkt in ein Char umzuwandeln, mit MapVirtualKey+MAPVK_VK_TO_CHAR,
wobei dort dann aus 111 korrekt ein '/' wird, anstatt dem falschen '-' aus MapVirtualKey+GetKeyNameText. (umgekehrt sollte es dann wohl auch passen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz