Главная страница
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.017 c
1-25404
webpauk
2003-12-24 16:10
2004.01.09
Эффекты Winampa


3-25182
r9000
2003-12-10 07:30
2004.01.09
Можно ли поместить данные из Blob -поля в WORD или EXCEL?


1-25372
-=DeMoH=-
2003-12-23 15:12
2004.01.09
Кто знаком с мат.статистикой?


3-25203
loki128
2003-12-12 16:46
2004.01.09
Считать значения полей записи


7-25619
dolphin1
2003-10-26 11:32
2004.01.09
не могу поставить ловушку