AGB  ·  Datenschutz  ·  Impressum  







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

TButton und ShowAccelChar

Ein Thema von OsCor · begonnen am 17. Jan 2022 · letzter Beitrag vom 23. Jan 2022
Antwort Antwort
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#1

AW: TButton und ShowAccelChar

  Alt 20. Jan 2022, 21:00
Im Windows 7 bzw. in der klassischen Systemsteuerung ist das unter
Code:
Systemsteuerung\Alle Systemsteuerungselemente\Center für erleichterte Bedienung\Bedienung der Tastatur erleichtern
Die Option heißt "Tastenkombinationen und Zugriffstasten unterstreichen".

Ob das im Win10 wirklich in der Einstellungen-App ist (und wenn ja wo), weiß ich nicht.

Grüße
Dalai
  Mit Zitat antworten Zitat
OsCor

Registriert seit: 1. Jan 2009
Ort: Kenzingen, Südbaden
99 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TButton und ShowAccelChar

  Alt 20. Jan 2022, 21:31
Ich arbeite seit ein paar Wochen mit Win 11. Bisher habe ich in den Einstellungen noch nichts gefunden.

Gruß
Oswald
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#3

AW: TButton und ShowAccelChar

  Alt 20. Jan 2022, 21:39
Gibt's denn noch die klassische Systemsteuerung? Probier's mal mit control.exe.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TButton und ShowAccelChar

  Alt 20. Jan 2022, 22:45
Windows 11 weiß ich grade nicht,
aber Windows 10:

[Win] > die "Einstellungen"-App > Tastatur > Funktionsweise von Tastenkombinationen ändern > Zugriffstasten unterstreichen, falls verfügbar


Zitat:
Gibt's denn noch die klassische Systemsteuerung
Zum Großteil, wird das sogar über das Startmenü noch gefunden.

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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Jan 2022 um 22:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TButton und ShowAccelChar

  Alt 21. Jan 2022, 01:56
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?
Gruß vom KodeZwerg

Geändert von KodeZwerg (21. Jan 2022 um 02:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TButton und ShowAccelChar

  Alt 21. Jan 2022, 08:13
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TButton und ShowAccelChar

  Alt 21. Jan 2022, 13:54
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;
Gruß vom KodeZwerg

Geändert von KodeZwerg (22. Jan 2022 um 13:41 Uhr) Grund: methode überarbeitet
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#8

AW: TButton und ShowAccelChar

  Alt 21. Jan 2022, 14:02
Und wenn
Zitat:
[Win] > die "Einstellungen"-App > Tastatur > Funktionsweise von Tastenkombinationen ändern > Zugriffstasten unterstreichen, falls verfügbar
Deaktiviert ist geht es dann immer noch?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TButton und ShowAccelChar

  Alt 23. Jan 2022, 17:34
Okay, hier die Auflösung zu Deiner Frage, wie du in diesem Quelltext teil sehen kannst wird eine Methode aufgerufen.

Delphi-Quellcode:
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;
Dieser Methode habe ich beigebracht mehr aufzupassen indem man das "TargetWindow", also ein Handle von einem Fenster, mit liefern muss damit hoffentlich alles gut funktioniert.
Falls Du Dich fragst warum jeder VK_KeyCode zweimal gesendet wird in diesem Schnippsel, beim ersten mal wird entsprechende Taste gedrückt und beim zweiten mal wieder losgelassen.

In version 1 die ich hier reingestellt hatte, da gab es noch keine Prüfungen weswegen himitsu was schrieb und ich es überarbeitet hatte.
Gruß vom KodeZwerg
  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 20:41 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 by Thomas Breitkreuz