Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2016, 13:18   #1
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию Динамические компоненты, События

Код:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls, Menus;
 procedure CreateForm2 () ;
var
  Form2: TForm;
    Panel2:TPanel;
    BitBtn2:TBitBtn;
    BitBtn3:TBitBtn;
    TreeView2:TTreeView;
    PopupMenu2:TPopupMenu;

implementation

procedure  N1Click (Sender: TObject);
Begin
TreeView2.Items.addChild(TreeView2.Items.Item[0],(Sender as TMenuItem).Caption);
end;

procedure CreateForm2 () ;
Begin
Form2:=TForm.Create(Application);
Form2.Name:='Form2';
Form2.Position:=poScreenCenter;
Form2.Caption:='Конструктор Фильтров';

  Panel2:=TPanel.Create(Form2);
  Panel2.Parent:=Form2;
  Panel2.Align:=alBottom;
  Panel2.Height:=25;

    BitBtn2:=TBitBtn.Create(Form2);
    BitBtn2.Parent:=Panel2;

    BitBtn3:=TBitBtn.Create(Form2);
    BitBtn3.Parent:=Panel2;
    BitBtn3.Left:=Panel2.ClientWidth-BitBtn3.Width;

  PopupMenu2:=TPopupMenu.Create(Form2);
    PopupMenu2.Items.Clear;
    PopUpMenu2.Items.Add(NewItem('добавить ', 0, False, False, nil, 0, 'L1'));
    PopUpMenu2.Items.Add(NewItem('Запись 1 ', 0, False, True, N1Click() , 0, 'N1'));
не получается добавить пункт меню с обработчиком событий
ругается на N1Click
пробовал по разному каждый раз дает новую ошибку
я так понимаю какой то параметр нужно передать процедуре вот только какой ??
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 19.05.2016, 13:24   #2
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Код:
var MenuItem: TMenuItem;
begin
  MenuItem := TMenuItem.Create(PopupMenu);
  MenuItem.Caption := Random(1000).ToString;
  MenuItem.OnClick := MenuItemClick;

  PopupMenu.Items.Add(MenuItem);
End;
Вы там держитесь.
TaLadno вне форума Ответить с цитированием
Старый 19.05.2016, 13:31   #3
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

MenuItemClick что за зверь такой??
и как мне обращаться с процедуре N1Click тогда?

да и чем отличается ?
Код:
PopUpMenu2.Items.Add(NewItem('Запись 1 ', 0, False, True, N1Click() , 0, 'N1'));
от
Код:
  MenuItem := TMenuItem.Create(PopupMenu);
  MenuItem.Caption := Random(1000).ToString;
  MenuItem.OnClick := MenuItemClick;

  PopupMenu.Items.Add(MenuItem);
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 19.05.2016 в 13:37.
Dvoishnik вне форума Ответить с цитированием
Старый 19.05.2016, 14:27   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

сравни !!!
procedure N1Click (Sender: TObject);
procedure TForm2.MenuTemClick(sender: TObject);

событие (event) для обработки ДОЛЖНО БЫТЬ методом (процедурой КАКОГО-ЛИБО класса), а не "ПРОСТО" процедурой.

и даже более того ОЧЕНЬ ЖЕЛАТЕЛЬНО чтобы ЭТО была метод конкретного объекта (т.е. УЖЕ созданного экземпляра класса).

Код:
 ( ..., form2.MenuItemclick, ...);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.05.2016 в 14:31.
evg_m вне форума Ответить с цитированием
Старый 19.05.2016, 14:40   #5
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Т.Е. чтоб это правильно сделать нужно описать класс формы которой я создаю в ней описать метод N1Click клик для N1?

Код:
Type
  TForm2 = class(TForm)
    Panel2:TPanel;
    BitBtn2:TBitBtn;
    BitBtn3:TBitBtn;
    TreeView2:TTreeView;
    PopupMenu2:TPopupMenu;
    MenuItem: TMenuItem;
    L1:TMenuItem ;
    procedure  L1Click  (Sender: TObject);
  ............
Var
Form2:TForm2;
...........
procedure  TForm2.L1Click  (Sender: TObject);
Begin
TreeView2.Items.addChild(TreeView2.Items.Item[0],(Sender as TMenuItem).Caption);
end;
........
.........
  PopupMenu2:=TPopupMenu.Create(Form2);
  PopupMenu2.Items.Clear;
    L1:=TMenuItem.Create(PopupMenu2);
    L1.Name:='L1';
    L1.Caption:='добавить';
    L1.OnClick:=TForm2.L1Click;// также ругается 
  PopupMenu2.Items.Add(L1);
не накидаете примерчик?
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 19.05.2016 в 15:01.
Dvoishnik вне форума Ответить с цитированием
Старый 19.05.2016, 15:07   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

L1.OnClick:=TForm2.L1Click;// также ругается

Цитата:
и даже более того ОЧЕНЬ ЖЕЛАТЕЛЬНО чтобы ЭТО была метод конкретного объекта (т.е. УЖЕ созданного экземпляра класса).
Код:
 ( ..., form2.MenuItemclick, ...);
Код:
L1.Onclick:=form2.L1Click; //можно так
L1.OnClick:=L1Click; // и так 
L1.OnClick:=self.L1Click; // или так
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.05.2016, 15:15   #7
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

evg_m, спасибо.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Динамические компоненты.Бага с созданием Horus92 Общие вопросы Delphi 3 01.06.2010 20:23
Динамические компоненты. Уже не могу.. Ky3Heu, Общие вопросы Delphi 2 15.04.2009 15:05
Динамические компоненты и MouseMove Шульц Общие вопросы Delphi 10 23.01.2009 11:27
События, выполняемые во время работы созданной компоненты Denager Общие вопросы Delphi 13 22.04.2008 16:48