Как мне "подключить" код к пункту меню, который был создан
динамически?
Вот метод, который я использую для "подключения" кода к пунктам меню,
динамически создаваемым во время выполнения программы. Сохраняя результат
выполнения пункта меню в глобальной переменной, я могу воспользоваться им позже
в нужное мне время в любом месте программы. Я надеюсь что помог вам.
unit Tunit1;
interfaceuses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
Edit1: TEdit; { Просто "место для щелчка" и отображения результатов }procedure Edit1Click(Sender: TObject);
private{ Private declarations }
FPopupMenu: TPopupMenu; { Общий Popup для использования "кем нужно" }
FPopupResult: Longint; { Результат последнего выполненного FPopupMenu }procedure FPopupMenuClick(Sender: TObject);
public{ Public declarations }end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.FPopupMenuClick(Sender: TObject);
beginwith (Sender as TMenuItem) do
FPopupMenu.Tag := Tag; { передаем значение TMenuItem.Tag в FPopupMenu.Tag }end;
procedure TForm1.Edit1Click(Sender: TObject);
var
tx, ty, tz: integer;
FMenuItem: TMenuItem;
begin
tx := Left + (Width - ClientWidth) + (Sender as TEdit).Left;
ty := Top + (Height - ClientHeight) + (Sender as TEdit).Top;
FPopupMenu := TPopupMenu.Create(Self);
FPopupMenu.AutoPopup := false;
FPopupMenu.Tag := 0;
for tz := 1 to 5 dobegin
FMenuItem := TMenuItem.Create(Self);
with FMenuItem dobegin
Tag := tz;
OnClick := FPopupMenuClick; { все сделает один OnClick }
Caption := "Выбор #" + IntToStr(tz);
end;
FPopupMenu.Items.Add(FMenuItem)
end;
FPopupMenu.Popup(tx, ty);
Application.Processmessages; { даем время для обработки события OnClick }if FPopupMenu.Tag <> 0 then{ они действительно выбрали что-то ? }begin
FPopupResult := FPopupMenu.Tag;
Edit1.Text := " Выбор #" + IntToStr(FPopupResult);
end;
{ FPopupMenu.Tag может храниться в ГЛОБАЛЬНОЙ переменной и использоваться
позже как порядковое значение в блоках CASE OF или IF THEN
для организации в коде условного перехода. }
FPopupMenu.Free;
FPopupMenu := nil;
end;
end.
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Обработчик динамически созданного пункта меню", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!