Главная страница
    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
15-1233502350
stas
2009-02-01 18:32
2009.04.05
TWebBrowser получить текст без тегов


1-1209133936
Kolan
2008-04-25 18:32
2009.04.05
В MDI приложение WindowState := wsMaximized; происходит долго&#133


15-1233644188
Дмитрий С
2009-02-03 09:56
2009.04.05
HTTP: basic авторизация под SSL


4-1207825025
Виталий
2008-04-10 14:57
2009.04.05
Узнать хендлы открытых процессом файлов


2-1234865357
Slimer
2009-02-17 13:09
2009.04.05
Управление мышью





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский