![]() |
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 ??? |
Re: TMenuItem wird nicht angezeigt unter componentes?
jetzt habe ich doch deinen code verwendet: Lannes
aber leider rufe ich ihn anscheid falsch auf:
Delphi-Quellcode:
aber den code leicht geändert.....
procedure TForm1.GetMenuItems(aMenuItem: TMenuItem;aNode2: TTreeNode;TreeView:TTReeView);
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 := TreeView.items.Addchild(aNode,s); if aItem.Count > 0 then GetMenuItems(aItem,aNode,TreeView);//rekursiv end;//Ende for z end; procedure TForm1.BearbeitenClick(Sender: TObject); begin Form5.TreeView1.Items.Clear; GetMenuItems(Fovoriten1,nil,Form5.TreeView1); Form5.ShowModal; end; |
Re: TMenuItem wird nicht angezeigt unter componentes?
Hallo,
welche Fehlermeldung liegt vor, oder was läuft nicht? Eventuell > "Undefinierter Bezeichner: 'Fovoriten1'" ? Kann es sein, das dass Problem da begraben ist : 'Favoriten1' ungleich 'Fovoriten1' ? |
Re: TMenuItem wird nicht angezeigt unter componentes?
nein kein fehlermeldung das menu wird in der TreeView falsch angezeigt:
dort stetht bearbeiten programm alles punkte die im menu vorkommen aber ich möchte ja nur das Favoriten menu auslesen und nicht die ganzen menus ! |
Re: TMenuItem wird nicht angezeigt unter componentes?
Hallo,
kann eigentlich nicht sein, das wenn Favoriten als Variable beim Aufruf genutzt wird, die anderen Items mit in das TreeView eingebaut werden. Was passiert wenn z.B. Bearbeiten abgefragt wird? |
Re: TMenuItem wird nicht angezeigt unter componentes?
Das Problem ist das bearbeiten und Updaten Untermenupunkte von Favoriten menu sind und es werden in der TreeView angezeigt:
Bearbeiten(1 Eintrag) Updaten(2 Eintrag) und der Trennstrich(-) aber erst ab den Trennstrich geht es los.... Edit: ich rufe die funktion so auf:
Delphi-Quellcode:
habe den namen des menus geändert *G* geht aber immer noch nicht !
GetMenuItems(Style_favoriten,form5.TreeView1.Items.GetFirstNode,Form5.TreeView1);
|
Re: TMenuItem wird nicht angezeigt unter componentes?
Lösung gefunden
du hattes einen kleinen fehler bei dir eingebaut:
Delphi-Quellcode:
bei dir statt da .name und nicht .caption
s := aItem.Caption;
jetzt wird es richtig angezeigt allerding mit 3 punkten die nicht angezeigt werden soll und das änder ich per tag glaube ich! |
Re: TMenuItem wird nicht angezeigt unter componentes?
Delphi-Quellcode:
so sieht der code jetzt aus und er funktioniert so. alle einträge die nicht angezeigt werden sollen, müssen mit -2 gekennzeichnet werden. dann klappt es wunderbar.
procedure TForm1.GetMenuItems(aMenuItem: TMenuItem;aNode2: TTreeNode;TreeView:TTReeView);
var z : Integer; aItem : TMenuItem; aNode : TTreeNode; s : string; begin for z := 0 to aMenuItem.Count-1 do begin if aMenuItem.Items[z].Tag <> -2 then begin aItem := aMenuItem.Items[z]; aNode := ANode2; s := aItem.Caption; aNode := TreeView.items.Addchild(aNode,s); if aItem.Count > 0 then GetMenuItems(aItem,aNode,TreeView);//rekursiv end;//Ende for z end; end; Vielen dank für deine hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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