Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизДобавление в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c