AGB  ·  Datenschutz  ·  Impressum  







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

TMenuItem.Tag

Ein Thema von DerMondistunsereSonne · begonnen am 27. Mär 2025 · letzter Beitrag vom 28. Mär 2025
Antwort Antwort
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
47 Beiträge
 
Delphi 12 Athens
 
#1

TMenuItem.Tag

  Alt 27. Mär 2025, 10:56
Delphi-Version: 5
Moin,

ich durchlaufe alle Einträge eines Menüs und möchte je nach Tag (0,1,2) darauf reagieren. Das klappt allerdings nicht, obwohl mir Falsch angezeigt wird, so dass ich nun auf einen Namensvergleich gehe, der funktioniert. Jemand eine Idee?

Delphi-Quellcode:
for itm in MainMenu1.Items do
begin
   itm.Enabled := not (itm.Tag = NativeInt(0));
   // Keine Ahnung warum das nicht funktioniert
//         if itm.Tag = NativeInt(1) then;
   if not ((itm.Name = 'xxx') or (itm.Name = 'yyy')) then
   begin
      ShowMessage(itm.Name + ' ' + IntToStr(itm.Tag) + ' ' + BoolToStr((itm.Tag = NativeInt(1))));
      for i := 0 to itm.Count -1 do
      begin
         if itm.Items[i].Tag = NativeInt(0) then
         begin
            itm.Items[i].Enabled := False;
         end else begin
            itm.Items[i].Enabled := True;
         end;
      end;
   end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

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

AW: TMenuItem.Tag

  Alt 27. Mär 2025, 11:51
Was heißt denn "klappt nicht"? Ich hab mir auf die Schnelle ein Formular mit drei MainMenu-Einträgen mit Tags 0 bis 2 zusammengeklickt und kriege dann mit deinem Code (ohne die ganzen NativeInt-Casts) genau eine MessageBox angezeigt.
Uli Gerhardt
  Mit Zitat antworten Zitat
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
47 Beiträge
 
Delphi 12 Athens
 
#3

AW: TMenuItem.Tag

  Alt 27. Mär 2025, 12:17
Ich bekomme leider alle Items angezeigt, obwohl itm.Tag = NativeInt(1) false ergibt. Und das verstehe ich nicht, selbst mit STRG+F7 itm.Tag = NativeInt(1) kommt ein false, aber der Menueintrag wird totzdem verarbeitet, was bei 2, aber nicht passieren soll.
  Mit Zitat antworten Zitat
Stolle58

Registriert seit: 4. Aug 2023
Ort: Frankfurt
32 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TMenuItem.Tag

  Alt 27. Mär 2025, 12:20
Ich weis zwar nicht genau mit welcher Version du arbeitest.
im Profile heißt es Delphi 12 Athens, im Text Delphi 5.

Delphi 5 kennt kein NativeInt.

tag = 1

sollte genügen.
Reinhold
  Mit Zitat antworten Zitat
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
47 Beiträge
 
Delphi 12 Athens
 
#5

AW: TMenuItem.Tag

  Alt 27. Mär 2025, 12:35
D12 ist richtig, weder mit NativeInt noch Int (weil Win32-Anwendung) werden meine Einträge übersprungen...lassen wir es beim Orakel, ich hab ja eine Lösung.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
730 Beiträge
 
Delphi 12 Athens
 
#6

AW: TMenuItem.Tag

  Alt 27. Mär 2025, 13:15
Zitat:
if itm.Tag = NativeInt(1) then;
Probiers mal ohne das ;

Delphi-Quellcode:
if itm.Tag = NativeInt(1) then; // Das ; beendet den (leeren) Befehl. Wenn Tag = 1 ist, wird nichts ausgeführt, ansonsten auch nichts
begin
  // Das hier wird in jedem Fall ausgeführt
  ShowMessage
  ...
end;
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
383 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: TMenuItem.Tag

  Alt 27. Mär 2025, 13:17
Ich denke, Du vertust Dich mit dem "richtigen" Zugriff auf die Menuitems

Hier ein Formular mit einem simplen Menu
Delphi-Quellcode:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 441
  ClientWidth = 624
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -12
  Font.Name = 'Segoe UI'
  Font.Style = []
  Menu = Mainmenu1
  TextHeight = 15
  object Button1: TButton
    Left = 48
    Top = 48
    Width = 241
    Height = 25
    Caption = 'EnabledDiableButton'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Mainmenu1: TMainMenu
    Left = 304
    Top = 224
    object Enabled11: TMenuItem
      Caption = 'Enabled/Disabled'
      object Enables21: TMenuItem
        Caption = 'Enabled'
      end
      object Enabled1: TMenuItem
        Caption = 'Enabled'
      end
      object Disabled1: TMenuItem
        Tag = 1
        Caption = 'Disabled'
      end
    end
  end
end
Und hier der Code mit einem Button, der alle Menüenträge des ersten "Hauptmenüeintrages" durchiteriert und dann asublendet, wenn das Tag 1 asl Wert hat.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus;

type
  TForm1 = class(TForm)
    Mainmenu1: TMainMenu;
    Enabled11: TMenuItem;
    Enables21: TMenuItem;
    Enabled1: TMenuItem;
    Disabled1: TMenuItem;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    i : Integer;
begin

      for i := 0 to MainMenu1.items[0].Count -1 do
      begin
        MainMenu1.Items[0][i].Visible := (Mainmenu1.Items[0][i].Tag = 0);
      end;
end;

end.
  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 21:51 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