• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Tmainmenu

  • Автор темы Onegin
  • Дата начала
Статус
Закрыто для дальнейших ответов.
O

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;

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

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Написать какую ошибку Вы посчитали лишим?
 
Z

zubr

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

Onegin

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

Исправил, но не помогло.
Нашел другой способ:
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 совпадало с количеством итемов масива, как обьявить в таком случае масив?
 
Z

zubr

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

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;
 
Z

zubr

Код:
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.
 
O

Onegin

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

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

pmConst-контекстое меню
mMenu-главное меню
 
Z

zubr

Что то типа этого:
Код:
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;
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!