![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамические меню. [D7, WinXP]
Артёмка © (2009-02-14 03:32:00)Всем привет ()
Нужно написать программу , которая будет динамически создавать пункты меню , читая их из 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;
Артёмка (2009-02-14 12:54:00) [1]Всем спасибо ) Разобрался ) :)
Ega23 (2009-02-14 11:22:00) [2]
> Нет
Тогда в следующий раз думай, прежде чем дать новичку потенциально опасный код.
Игорь (2009-02-14 11:20:00) [3]
> Ega23 © (14.02.09 11:18) [3]
Нет
Ega23 (2009-02-14 11:18:00) [4]
> Например так
Хочешь твой код в FormCreate чуть-чуть подправлю, и в NewMeniItemClick будет exception валиться?
Игорь (2009-02-14 10:44:00) [5]Например так
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 10:22:00) [6]
> Procedure Tform1.clicked(sender:Tobject);
Обрати внимание на параметр Sender. Прочитай в хелпе что это такое и там же посмотри примеры.
Также рекомендуб вообще весь хелп по TMenuItem просмотреть (там и примеры есть).