Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TMenuItem: Checked wird nicht dargestellt (https://www.delphipraxis.net/133188-tmenuitem-checked-wird-nicht-dargestellt.html)

blauweiss 27. Apr 2009 16:19


TMenuItem: Checked wird nicht dargestellt
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo liebe Leute,

ich bin vor einigen Tagen testweise umgestiegen von Delphi5 auf BDS2006.
Neben einigen (gelösten) Phänomenen habe jetzt ich diesen Unterschied in meinem Programm:

In meinem TMainMenu verwende ich eine ImageList.
Ein MenuItem (mit vergebenem ImageIndex), das ich zur Laufzeit in Delphi5 auf Checked := true setze, sieht "eingedrückt" aus. Kein Häkchen oder Bommel !! So will ich es auch haben.
In BDS2006 wird dieses MenuItem aber nicht mehr "eingedrückt" dargestellt ! Es ist aber Checked=true, wie im Debugger zu sehen.

GroupIndex ist gesetzt auf eine Zahl, RadioItem ist true.


hat jemand einen Tip ? 8)

blauweiss


hab mal 2 Bilder angehängt

Mithrandir 27. Apr 2009 16:27

Re: TMenuItem: Checked wird nicht dargestellt
 
Hast du vielleicht mal n Bild, damit man sich das vorstellen kann? Wie hast du diese "eingedrückte" Ansicht hinbekommen? Kein Häkchen ist übrigens schonmal nicht Windows-Standard und somit schonmal per se nicht gern gesehen, wenn ich dich richtig verstanden habe... ;)

Andreas L. 27. Apr 2009 16:47

Re: TMenuItem: Checked wird nicht dargestellt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Daniel G
Hast du vielleicht mal n Bild, damit man sich das vorstellen kann? Wie hast du diese "eingedrückte" Ansicht hinbekommen? Kein Häkchen ist übrigens schonmal nicht Windows-Standard und somit schonmal per se nicht gern gesehen, wenn ich dich richtig verstanden habe... ;)

Wo willst du denn den Haken platzieren wenn an der üblichen Position ein Bild ist? Ne, das passt schon so, ist Standard-Windows-Stil. Unter Delphi 2006 funktioniert das aber tatsächlich nicht. Ich verwende in meinen Anwendungen Toolbar 2000 + TBX, da gehts wunderbar.

blauweiss 27. Apr 2009 17:02

Re: TMenuItem: Checked wird nicht dargestellt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

danke für eure Antworten !
Schade, dann ist das wohl mit BDS2006 nicht mehr einfach möglich.

@DanielG: hab die "eingedrückte" Ansicht ganz einfach hinbekommen, indem ich in Delphi5 Checked := true gesetzt hatte. Auch wenn's nicht Windows-Standard ist, ich mag gern Menuepunkte mit Bildern, und die "eingedrückte Ansicht" hat mir gut gefallen.

Ok, dann bleibt mir wohl nix anderes übrig, als keine Images (siehe Bild). Dann gibt's nur Häkchen zu sehen.

Oder ich hole mir die Toolbar2000 / TBX Komponente vom Andreas, danke für den Tip !

blauweiss

Mithrandir 27. Apr 2009 17:22

Re: TMenuItem: Checked wird nicht dargestellt
 
Ach solche Bilder... :oops: Hatte irgendwie was anderes vor Augen... :stupid:

Und wenn du den Menüpunkt komplett selbst zeichnest? Hab jetzt gerade kein BDS am Start. OnDrawXYZ o.ä.?

blauweiss 27. Apr 2009 17:36

Re: TMenuItem: Checked wird nicht dargestellt
 
Hi Daniel G,

kann den Menuepunkt auch selber zeichnen, hatte halt gehofft daß es mit irgendeiner Property vom TMainMenu oder TMenuItem noch einfacher hinzubekommen ist, daß es wieder so aussieht wie mit Delphi5...

Wenn ich nix finde, dann beisse ich lieber in den sauren Apfel und laß die Images ganz weg. Dann gibt's wenigstens Häkchen zum anschauen. Find's aber etwas schwach vom BDS2006, daß es da einen kleinen Rückschritt zum alten Delphi5 zu geben scheint.


blauweiss

Andreas L. 27. Apr 2009 17:55

Re: TMenuItem: Checked wird nicht dargestellt
 
Zitat:

Zitat von blauweiss
Find's aber etwas schwach vom BDS2006, daß es da einen kleinen Rückschritt zum alten Delphi5 zu geben scheint.

Denke mal eher das es sich um einen Bug handelt. Kannst ja mal in der Quality Central suchen, hat bestimmt schon jemand anderes bemerkt.
http://qc.embarcadero.com/wc/qcmain.aspx

Garfield 28. Apr 2009 07:34

Re: TMenuItem: Checked wird nicht dargestellt
 
Zitat:

Zitat von blauweiss
kann den Menuepunkt auch selber zeichnen, hatte halt gehofft daß es mit irgendeiner Property vom TMainMenu oder TMenuItem noch einfacher hinzubekommen ist, daß es wieder so aussieht wie mit Delphi5...

Der Haken wird nur angezeigt, wenn dem TMenuItem kein Bild zugeordnet ist. Wenn man das TMainMenu über Images mit einer TImageList verbindet, kann man bei den TMenuItem mit ImageIndex ein Bild aus der TImageList zuweisen. Den ImageIndex kann man auch zur Laufzeit ändern. Ob man bei TMenuItem über Bitmap mehrere Bilder zuweisen kann, die dann eigenschaftenabhängig angezeigt werden, habe ich noch nicht ausprobiert.

blauweiss 28. Apr 2009 08:53

Re: TMenuItem: Checked wird nicht dargestellt
 
Hi Garfield,

danke für deinen Beitrag ! Hab mal deine Idee probiert mit ImageIndex auf -1 und direktem Bitmap. Darin 2 Bilder nebeneinander, die rechte Hälfte "eingedrückt" gezeichnet in der vagen Hoffnung, daß das rechte dann eigenschaftenabhängig angezeigt wird, wenn Checked = true. Leider ohne Erfolg, da fehlt auch die Property NumGlyphs wie bei z.B. BitButtons. Ist verständlich, woher soll das TMenuItem auch wissen, wieviele Einzelbilder im Bitmap drin sind...

Ok, zusammenfassend kann man sagen:


MenuItem.Checked := true bewirkt:

in Delphi5:
a) ImageIndex = -1 -> Häkchen
b) ImageIndex = Index in ImageList -> Bild wird "eingedrückt" gezeichnet

in BDS 2006:
a) ImageIndex = -1 -> Häkchen
b) ImageIndex = Index in ImageList -> es passiert gar nix, schaut aus wie ungecheckt


Ich denke auch Bug 8)

blauweiss

Garfield 28. Apr 2009 09:54

Re: TMenuItem: Checked wird nicht dargestellt
 
Zitat:

Zitat von blauweiss
Ist verständlich, woher soll das TMenuItem auch wissen, wieviele Einzelbilder im Bitmap drin sind...

Aus der Prüfung von Bedingungen. TSpeedButton geht beispielsweise von quadratischen Bildchen aus. Ergibt sich bei der Division von Breite durch Höhe kein Rest, ist das Ergebnis gleich NumGlyphs, solange es nicht mehr als vier sind. Sonst ist NumGlyphs immer eins und müsste angegeben werden.

Zitat:

Zitat von blauweiss
Ich denke auch Bug 8)

Kann, muss aber nicht sein. Wenn ja, ist er schon länger drin, denn in D7PE ist es genauso wie in TD. Du kannst Dir auch die beiden Versionen der Unit Menus.pas nehmen, sie vergleichen und die neue entsprechend erweitern bzw gegen die alte austauschen.

blauweiss 28. Apr 2009 11:11

Re: TMenuItem: Checked wird nicht dargestellt
 
Hi Garfield,

ok, ich habs jetzt so gemacht wie du vorgeschlagen hast: In der Menus.pas in der Methode AdvancedDrawItem hat Borland in der BDS 2006 Version (oder davor, egal) eine boolsche Variable WinXP eingeführt:

Delphi-Quellcode:
          { Draw background pattern brush if selected }
          if Checked and not WinXP then
"and not WinXP" ausgeklammert, Menus.pas neu kompiliert und es tut was ich will ! :angel2:

Danke an euch alle !

blauweiss

p.s. @Mods: wie kann ich offene Frage als beantwortet markieren ? :oops:

[edit] habs gefunden (offene Frage als beantwortet), Tomaten auf den Augen.... :dp: [/edit]

Mithrandir 28. Apr 2009 11:15

Re: TMenuItem: Checked wird nicht dargestellt
 
Zitat:

Zitat von blauweiss
p.s. @Mods: wie kann ich offene Frage als beantwortet markieren ? :oops:

Kein-Mod: Das kannst du nur, wenn du die Frage am Anfang auch als "Offen" markiert hast. Haste nicht. Also alles so lassen, wie es ist... :stupid:

Garfield 28. Apr 2009 11:21

Re: TMenuItem: Checked wird nicht dargestellt
 
Zitat:

Zitat von blauweiss
"and not WinXP" ausgeklammert, Menus.pas neu kompiliert und es tut was ich will ! :angel2:

Das WinXP ist mir auch schon aufgefallen. Allerdings dachte ich das wäre wegen der Themes... :gruebel:

Schön, dass Dein Problem gelöst ist. :thumb:

Zitat:

Zitat von Daniel G
Haste nicht. Also alles so lassen, wie es ist... :stupid:

Vor ein paar Minuten stand oben noch "Offene von blauweiss".

Mithrandir 28. Apr 2009 11:25

Re: TMenuItem: Checked wird nicht dargestellt
 
Zitat:

Zitat von Garfield
Zitat:

Zitat von Daniel G
Haste nicht. Also alles so lassen, wie es ist... :stupid:

Vor ein paar Minuten stand oben noch "Offene von blauweiss".

Ach Mensch... :oops:

Geronimo 16. Jan 2021 14:37

AW: TMenuItem: Checked wird nicht dargestellt
 
Das Thema ist zwar schon alt, aber vielleicht kann es ja jemand gebrauchen.
Mein Ansatz wäre den Checked-Haken in der Caption nachzubilden.

Gruß
Geronimo

Code:
procedure TMenuItem.SetChecked(Value: Boolean);
begin
  //Orginal Code from VCL

  if FChecked then Caption := Caption + ' ✓'
  else
    Caption := StringReplace(Caption,' ✓','',[rfReplaceall]);
  end;
end;


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