0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 13
|
|
1 | |
Создание у формы события, основанного на событиях компонентов формы15.11.2015, 01:29. Показов 4587. Ответов 17
Метки нет (Все метки)
Всем доброго времени суток.
Прошу подсказать решение проблемы: Необходимо у формы создать новое событие, которое будет происходить если в одном из компонентов формы произошло заранее выбранное событие. Пример на форме 50 шт. TEdit. (создаем динамически). У формы должно быть создано новое событие OnChange, которое возникает если на любом из компонентов формы TEdit возникло событие OnChange.
0
|
15.11.2015, 01:29 | |
Ответы с готовыми решениями:
17
Динамическое создание формы и компонентов Динамическое создание формы и компонентов Создание в формы и компонентов на ней в Run-Time Написать процедуру обработки события OnCreate для формы, которая устанавливает для формы размер шрифта |
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
15.11.2015, 01:57 | 2 |
Зачем и для чего? Обработчики событий OnChange компонентов лежащих на форме и так уже методы класса данной формы. Ей ли при этом не знать что у её компонента что-то изменилось.
0
|
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 13
|
|
15.11.2015, 18:51 [ТС] | 4 |
Ну например (если говорим о TEdit) для сохранения изменений в проекте при изменении любого TEdit.
Я понимаю, что это методы класса данной формы. Но как при возникновении одного из массива входных событий получить одно выходящее событие. Если знаешь, подскажи, пожалуйста, как это сделать. Присвоить динамически всем событиям OnChange TEdit-ов один обработчик не подходит.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
||||||
15.11.2015, 19:17 | 5 | |||||
Ну как-то вот так:
0
|
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 13
|
||||||
17.11.2015, 00:02 [ТС] | 6 | |||||
mss,
спасибо за конкретный ответ. Еще один вопрос: Я правильно понимаю, что наследника формы необходимо также обязательно регистрировать?
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
17.11.2015, 00:29 | 7 |
0
|
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 13
|
|
17.11.2015, 00:39 [ТС] | 8 |
не работает.
Создал модуль с потомком формы. подключил к проекту. Создал форму потомка, на ней три Edit. Создал событие и написал обработчик. Событие не возникает.
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
17.11.2015, 00:58 | 9 |
0
|
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 13
|
|||||||||||
17.11.2015, 01:31 [ТС] | 10 | ||||||||||
Версия XE5
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
17.11.2015, 10:03 | 11 |
Egor_SES, регистрация не обязательна
Код "подмены" класса TEdit следует интегрировать в юниты всех форм, где есть объекты TEdit, события которых требуется отслеживать
0
|
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 13
|
|
17.11.2015, 22:33 [ТС] | 12 |
Исправил как было указано.
Все равно не работает. Прошу подсказать, что не так. Код ниже: unit main; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, StdCtrls; type TEdit = class(StdCtrls.TEdit) protected procedure Change; override; end; TEditChangedEvent = procedure(Sender: TObject; Edit: TEdit) of object; TMyForm = class(TForm) private FEditChanged: TEditChangedEvent; public {} published property OnEditChanged: TEditChangedEvent read FEditChanged write FEditChanged; end; TForm4 = class(TMyForm) Label1: TLabel; procedure onEditChanged(Sender: TObject; Edit: TEdit); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; implementation {$R *.dfm} procedure TEdit.Change; begin inherited; if Assigned(Owner) and (Owner is TMyForm) then if Assigned(TMyForm(Owner).OnEditChanged) then TMyForm(Owner).OnEditChanged(Owner, Self); end; procedure TForm4.FormCreate(Sender: TObject); var i:integer; AEdit:TEdit; begin for i:=1 to 3 do begin AEdit:=TEdit.Create(Form4); with AEdit do begin Parent:=Form4; Left:=200; top:=Height*(i-1); Name:='Edit'+IntToStr(i); end; end; end; procedure TForm4.onEditChanged(Sender: TObject; Edit: TEdit); begin label1.Caption:='Rabotaet'; end; end.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
17.11.2015, 22:41 | 13 |
А где назначение обработчика события формы OnEditChanged ?
Нет его, потому и не работает.
0
|
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 13
|
|
17.11.2015, 22:48 [ТС] | 14 |
В самом низу:
procedure TForm4.onEditChanged(Sender: TObject; Edit: TEdit); begin label1.Caption:='Rabotaet'; end;
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
17.11.2015, 22:53 | 16 |
В самом низу сам метод-обработчик.
А где он назначается свойству-событию OnEditChanged ? Нигде.
1
|
0 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 13
|
|
18.11.2015, 00:02 [ТС] | 17 |
mss,
Спасибо за помощь. Все заработало. Остался чисто практический вопрос, касающийся правильности написания кода в классическом понимании: Необходимо ли выносить создание класса TMyForm в отдельный модуль?
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
18.11.2015, 00:39 | 18 |
Это не столь практический, сколь теоретический вопрос. Который должен решать архитектор проекта (если есть и тот и другой), а не программист.
Твоя программа работает? Значит код написан правильно.
0
|
18.11.2015, 00:39 | |
18.11.2015, 00:39 | |
Помогаю со студенческими работами здесь
18
Динамическое создание компонентов и подписка их на события Цвет формы и компонентов Выравнивание компонентов по центру формы. Скрытие всех компонентов с формы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |