Delphi-PRAXiS
Seite 1 von 2  1 2      

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 wird nicht angezeigt unter componentes? (https://www.delphipraxis.net/58271-tmenuitem-wird-nicht-angezeigt-unter-componentes.html)

mimi 4. Dez 2005 16:01


TMenuItem wird nicht angezeigt unter componentes?
 
Hallo,
warum wird bei folgenden code Tmenuitem übersprungen:
Delphi-Quellcode:
 for i:=0 to ComponentCount-1 do begin
      c:=Components[i];
      if (c is TControl) or (c is TMenuItem) then begin
ich möchte gerne alle komponenten durchlaufen die bestimmte eigenschaften aufweisen und Tmenuitem zählt dazu.... es gehörht zu TMainmenu *G*

mirage228 4. Dez 2005 16:04

Re: TMenuItem wird nicht angezeigt unter componentes?
 
Hi,

vielleicht befindet es sich ja im Delphi-Referenz durchsuchenControls array-property des Forms... Schau mal nach.
Ansonsten musst Du bei einem TMainMenu (falls Du ein solches bei Controls[] kriegst) dieses manuell absuchen.
Was willst Du denn genau machen?

mfG
mirage228

mimi 10. Dez 2005 17:44

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....

Lannes 10. Dez 2005 18:08

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;

mimi 10. Dez 2005 18:20

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:

Ich glaube das der Code ganz gut an Deine Anforderungen angepasst werden kann.
ich wüste jetzt nicht genau wie :(

xaromz 10. Dez 2005 18:24

Re: TMenuItem wird nicht angezeigt unter componentes?
 
Hallo,

geh doch einfach rekursiv alle Komponenten Deiner Form durch:
Delphi-Quellcode:
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;
Gruß
xaromz

Lannes 10. Dez 2005 21:04

Re: TMenuItem wird nicht angezeigt unter componentes?
 
Hallo,
@xaromz:
die Menü-Items sind nicht in Components enthalten, ich wiederhol mich mal :?
Zitat:

Zitat von Lannes
...ab TmainMenu (in Components enthalten) musst Du mit .Items weitersuchen.

@mimi:

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;

xaromz 10. Dez 2005 21:09

Re: TMenuItem wird nicht angezeigt unter componentes?
 
Hallo,
Zitat:

Zitat von Lannes
Hallo,
@xaromz:
die Menü-Items sind nicht in Components enthalten, ich wiederhol mich mal :?
Zitat:

Zitat von Lannes
...ab TmainMenu (in Components enthalten) musst Du mit .Items weitersuchen.


Schöne Vermutung, nur warum funktioniert mein Code dann? :gruebel:

Gruß
xaromz

Lannes 10. Dez 2005 23:08

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:

mimi 11. Dez 2005 06:54

Re: TMenuItem wird nicht angezeigt unter componentes?
 
@xaromz
genau das habe ich schon versucht:
Delphi-Quellcode:
if (aComponent is TControl) or (aComponent is TMenuItem) then begin
aber leider ohne erfolg.

@Lannes
das mit
Delphi-Quellcode:
if c.ClassParent
kann ich mal versuchen vielen dank.

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 13:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz