Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

Добавление в MainMenu итема по имени другого итема. В чём ошибка?   Найти похожие ветки 

 
Кен ©   (2003-12-20 04:25) [0]

К итему ( пункту меню ) под именем m1 я хочу добавить новый пункт TESSST.

Код :

procedure TForm1.Button5Click(Sender: TObject);
var
Own, NewItem: TMenuItem;
begin

Own := TMenuItem.Create(Self);
try
Own.Find("m1");
NewItem := TMenuItem.Create(Self);
NewItem.Caption := "TEST";
NewItem.Name := "TESSST";
// m1.Add (NewItem);
Own.Add (NewItem);
except
Own.Free;
end;


Если делаю m1.Add (NewItem);, то добавляется, а если Own.Add (NewItem);, то нет. Почему ?


 
Нурик ©   (2003-12-20 06:34) [1]

Посмотрите хелп: TMenuItem, метод Add. там есть пример, может как-нибудь разберетесь, чуть измените код.


 
ЮЮ ©   (2003-12-20 06:50) [2]

>Own.Add (NewItem);, то нет.

Почему нет? Кто такой Own? Только что созданный TMenuItem и не помещённый ни в какое меню!
>Own.Find("m1");
И чего там искать, спрашивается? в только что созданном?

Может имелось в виду:

begin

Own := <Item из MainMenu, в котором ищем>.Find("m1");
// хотя чего искать? мы его и так должны знать
// в противном случае нужен тупой перебор итемов из меню
if Own = nil then begin
// не найден
// или созлем или выходим
exit;
end;
NewItem := TMenuItem.Create(Self);
try
NewItem.Caption := "TEST";
NewItem.Name := "TESSST";
Own.Add (NewItem);
except
NewItem.Free;
end;
end;


 
Кен ©   (2003-12-20 07:20) [3]


> ЮЮ © (20.12.03 06:50) [2]
> Own := <Item из MainMenu, в котором ищем>.Find("m1");
> // хотя чего искать? мы его и так должны знать
> // в противном случае нужен тупой перебор итемов из меню

Я хочу запихнуть в меню дерево. TreeView. Чтобы как Избранное в Интернет Эксплорере было. Поэтому мы ничего не знаем. Знаем только имена только что запихнутых в меню элементов (m0, m1, m2, m3 ... ).
Чтобы было дерево мне надо от m1 сделать веточку, и в неё ещё напихать итемов. И так далее.
Как такое сделать ?


 
ЮЮ ©   (2003-12-22 04:33) [4]

>И так далее. Как такое сделать ?

Рекурсивно обойти дерево. Например так:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus;

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
miFavorite: TMenuItem;
TreeView1: TTreeView;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
procedure TreeToMenu(TreeNode: TTreeNode; MenuItem: TMenuItem);
var
mi: TMenuItem;
node: TTreeNode;
begin
node := TreeNode;
While node <> nil do begin
mi := TMenuItem.Create(nil);
mi.Caption := node.Text;
MenuItem.Add(mi);
if node.Count > 0 then TreeToMenu(node.getFirstChild, mi);
node := node.getNextSibling;
end;
end;
var
i: integer;
begin
miFavorite.Clear;
TreeToMenu(TreeView1.Items[0], miFavorite);
end;

end.


 
Кен ©   (2003-12-23 01:06) [5]


> ЮЮ © (22.12.03 04:33) [4]

Красиво с рекурсией-то. Спасибо !



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
3-25230
bushmen
2003-12-10 18:00
2004.01.09
XML


1-25322
romeo
2003-12-22 00:28
2004.01.09
Как сделать, чтобы открытый ComboBox не закрывался при Click e?


4-25658
kryn
2003-11-06 10:48
2004.01.09
как при помощи DELPHI удалить папку вместе с файлами?


4-25670
igornov
2003-10-15 15:31
2004.01.09
Как определить момент когда пользователь сделал Log off?


4-25647
Юрий Ж.
2003-11-02 11:48
2004.01.09
BUTTON, STATIC и т.д.