Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
Артёмка   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
2-1234344792
markers
2009-02-11 12:33
2009.04.05
Обращение к VCL объектам из потока


15-1233845470
Strate
2009-02-05 17:51
2009.04.05
Обеспечить безопасность сохранения данных


3-1218479109
Евгений Р.
2008-08-11 22:25
2009.04.05
Изменение формулы вычисляемого поля


2-1234686924
Roll
2009-02-15 11:35
2009.04.05
добавление нескольких файлов через OpenDialog


2-1235043250
novai
2009-02-19 14:34
2009.04.05
Как 4 byte привести к longword





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский