AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [D2009] MainMenu Hotkey/Unterstriche immer Sichtbar
Thema durchsuchen
Ansicht
Themen-Optionen

[D2009] MainMenu Hotkey/Unterstriche immer Sichtbar

Ein Thema von KodeZwerg · begonnen am 26. Aug 2018 · letzter Beitrag vom 28. Aug 2018
 
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#8

AW: [D2009] MainMenu Hotkey/Unterstriche immer Sichtbar

  Alt 26. Aug 2018, 23:21
Zustimmung für die Ansicht, sich ans OS zu halten. Dennoch ein möglicher Lösungsvorschlag, weil ich da bei Delphi 5 eingreifen musste, weil sich damit geschriebene Programme eben nicht an die Systemeinstellung halten/hielten und die Dinger nie anzeigten (auch wenn die Systemeinstellung aktiviert war, wie es bei mir immer der Fall ist).

Lange Rede und dennoch ein Sinn. Der Eingriff muss im TMenuItem.AdvancedDrawItem erfolgen:
Delphi-Quellcode:
type TMyMenuItem = class(TMenuItem)
  protected
     procedure AdvancedDrawItem(ACanvas: TCanvas; ARect: TRect;
      State: TOwnerDrawState; TopLevel: Boolean); override;
  end;

implementation

var
  ShowAccel : BOOL;

procedure TMyMenuItem.AdvancedDrawItem(ACanvas: TCanvas; ARect: TRect;
      State: TOwnerDrawState; TopLevel: Boolean);
begin
    if ShowAccel then
        State:= State - [odNoAccel];
    inherited;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
    ShowAccel:= True; // if SystemParametersInfo fails, assume that accelerators should be shown
    SystemParametersInfo(SPI_GETMENUUNDERLINES, 0, @ShowAccel, 0);
end;
Das Belegen der Variable ShowAccel kann z.B. im FormCreate/FormShow oder sowas erfolgen wie in obigem Beispiel, oder vielleicht eignet sich dafür auch der initialization -Abschnitt (hab ich nicht getestet).

Der obige Code umgeht (behebt) wie gesagt nur den Bug bei Delphi 5. Um die Accelerators dauerhaft anzuzeigen, müsste das Flag odNoAccel einfach pauschal entfernt werden aus dem State (und man könnte sich dann auch die Variable ShowAccel sparen). Ich rate dennoch wie himitsu davon ab, Systemeinstellungen zu überstimmen; allenfalls als Option im Programm wäre das (für mich) akzeptabel.

Grüße
Dalai
  Mit Zitat antworten Zitat
 


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 04:55 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