AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Definierte Zugriffstasten werden nicht unterstrichen angezeigt
Thema durchsuchen
Ansicht
Themen-Optionen

Definierte Zugriffstasten werden nicht unterstrichen angezeigt

Ein Thema von gandalf100 · begonnen am 4. Feb 2013 · letzter Beitrag vom 18. Feb 2013
Antwort Antwort
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Definierte Zugriffstasten werden nicht unterstrichen angezeigt

  Alt 12. Feb 2013, 12:39
In dem Augenblick, in dem ich einem der Menüpunkte (hier Oeffnen) eine Bitmapgrafik zuordne verschwinden teilweise die Unterstreichungen. Das Zeichen „x“ sei der Platzhalter für die Grafik, die Punkte sollen Leerzeichen darstellen. Eine alternative Zuordnung einer TImageList und Auswahl über den ImageIndex zeigt exakt das identische Phänomen.Im ausgeführten Programm erscheint das Menü wie folgt:

Datei
x...Oeffnen
....Speichern

Die Unterstreichung beim „D“ bleibt erhalten aber bei „O“ und auch beim „S“ sind sie plötzlich verschwunden.
Was mache ich falsch ?
AFAIK machst du nix falsch, sondern die VCL. Die zeichnet schaltet nämlich bei Verwendung von Bitmaps auf Owner-Drawing um und versemmelt es dabei, den Text richtig (d.h. mit Unterstreichungen) zu malen.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#2

AW: Definierte Zugriffstasten werden nicht unterstrichen angezeigt

  Alt 12. Feb 2013, 13:40
Funktionieren denn die Shortcuts überhaupt? Also wenn die Bitmaps zugewiesen sind und die Unterstriche nicht gezeichnet werden, was passiert wenn du bei aufgeklapptem Menü "o" oder "s" drückst?
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
gandalf100

Registriert seit: 3. Nov 2011
9 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Definierte Zugriffstasten werden nicht unterstrichen angezeigt

  Alt 12. Feb 2013, 15:00
Wenn das Menü aufgeklappt ist funktionieren die Shortcuts einwandfrei. Bem Drücken von "O" oder "S" werden die hinterlegten Procedures sauber ausgeführt.

Noch etwas ist merkwürdig:
Wenn das Menü zugeklappt ist (nur Datei ist zu lesen) und ich drücke die ALT Taste, dann wird "Datei" mit einem Rahmen umgeben und wenn man dann das Menü mit der Maus öffnet, erscheinen plötzlich die unterstrichenen Buchstaben. Allerdings ist das nur ein temporäres Verhalten und funktioniert nur 1 mal. Beim erneuten Öffnen des Menüs ist wieder alles beim alten sprich: keine unterstrichenen Buchstaben; erneutes drücken von ALT und beim nächsten Öffnen sind die unterstrichenen Buchstaben wieder da.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

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

AW: Definierte Zugriffstasten werden nicht unterstrichen angezeigt

  Alt 12. Feb 2013, 15:05
Ich habe dieses Problem mit einem TPopupMenu ebenfalls gehabt und so gelöst:
Delphi-Quellcode:
type TMyMenuItem = class(TMenuItem)
  protected
     procedure AdvancedDrawItem(ACanvas: TCanvas; ARect: TRect;
      State: TOwnerDrawState; TopLevel: Boolean); override;
  end;

type
  TMainForm = class(TForm)
    procedure popupMenuMainPopup(Sender: TObject);
  end;

var
  ShowAccel : BOOL;


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


procedure TMainForm.popupMenuMainPopup(Sender: TObject);
begin
    SystemParametersInfo(SPI_GETMENUUNDERLINES, 0, @ShowAccel, 0);
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
    if Assigned(Self.PopupMenu) then
    begin
      for i:=0 to 8 do
          Self.PopupMenu.Items.Add(TMyMenuItem.Create(Self));
    end;
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Self.PopupMenu.Items.Clear;
end;
Ob der Code in der Form funktioniert, weiß ich nicht, weil ich das jetzt aus dem Projekt aus dem verlinkten Thread zusammenkopiert habe. Das Grundprinzip ist aber recht einfach: bei jedem Popup wird der Status der Einstellung ermittelt und in einer globalen Variable gespeichert. Ja, ich weiß, is böse , geht aber an der Stelle nicht anders, weil 2 Klassen auf diese Variable zugreifen können müssen, es sei denn, man manscht das alles zu einer Klasse zusammen, aber man kann's auch übertreiben. Beim Zeichnen eines MenuItems wird der entsprechende Status der Einstellung mit berücksichtigt, weil die VCL das nicht tut.

MfG Dalai

Geändert von Dalai (12. Feb 2013 um 15:21 Uhr) Grund: Methode FormClose ergänzt
  Mit Zitat antworten Zitat
gandalf100

Registriert seit: 3. Nov 2011
9 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Definierte Zugriffstasten werden nicht unterstrichen angezeigt

  Alt 18. Feb 2013, 13:27
Erst mal vielen Dank - ich werd mir das mal in Ruhe anschauen und versuchen das nachzubauen.
  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 00: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