Tmainmenu

Тема в разделе "Delphi - Компоненты", создана пользователем Onegin, 16 авг 2006.

Статус темы:
Закрыта.
  1. Onegin

    Onegin Гость

    Здравстуйте, уважаемые специалисты!
    Проблема вот в чем:
    Нужно добавить в главное меню подменю(SubMenu) програмно, причем и Имена из файла.
    Вот структура меню:
    File Edit View Form
    var
    const - [SubMenu]
    name
    Вот как я делал:

    Var
    VarFN : TStringList;
    NewItem : TMenuItem;
    i : integer;
    begin
    VarFN:=TStringList.Create;
    VarFN.LoadFromFile('D:\var.txt');
    for i:=0 to VarFN.Count-1 do
    begin
    NewItem.Create(Self);
    NewItem.Caption:=VarFN.Strings;
    mMenu.Items[3][1].Add(NewItem);
    end;
    VarFN.Free;
    end;

    Но выдает ошибку.
    Помогите, пожалуйста
     
  2. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    Написать какую ошибку Вы посчитали лишим?
     
  3. Onegin

    Onegin Гость

    Извините.
    Вернее не ошибку а програмное перерывание,
    что - то типа: нет доступа к адресу памяти FFFF777.
     
  4. zubr

    zubr Гость

    Проблема в том, что ты пытаешься работать с еще не созданным объектом. Вместо NewItem.Create(Self); сделай NewItem :=TMenuItem.Create(Self);
     
  5. Onegin

    Onegin Гость

    Исправил, но не помогло.
    Нашел другой способ:
    Var
    VarFN : TStringList;
    NewItems : array [1..20] of TMenuItem;
    i : integer;
    begin
    fmVar.ShowModal;
    VarFN:=TStringList.Create;
    VarFN.LoadFromFile('D:\var.txt');
    for i:=0 to VarFN.Count-1 do
    begin
    NewItems:=NewItem(VarFN.Strings,0,False,True,nil,0,'');
    end;
    mMenu.Items[3][1].Add(NewItems);
    VarFN.Free;
    end;

    Но появилась новая проблема:
    Как сделать так что бы количество строк в VarFN совпадало с количеством итемов масива, как обьявить в таком случае масив?
     
  6. zubr

    zubr Гость

    Код (Text):
    var
    NewItems:array of TMenuItem;
    begin
    ...........
    VarFN:=TStringList.Create;
    VarFN.LoadFromFile('D:\var.txt');
    SetLength(NewItems, VarFN.Count);
    ............
    end;
     
  7. Onegin

    Onegin Гость

    Спасибо за помощь, но все еще выскакивает програмное перерыванние.

    Var
    i:integer;
    NewItems:array of TMenuItem;
    VarFN:TStrings;
    begin
    VarFN:=TStringList.Create;
    VarFN.LoadFromFile('d:\var.txt');
    SetLength(NewItems,VarFN.Count-1);
    for i:=0 to VarFN.Count-1 do
    begin
    NewItems:=NewItem(VarFN.Strings,0,False,True,nil,0,'');
    end;
    mMenu.Items[3][1].Add(NewItems);

    end;
     
  8. zubr

    zubr Гость

    Код (Text):
    unit Unit1;

    interface

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

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

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    NewItem:TMenuItem;
    spisok:TStringList;
    i:Integer;
    begin
    MyMainMenu:=TMainMenu.Create(Self);
    spisok:=TStringList.Create;
    try
    For i:=1 to 10 do
    spisok.Add('menu'+IntToStr(i));
    NewItem:=TMenuItem.Create(MyMainMenu);
    NewItem.Caption:='Zagolovok';
    MyMainMenu.Items.Add(NewItem);
    For i:=0 to spisok.Count-1 do
    begin
    NewItem:=TMenuItem.Create(MyMainMenu);
    NewItem.Caption:=spisok.Strings[i];
    MyMainMenu.Items[0].Add(NewItem);
    end;
    finally
    spisok.Free;
    end;
    end;

    end.
     
  9. Onegin

    Onegin Гость

    Спасибо, все работает!
    А могу я скопировать одну ветвь главного меню в контекстное?. Я пробовал вот так:

    pmConst.Items.Add(mMenu.Items[3][1][36]);

    pmConst-контекстое меню
    mMenu-главное меню
     
  10. zubr

    zubr Гость

    Что то типа этого:
    Код (Text):
    procedure TForm1.Button2Click(Sender: TObject);
    var
    NewItem:TMenuItem;
    begin
    NewItem:=TMenuItem.Create(Self);
    NewItem.Caption:=mMenu.Items[3][1][36].Caption;
    pmConst.Items.Add(NewItem);
    end;
     
  11. Onegin

    Onegin Гость

    Огромное спасибо!
     
Статус темы:
Закрыта.

Поделиться этой страницей