![]() |
TMenuItem wird nicht angezeigt unter componentes?
Hallo,
warum wird bei folgenden code Tmenuitem übersprungen:
Delphi-Quellcode:
ich möchte gerne alle komponenten durchlaufen die bestimmte eigenschaften aufweisen und Tmenuitem zählt dazu.... es gehörht zu TMainmenu *G*
for i:=0 to ComponentCount-1 do begin
c:=Components[i]; if (c is TControl) or (c is TMenuItem) then begin |
Re: TMenuItem wird nicht angezeigt unter componentes?
Hi,
vielleicht befindet es sich ja im ![]() Ansonsten musst Du bei einem TMainMenu (falls Du ein solches bei Controls[] kriegst) dieses manuell absuchen. Was willst Du denn genau machen? mfG mirage228 |
Re: TMenuItem wird nicht angezeigt unter componentes?
ich brauche es für eine farbänderung:
d.h. der user soll das ausehen der Komponenten verändern können(aber nur Schriftfarbe und TFont) und das klappt auch schon ganz gut bei allen andren komponenten nur die TMenuItems spielen da nicht mit. ich wollte die möglichkeiten anbieten mein Programm in mehren sprachen zu benuzten mit Sprachdateien.... |
Re: TMenuItem wird nicht angezeigt unter componentes?
Hallo,
ab TmainMenu (in Components enthalten) musst Du mit .Items weitersuchen. Der folgende Code durchläuft rekursiv alle Items incl. Subitems und baut sie In ein treeView ein. Ich glaube das der Code ganz gut an Deine Anforderungen angepasst werden kann.
Delphi-Quellcode:
procedure XForm.GetMenuItems(aMenuItem: TMenuItem;aNode2: TTreeNode);
var z : Integer; aItem : TMenuItem; aNode : TTreeNode; s : string; begin for z := 0 to aMenuItem.Count-1 do begin aItem := aMenuItem.Items[z]; aNode := ANode2; s := aItem.Name; aNode := TVFormTree.items.Addchild(aNode,s); if aItem.Count > 0 then GetMenuItems(aItem,aNode);//rekursiv end;//Ende for z end; |
Re: TMenuItem wird nicht angezeigt unter componentes?
@Lannes
das währe auch eine idee. Vielen dank. Wenn ich dein code richtig verstehe durchläuft er das menu und speichert es in eine TTreeView, richtig ? Zitat:
|
Re: TMenuItem wird nicht angezeigt unter componentes?
Hallo,
geh doch einfach rekursiv alle Komponenten Deiner Form durch:
Delphi-Quellcode:
Gruß
procedure TForm1.AlleKomponentendurchlaufen;
procedure Walk(aComponent: TComponent); var C: Integer; begin if (aComponent is TControl) or (aComponent is TMenuItem) then begin // hier Dein Code end; for C := 0 to aComponent.ComponentCount - 1 do Walk(aComponent.Components[C]); end; begin Walk(Self); end; xaromz |
Re: TMenuItem wird nicht angezeigt unter componentes?
Hallo,
@xaromz: die Menü-Items sind nicht in Components enthalten, ich wiederhol mich mal :? Zitat:
hab es mal etwas umgebaut, jede caption wird jetzt um '...' erweitert:
Delphi-Quellcode:
procedure SetMenuItemsPPP(aMenuItem: TMenuItem);
var z : Integer; aItem : TMenuItem; begin for z := 0 to aMenuItem.Count-1 do begin aItem := aMenuItem.Items[z]; aItem.Caption := aItem.Caption+' ...'; if aItem.Count > 0 then SetMenuItemsPPP(aItem);//rekursiv end; end; procedure TForm1.Button1Click(Sender: TObject); var i,z : Integer; c : TComponent; begin for i:=0 to ComponentCount-1 do begin c:=Components[i]; if c.ClassParent = TMenu then //alle PopUp- und MainMenüs //if c is TMainMenu then //if c is TPopUpMenu then for z := 0 to TMenu(c).Items.Count-1 do begin TMenu(c).Items[z].Caption := TMenu(c).Items[z].Caption+' ...'; SetMenuItemsPPP(TMenu(c).Items[z]); end; end; end; |
Re: TMenuItem wird nicht angezeigt unter componentes?
Hallo,
Zitat:
Gruß xaromz |
Re: TMenuItem wird nicht angezeigt unter componentes?
Hallo,
sorry, hast recht, ist doch enthalten :duck: Mein Code ist schon etwas älter, glaube wegen fehlendem Parent habe ich mich damals auf das Auslesen der Items verlegt. :? Aber ist doch schön, das mehrere Wege zum Ziel führen. :wink: |
Re: TMenuItem wird nicht angezeigt unter componentes?
@xaromz
genau das habe ich schon versucht:
Delphi-Quellcode:
aber leider ohne erfolg.
if (aComponent is TControl) or (aComponent is TMenuItem) then begin
@Lannes das mit
Delphi-Quellcode:
kann ich mal versuchen vielen dank.
if c.ClassParent
aber ich verstehe nicht warum das TMenuitem nicht bei einem normalen komponenten durchlauf gefunden wird . Weil TMenuItem ist doch auch von TControl oder etwa nicht ??? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 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