Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/41: Рейтинг темы: голосов - 41, средняя оценка - 4.80
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
1

Процедура на событие OnClick

24.05.2012, 12:05. Просмотров 7967. Ответов 21
Метки нет (Все метки)

Привет! ребята помогите разобраться плз... пишу свой класс, в конструкторе создаю контекстное меню к объекту и привязать процедуру, которая будет выполняться при выборе какой то пункта не могу((((((((((((

Вот конструктор:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
constructor CTShape.Create(aowner: TComponent);
var
   pItem: TMenuItem;
begin
  inherited;
  CanvasBufer:=Tbitmap.Create;
  _ToLabel := TLabel.Create(nil);
  SavePaint:=false;
  _house := '';
  _street := '';
  _X1 := 0;
  _Y1 := 0;
  _X2 := 0;
  _Y2 := 0;
  _ID := 0;
  _Serial := '';
  _Focus := false;
  Self.Pen.Width := 2;
  Self.Pen.Color := clBlack;
  
  _PopupMenu := TPopupMenu.Create(nil);
  pItem := TMenuItem.Create(_PopupMenu);
  pItem.Caption := 'Изменить';
  //pItem.OnClick -???????????
  _PopupMenu.Items.Add(pItem);
 
  pItem := TMenuItem.Create(_PopupMenu);
  pItem.Caption := 'Удалить';
  pItem.OnClick := ??????????????? ЧТО ТУТ НАДО ПРОПИСАТЬ?
  _PopupMenu.Items.Add(pItem);
end;
Как правильно объявить процедуру в классе, чтобы она приязалась к событию? Выручите плз!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2012, 12:05
Ответы с готовыми решениями:

Кнопка и событие onclick
Во общем, как подсчитать количество выполнение события онклик для кнопки. При чём если кнопка...

Событие OnClick компонент SpeedImage
на событие OnClick, компонент SpeedImage должен поменять картинку в свойстве Glyph на другую,...

Событие onClick для собственного класса
Есть класс у родителя которого нет события onClick. Хочу создать событие onClick у наследника этого...

Событие OnClick на программно создаваемый объект
Хаюшки. Ребят, нужно сделать так, чтобы Delphi обрабатывал клик на один объект из массива. То...

21
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 12:29 2
Ты хочешь чтобы эта процедура задавалась пользователем в дизайнере, или привязать к коду внутри своего класса?
0
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 12:33  [ТС] 3
Внутри кода чтобы я сам прописывал что делать...

Добавлено через 42 секунды
Хотя лучше чтобы внешне можно было 2 процедуры привязать к ним... на Добавить и Изменить.... как сделать так?
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 12:41 4
Я делал так:

Delphi
1
2
3
4
5
6
7
  PRIVATE
    FClick1 : TNotifyEvent;
 
  PUBLISHED
    {Метод промежуточного управления своим участком}
    PROPERTY CLick1 : TNotifyEvent READ FClick1 WRITE FClick1;
  END;
А в своём конструкторе пишешь:
Delphi
1
pItem.OnClick := FCLick1;
Кажется так. Уже подзабыл, а по кодам не так просто вспомнить. Но нужно ещё чтобы эти адреса запоминались в *dfm-файле и при открытии приложения - восстанавливались оттуда. Сейчас буду смотреть как.

Хотя, вроде, ничего больше и не нужно прописывать. Стандартные типы автоматически сохраняются.
1
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 12:45  [ТС] 5
Спасибо за ответ))) благодарен, щас буду пробовать!)
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 12:46 6
Я там дописал в посте пока ты тоже писал. Прочитай.
0
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 13:00  [ТС] 7
Блин че то не получается.... Я не понимаю где писать чтобы процедура нужная вызывалась? как привязать процедуру к этому?))) из внешки? или внутри класса?
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 13:03 8
Забыл. Чтобы при изменении этих процедур они записывались в события Click твоего меню:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  PRIVATE
    FClick1 : TNotifyEvent;
 
    Procedure  SetClick1(Value:TNotifyEvent);
 
  Public
    PROCEDURE Loaded; OVERRIDE;
 
  PUBLISHED
    {Метод промежуточного управления своим участком}
    PROPERTY CLick1 : TNotifyEvent READ FClick1 WRITE SetClick1;
  END;
 
Procedure   CTShape.SetClick1(Value:TNotifyEvent);
Begin
  pItem.OnClick := Value;
End;
 
Procedure CTShape.Loaded;
BEGIN
  INHERITED Loaded;
 
  pItem.OnClick := FClick1;
End;
Loaded может и не нужно.

Добавлено через 3 минуты
Я пока писал твоего предыдущего поста не видел.
Я так понимаю - у тебя компонент. Когда ты его будешь ставить в дизайнере у тебя там будет вкладка Events, в которой будет фигурировать описанное тобой событие Click. И как обычно, при двойном щелчке будет формироваться новая процедура, которая будет привязываться к компоненту.
0
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 13:04  [ТС] 9
Блин вот как мне чтобы когда контекстное меню ИЗменить выбираешь, выпадало сообщение "ИЗМЕНИТЬ"? я недогоняю... блин(((
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 13:14 10
Опиши, как должен выглядеть компонент?
0
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 13:20  [ТС] 11
да это объект просто) Вот смотри просто создается на форме объект, у него контектсное меню создается сразу с 2 пунктами: Добавить, Изменить. При выборе одного из них происходит то или другое)))) Дык вот я хочу чтобы была возможность из формы передавать процедуры на Добавить, Изменить! как то так.
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 13:42 12
Т.е. это будет компонент, который ставится на форму? Правильно? Кажется, я в предыдущем посте написал. Создая два события кли у своего компонента:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
PRIVATE
    FClick1 : TNotifyEvent;
    FClick2 : TNotifyEvent;
 
    Procedure  SetClick1(Value:TNotifyEvent);
    Procedure  SetClick2(Value:TNotifyEvent);
 
  Public
    PROCEDURE Loaded; OVERRIDE;
 
  PUBLISHED
    PROPERTY AddCLick : TNotifyEvent READ FClick1 WRITE SetClick1;
    PROPERTY DelCLick : TNotifyEvent READ FClick2 WRITE SetClick2;
  END;
 
Procedure   CTShape.SetClick1(Value:TNotifyEvent);
Begin
  _PopupMenu.Items[0].OnClick := Value;
End;
 
Procedure   CTShape.SetClick2(Value:TNotifyEvent);
Begin
  _PopupMenu.Items[1].OnClick := Value;
End;
 
Procedure CTShape.Loaded;
BEGIN
  INHERITED Loaded;
 
  _PopupMenu.Items[0].OnClick := FClick1;
  _PopupMenu.Items[1].OnClick := FClick2;
End;
Когда ты его будешь ставить в дизайнере у тебя там будет вкладка Events, в которой будут фигурировать описанные тобой события AddClick и DelClick. И как обычно, при двойном щелчке будет формироваться новая процедура, которая будет привязываться к компоненту.
1
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 13:44  [ТС] 13
Не не не , в том и прикол что надо программно присвоить теперь моему объекту процедуру на КЛик!!!=) вот в чем прикол!!)))
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 13:47 14
Цитата Сообщение от Temoxa Посмотреть сообщение
Дык вот я хочу чтобы была возможность из формы передавать процедуры на Добавить, Изменить!
Ты разве не этого хотел?
0
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 13:54  [ТС] 15
блин, имел ввиду программно))) в самой уже форме, а не в классе....

Добавлено через 5 минут
В форме, когда уже создал объект пытаюсь присвоить событию процедуру.. но ругается

Delphi
1
          Obect.DelCLick := Self.OnDelete(Sender);
OnDelete обычная процедура в которой действие необходимое
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 13:58 16
Цитата Сообщение от Temoxa Посмотреть сообщение
имел ввиду программно))) в самой уже форме, а не в классе....
Не понял. Объясни на пальцах. А если хочешь просто код в своём классе прилепить к тем кликам, тогда пиши процедуры:

Delphi
1
2
3
4
Procedure AddClick(Sender:TObject);
Begin
//Тут код...
End;
А в своём конструкторе:
Delphi
1
pItem.OnClick :=AddClick;
На вторую - аналогично.
0
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 14:01  [ТС] 17
Не не, так ошибку пишет... не хочет!
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 14:03 18
Попробуй без Sender:
Delphi
1
Obect.DelCLick := Self.OnDelete;
0
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
24.05.2012, 14:05  [ТС] 19
pItem.OnClick := Delete(nil);

Ругается что надо TNotify.....
0
3940 / 1865 / 337
Регистрация: 16.03.2012
Сообщений: 3,879
24.05.2012, 14:08 20
Зачем ты там Nil ставишь. И, вообще, Delete - есть стандартная процедура. Посмотри, как у меня в предыдущих постах написано.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2012, 14:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Разные событие OnClick для кнопок
Создаю программно кнопки через контекстное меню,и диалог.Потом когда кнопка создана,делаю ей...

Событие Onclick под динамически созданными кнопками.
Привет всем помогите решить проблему. Есть база данных. Считываю по строке из базы данных и...

Событие на нажатие (например if Image1.OnClick = ImageClick)
Добрый день, хочу, чтобы получилось событие на нажатии на картинку, вот только не знаю как...

Массив компонента. Процедура OnClick для конкретного элемента массива
Здравствуйте. Имеется массив компонента. К массиву задана созданная процедура OnClick....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.