Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Обработчик динамически созданного пункта меню

Автор: Dennis Passmore

Как мне "подключить" код к пункту меню, который был создан динамически?

Вот метод, который я использую для "подключения" кода к пунктам меню, динамически создаваемым во время выполнения программы. Сохраняя результат выполнения пункта меню в глобальной переменной, я могу воспользоваться им позже в нужное мне время в любом месте программы. Я надеюсь что помог вам.


 unit Tunit1;
 
 interface
 
 uses
   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);
 begin
   with (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 do
   begin
     FMenuItem := TMenuItem.Create(Self);
     with FMenuItem do
     begin
       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.
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS