|
#1
|
||||
|
||||
Динамическое меню
У меня тут проблема возникла...
Вообщем пишу программу где всё меню находится в файле config.ini. При запуске программа их(название, картинку, адрес DLL) считывает и "втыкает" куда надо, и присваевает им при нажатие процедуру(одну и туже для всех). Все вродебы хорошо,.. НО я незнаю как сделать так чтобы эта процедура работала для всех кнопок по-разному. То есть при нажатие "Кнопки№1" выполнялась процедура из "DLL1", а при "Кнопки№2" - "DLL2". На всякий случай выкладываю пример, с тойже проблемой, но более понятной: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus; type TForm1 = class(TForm) MMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N11: TMenuItem; N21: TMenuItem; LEdit1: TLabeledEdit; N31: TMenuItem; procedure N11Click(Sender: TObject); procedure N21Click(Sender: TObject); procedure N31Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure MenuBtnClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MenuBtnClick(Sender: TObject); begin {Вот тут-то я и незнаю как написать чтоб можно было сделать чтото вроде этого: Если нажата "Кнопка №1" то в LEdit1 написать что "нажата Кнопка №1". Если нажата "Кнопка №2" то в LEdit1 написать что "нажата Кнопка №2". Если нажата "Кнопка №3" то в LEdit1 написать что "нажата Кнопка №3". Причем, число кнопок,и их имена(Caption) неизвестно.} Form1.LEdit1.Text := 'А фиг его знает че там нажато...'; end; procedure TForm1.N11Click(Sender: TObject); begin LEdit1.Text := 'Была нажата Кнопка №1'; end; procedure TForm1.N21Click(Sender: TObject); begin LEdit1.Text := 'Была нажата Кнопка №2' end; procedure TForm1.N31Click(Sender: TObject); begin LEdit1.Text := 'Была нажата Кнопка №3' end; procedure TForm1.FormCreate(Sender: TObject); begin N2.Add([NewItem('Кнопка №1',0,False,True,MenuBtnClick,0,'N12')]); N2.Add([NewItem('Кнопка №2',0,False,True,MenuBtnClick,0,'N22')]); N2.Add([NewItem('Кнопка №3',0,False,True,MenuBtnClick,0,'N32')]); end; end. |
#2
|
||||
|
||||
Код:
procedure TForm1.MenuBtnClick(Sender: TObject); begin {Вот тут-то я и незнаю как написать чтоб можно было сделать чтото вроде этого: Если нажата "Кнопка №1" то в LEdit1 написать что "нажата Кнопка №1". Если нажата "Кнопка №2" то в LEdit1 написать что "нажата Кнопка №2". Если нажата "Кнопка №3" то в LEdit1 написать что "нажата Кнопка №3". Причем, число кнопок,и их имена(Caption) неизвестно.} Form1.LEdit1.Text := ( Sender as TMenuItem ).Caption; // Теперь ты знаешь что нажато end; |