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

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

24.05.2012, 12:05. Просмотров 6839. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2012, 12:05
Ответы с готовыми решениями:

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

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

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

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

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

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

Добавлено через 42 секунды
Хотя лучше чтобы внешне можно было 2 процедуры привязать к ним... на Добавить и Изменить.... как сделать так?
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
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
24.05.2012, 12:41
Temoxa
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
Завершенные тесты: 1
24.05.2012, 12:45  [ТС] 5
Спасибо за ответ))) благодарен, щас буду пробовать!)
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
24.05.2012, 12:46 6
Я там дописал в посте пока ты тоже писал. Прочитай.
0
Temoxa
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
Завершенные тесты: 1
24.05.2012, 13:00  [ТС] 7
Блин че то не получается.... Я не понимаю где писать чтобы процедура нужная вызывалась? как привязать процедуру к этому?))) из внешки? или внутри класса?
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
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
Temoxa
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
Завершенные тесты: 1
24.05.2012, 13:04  [ТС] 9
Блин вот как мне чтобы когда контекстное меню ИЗменить выбираешь, выпадало сообщение "ИЗМЕНИТЬ"? я недогоняю... блин(((
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
24.05.2012, 13:14 10
Опиши, как должен выглядеть компонент?
0
Temoxa
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
Завершенные тесты: 1
24.05.2012, 13:20  [ТС] 11
да это объект просто) Вот смотри просто создается на форме объект, у него контектсное меню создается сразу с 2 пунктами: Добавить, Изменить. При выборе одного из них происходит то или другое)))) Дык вот я хочу чтобы была возможность из формы передавать процедуры на Добавить, Изменить! как то так.
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
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
Temoxa
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
Завершенные тесты: 1
24.05.2012, 13:44  [ТС] 13
Не не не , в том и прикол что надо программно присвоить теперь моему объекту процедуру на КЛик!!!=) вот в чем прикол!!)))
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
24.05.2012, 13:47 14
Цитата Сообщение от Temoxa Посмотреть сообщение
Дык вот я хочу чтобы была возможность из формы передавать процедуры на Добавить, Изменить!
Ты разве не этого хотел?
0
Temoxa
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
Завершенные тесты: 1
24.05.2012, 13:54  [ТС] 15
блин, имел ввиду программно))) в самой уже форме, а не в классе....

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

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

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

Ругается что надо TNotify.....
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
24.05.2012, 14:08 20
Зачем ты там Nil ставишь. И, вообще, Delete - есть стандартная процедура. Посмотри, как у меня в предыдущих постах написано.
0
24.05.2012, 14:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2012, 14:08

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

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

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


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

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

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