![]() |
AW: TButton und ShowAccelChar
Windows 11 weiß ich grade nicht,
aber Windows 10: [Win] > die "Einstellungen"-App > Tastatur > Funktionsweise von Tastenkombinationen ändern > Zugriffstasten unterstreichen, falls verfügbar Zitat:
Aber als ich vorhin suchen wollte, wie man "sicher" in das gefundene Menü kommt, fand ich erstmal die alte Tastsatursteuerung und da fehlte diese Option. |
AW: TButton und ShowAccelChar
ich habe es noch nie wirklich ausprobiert aber rein theoretisch würde doch ein kurzes senden der "alt" taste gefolgt von "escape" im "formcreate" das problem lösen ohne irgendwelche einstellungen vornehmen zu müssen, oder?
|
AW: TButton und ShowAccelChar
Bei Dialogen ja
Bei Menü/Kontektmenü muß man Alt vorher/während des Öffnens drücken. Das Drücken von Alt während offen, schließt das Menü. Mainmenü mit Alt oder F10 öffnen, da wird Accel auch aktiviert und bleibt aktiv, so lange "ein" Menü offen ist, auch beim Umblättern mit Maus/Tastatur. Und aktuell schließt bei mir auch schon das noch-gedrückthalten der Alt-Taste die Kontextmenüs sofort wieder (ein neuer Bug, der mir grade erst auffiel) ... also im Kontextmenü hab ich aktuell die Accels nur, wenn Option im System aktiv ist. |
AW: TButton und ShowAccelChar
Also der Gedanke den ich hatte habe ich nun erfolgreich getestet.
Ich habe TButton auf einer Form mit einer "T&est" Caption. Wenn ich das Programm starte ist "e" unterstrichen. Das war es doch was der TE wollte, oder?
Delphi-Quellcode:
function SendVK(const TargetWindow: HWND = 0; const VK_KeyCode: Word = 0; const PressKey: Boolean = True): Boolean;
var inputArray: array[0..0] of TInput; begin Result := False; if (TargetWindow = 0) then Exit; // Beginne Prüfung if (GetForegroundWindow <> TargetWindow) then begin // Ziel ist kein Fenster if (not IsWindow(TargetWindow)) then Exit; // Ziel ist minimiert if IsIconic(TargetWindow) then ShowWindow(TargetWindow, SW_RESTORE); // Ziel ist versteckt if (not IsWindowVisible(TargetWindow)) then ShowWindow(TargetWindow, SW_SHOW); // Ziel ist nicht im Vordergrund if (GetForegroundWindow <> TargetWindow) then BringWindowToTop(TargetWindow); // Finale prüfung if (GetForegroundWindow <> TargetWindow) then Exit; end; // Fülle Puffer und sende ihn FillChar(inputArray, Length(inputArray) * SizeOf(TInput), 0); inputArray[0].Itype := INPUT_KEYBOARD; inputArray[0].ki.wVk := VK_KeyCode; if (not PressKey) then inputArray[0].ki.dwFlags := KEYEVENTF_KEYUP; Result := (SendInput(Length(inputArray), inputArray[0], SizeOf(TInput)) <> 0); end; procedure TForm19.FormCreate(Sender: TObject); begin // Self.BringToFront; SendVK(Handle, VK_LMENU); SendVK(Handle, VK_LMENU, False); SendVK(Handle, VK_ESCAPE); SendVK(Handle, VK_ESCAPE, False); end; |
AW: TButton und ShowAccelChar
Und wenn
Zitat:
|
AW: TButton und ShowAccelChar
Wenn, ann in OnActivate
Ist in der Form nicht schon Visible=True, dann will ich nicht wissen, was wo dein Code dann was macht. |
AW: TButton und ShowAccelChar
Das ist ein guter Einwand, also aufpassen wo man SendVK() ausführt, die Form muss sichtbar sein. Das SendVK() sendet stur an was auch immer im Vordergrund den Focus hat.
edit: die obige methode etwas überarbeitet so das nun auch ein Ziel angegeben werden kann. |
AW: TButton und ShowAccelChar
Zitat:
Delphi-Quellcode:
var
B : BOOL; B:= True; SystemParametersInfo(SPI_SETKEYBOARDCUES, 0, @B, 0); |
AW: TButton und ShowAccelChar
Die Funktion SystemParametersInfo zum Setzen von Einstellungen zu benutzen, kann man vielleicht tun, wenn man die Software nur auf dem eigenen System verwendet. Aber ich empfinde es als NoGo, wenn man dies in einer Software tut, die bei anderen Leuten laufen soll. Der Nutzer hat immer irgendwelche Gründe, warum bestimmte Dinge auf dem System oder im Nutzerprofil so eingestellt sind wie sie eingestellt sind.
Nur mal ein kurzer Abschweif, warum ich das so sehe. Es gibt ein Total Commander Plugin, das bis vor einigen Jahren das Smoothscrolling von Listboxen im Windows aktivierte, sobald das Plugin geladen wurde. Smoothscrolling von Listboxen ist auf allen Systemen, die ich installiere, deaktiviert, weil dieses "Feature" für mich weder sinnvoll noch nötig sondern eher hinderlich ist. Das beeinflusst(e) - weil das eine globale Einstellung für das Nutzerprofil ist - alle (Standard-Windows) Listboxen in allen Programmen. So war es nicht nur im Total Commander und dessen Listboxen aktiv sondern auch im PuTTY, in allen Standard-Schriftauswahl-Dialogen usw. usf. Zum Glück behob der Autor des Plugins das irgendwann und vermerkte das sogar im Changelog. Aber genervt hat mich das lange Zeit. Es hatte Monate gedauert, bis ich herausfand, dass es von diesem Plugin verursacht wird, weil das Smoothscrolling sich nur unregelmäßig aktivierte, weil das Plugin natürlich nicht immer benutzt wurde. Nichtsdestotrotz kann man die Keyboard Indicators damit (einmalig) aktivieren, falls man die Einstellung in der Systemsteuerung bzw. der Einstellungen-App nicht findet. Grüße Dalai |
AW: TButton und ShowAccelChar
Ich habe jetzt beide Lösungsversisonen ausprobiert. Da ich die Software hauptsächlich für meine eigenen Zwecke nutzen werde, sollte die Benutzung der Windows-Funktion kein Problem darstellen. Aber die Langversion von KodeZwerg werde ich in petto halten. Dabei habe ich aber noch nicht verstanden, was „Ziel angeben” bedeutet. Vielleicht kann mir KodeZwerg das noch erklären?
Wenn man nicht immer zwischen Tastatur und Maus hin und her springen will, ist Alt+ sehr hilfreich - zumal, wenn man wie ich immer mal wieder unter einem „Mausarm” leidet. Vielen Dank einstweilen! Oswald |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 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