TMenu - tworzenie menu z kodu...

0

cześć,
otóż muszę przy użyciu klasy TMenu zbudować złożone
menu w aplikacji. wszytko byłoby OK, jednak możliwości
to ta klasa jakiś świetnych nie ma.
tworzenie samego menu i Itemów dla niego to raczej nie problem,
gorzej jeśli w tym menu są wymagane submenu.
z poziomu IDE pod prawym klawiszem na Itemie mam "Create Submenu"
ale w tej chwili nie wiem, jak to zrobić z poziomu kodu.

zerknijcie np. na taki fragment:

...
var
  mnu,mnus:TMenuItem;
...
begin
  mnu := tmenuitem.Create(advmainmenu1);
  mnu.Caption := 'New Menu';

  mnus := tmenuitem.Create(advmainmenu1);
  mnus.Caption := 'New Sub Menu';

  advmainmenu1.BeginUpdate;
  advmainmenu1.items.Add(mnu);
  advmainmenu1.Items[4].Add(mnus);
  advmainmenu1.EndUpdate;

advmainmenu1 pochodzi z komponentów TMS,w tym miejscu musi być
TComponent po prostu, także na to nie zwracajcie uwagi...
to tylko przykładowy kod, ale proszę np. o pomoc w tworzeniu Submenu

0

Nie jestem pewien, czy Ci o to chodziło, ale...

var
  mnu,mnus:TMenuItem;
begin
  mnu := tmenuitem.Create(advmainmenu1);
  mnu.Caption := 'New Menu';

  mnus := tmenuitem.Create(advmainmenu1);
  mnus.Caption := 'New Sub Menu';

  advmainmenu1.items.Add(mnu);
  advmainmenu1.Items[4].Add(mnus);

  mnus := tmenuitem.Create(advmainmenu1);
  mnus.Caption := 'New Sub Sub Menu';

  advmainmenu1.Items[4].Items[0].Add(mnus);
0

cześć,
TAK, o to właśnie chodziło, super,dzięki !

a reasumując: widzę że wszystko opiera się na indeksach Itemów?
i że to chyba jedyna metoda?

pytam, bo dotychczas pracowałem z TBXami i tam było więcej możliwości,
po prostu tam jak stworzyłem Itema, to do niego dopinałem submenu,
zresztą zobacz fragment funkcji:

  ...
  TMySubMenu = class ( TTBXSubmenuItem ) ;
  TMyMenu = class ( TTBXToolbar ) ;
  
  ...
  submenu         := TMySubMenu.Create( FGUI.GUIOwner ) ;
  submenu.Name    := _name ;
  submenu.Caption := _caption ;
  Items.Add( submenu ) ;
  ...
  Result := submenu ; 

(Items - to stanardowo Itemy w menu)
i potem do submenu (bo to jest Result) dodawałem Itemy,
tak jest lepiej generalnie, bo nie muszę się martwić o indeksy
a widzę że w TMenu niestety cały czas będzie

...
xxx.Items[n].Add(mnus);
xxx.Items[n].Items[n].Add(mnus);
...

więc będę musiał jakoś logicznie zarządzać tymi n

0

:]
Nie musisz pamiętać indeksów:

var
  RootItem, Item, SubItem: TMenuItem;
begin
  RootItem := mm.CreateMenuItem;
  RootItem.Caption := '1';
  mm.Items.Add( RootItem );
  Item := mm.CreateMenuItem;
  Item.Caption := '2';
  RootItem.Add(Item);
  SubItem := mm.CreateMenuItem;
  SubItem.Caption := '3';
  Item.Add(SubItem);
end;

Oczywiście "mm" to MainMenu.

0

cześć,
hm, faktycznie, można i tak, wielkie dzięki
a czy mieliście doświadczenia np. z przejściem z menu/toolbars
komponentów TBX na komponenty TMS?
pytam, bo TMSy są oparte (jeśli chodzi o menu) na TMenu
i na początku się zmartwiłem, ale jak widzę to chyba nie będzie tak źle.

napiszcie proszę.

0

W firmie mamy komponenty TMS-a, całą paczkę, ze źródłami. Nie wiem, czy jest jakaś mordercza różnica w działaniu w porównaniu do darmowego Jedi, ale wiem jedno: są wyjątkowo niechlujnie napisane, nazewnictwo unitów bez ładu i składu, podczas kompilacji jakieś warningi o nieużywanych zmiennych etc etc. Do kodu zaglądam jak muszę, bo rozpacz ogarnia jak się go widzi. Nawet nie jest przyzwoicie przeformatowany. Straszliwa amatorszczyzna. Gdyby to ode mnie zależało - w życiu bym tego badziewia nie kupił :)
Jedi ma swoje JvMainMenu i JvPopupMenu, nie miałem z nimi żadnego problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1