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

Вниз

Динамические меню.   Найти похожие ветки 

 
Артёмка   (2009-02-14 03:32) [0]

Всем привет ()
Нужно написать программу , которая будет динамически создавать пункты меню , читая их из INI файла , и , выполнять какое либо действие ( с этим и проблемма , Требуется при нажании , узнать индекс менюшки  ) , вот как я это пытался сделать :


....
var
F:Tinifile;
...

procedure TForm1.Button1Click(Sender: TObject);// Создаю пункты меню... тут всё 100% работает )
var
VAVAVA:TMenuItem;
I:Integer;
begin
F:=Tinifile.Create(Extractfilepath(paramstr(0))+"1.cfg");

for i:=1 to 80 do begin
if F.SectionExists(inttostr(i)) then begin

VAVAVA:=TmenuItem.Create(form1);
vavava.onclick:=Clicked;// присваиваю событие
VAVAVA.Caption:=F.ReadString(inttostr(i),"caption","");
PopupMenu1.Items.Add(VAVAVA);
end;
end;
end;
Procedure Tform1.clicked(sender:Tobject);
var
action:string;
begin
//тут требуется ваша помощь :)
//Тут поидее , нужно узнать на какой пункт меню нажал пользователь(Индекс менюшки)  , и вести чтение из ини файла , в чём я и не смог разобраться , Popupmenu1.items.menuitem всегда равен -1 ,
action1:=F.ReadString(Номер пункта менюшки,"action","");
Shellexecute(handle,"open",pchar(action1),nil,nil,sw_show); // Обработка действия ...

end;


 
Ega23 ©   (2009-02-14 10:22) [1]


> Procedure Tform1.clicked(sender:Tobject);


Обрати внимание на параметр Sender. Прочитай в хелпе что это такое и там же посмотри примеры.
Также рекомендуб вообще весь хелп по TMenuItem просмотреть (там и примеры есть).


 
Игорь ©   (2009-02-14 10:44) [2]

Например так

type
 TForm1 = class(TForm)
   PopupMenu1: TPopupMenu;
   MenuItem1: TMenuItem;
   procedure FormCreate(Sender: TObject);
   procedure NewMeniItemClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.NewMeniItemClick(Sender: TObject);
begin
 ShowMessage((Sender as TMenuItem).Caption);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Item: TMenuItem;
begin
 Item:= TMenuItem.Create(PopupMenu1);
 Item.Caption:= "NEW ITEM";
 Item.OnClick:= NewMeniItemClick;
 PopupMenu1.Items.Add(Item);
end;


 
Ega23 ©   (2009-02-14 11:18) [3]


> Например так


Хочешь твой код в FormCreate чуть-чуть подправлю, и в NewMeniItemClick будет exception валиться?


 
Игорь ©   (2009-02-14 11:20) [4]


> Ega23 ©   (14.02.09 11:18) [3]


Нет


 
Ega23 ©   (2009-02-14 11:22) [5]


> Нет


Тогда в следующий раз думай, прежде чем дать новичку потенциально опасный код.


 
Артёмка   (2009-02-14 12:54) [6]

Всем спасибо ) Разобрался ) :)



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

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

Наверх




Память: 0.48 MB
Время: 0.014 c
4-1201570363
Legolas
2008-01-29 04:32
2009.04.05
Программа для блокировки


2-1235022461
Alexandra
2009-02-19 08:47
2009.04.05
Как передать Values в DBGrid?


15-1234034595
blackman
2009-02-07 22:23
2009.04.05
Что-то тормозить стало


15-1233473207
oleg_babenko
2009-02-01 10:26
2009.04.05
Как в Delphi 2006 сделать горячие клавиши как в Delphi6


3-1217909603
Viod
2008-08-05 08:13
2009.04.05
Обработка исключений ADOConnection