Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   OnShortcut, TWMKey und Umlaute (und Cursortasten) (https://www.delphipraxis.net/214439-onshortcut-twmkey-und-umlaute-und-cursortasten.html)

looseleaf 11. Jan 2024 14:32

OnShortcut, TWMKey und Umlaute (und Cursortasten)
 
Ich grüße euch!

Wir versuchen gerade, in einem DBGrid mit der Eingabe eines Anfangsbuchstabens zur nächsten passenden Zeile zu springen, auch wenn Standardshortcuts am Formular vorhanden sind (zB Schli&eßen am Close Button).

Im Form ein OnShortcut implementiert:
Delphi-Quellcode:
procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var Key: Char;
begin
if ActiveControl = DBGrid then
  begin
  if (HiWord(Msg.KeyData) and KF_ALTDOWN = 0) then
    begin
    Key := Chr(Msg.CharCode);
    if IsLetter(Key) then
      begin
      DBGridKeyPress(self, Key);
      Handled := true;
      end;
    end;
  end;
end;
So weit so gut. Leider versagt es bei Umlauten (und sauber ist es bei Cursortasten auch nicht): Ein Ü zum Beispiel wird mir als '°' geliefert.
Wie macht man sowas sauber? Cursortasten sind in dem Fall kein Problem, weil die CharCodes 37,38,39,40 ohnehin keine Buchstaben sind und das in dem Fall funktioniert, aber wie würde ich unterscheiden, ob es ein &, (, ' ist oder die "zugehörigen" Cursortasten?

Und was mache ich mit Umlauten?

Danke fürs Augenöffnen
Stefan

Amateurprofi 12. Jan 2024 02:01

AW: OnShortcut, TWMKey und Umlaute (und Cursortasten)
 
Wie ist den IsLetter definiert?
Tipps:
Setze einen BreakPoint auf die erste Zeile und schau welche Werte Key hat, wenn du einen der Umlaute drückst.
Wenn Key als Char definiert ist würde ich Key := Char(Msg.CharCode) verwenden, nicht Chr;

looseleaf 18. Jan 2024 10:06

AW: OnShortcut, TWMKey und Umlaute (und Cursortasten)
 
Das Problem ist, dass hier als Code 222 kommt (oder ein ähnlicher), der dann je nachdem zu interpretieren ist. Wir haben jetzt die Umlaute einfach mal ignoriert.
Aber danke für die Rückmeldung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 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