Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OnChange - кто вызывает? [D7]


chir ©   (2005-01-10 19:57:00) 

Форма. Во всех полях событие OnChange вызывает одну и ту же процедуру. Как какое поле именно вызвало процедуру? Желательно вывести в label просто имя объекта.

вот такая процедура:

procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
 RichEdit1.Lines.Add('cxPropertiesChange');
 ism := 1;
end;

О! можно и не в лэйбл, а в этотже RichEdit.


chir   (2005-01-10 21:19:00) [1]

TControl(Sender).Name - отлично работает!
спасибо!!! :)


sniknik   (2005-01-10 21:01:00) [2]

TControl(Sender).Name


Desdechado   (2005-01-10 20:53:00) [3]

если поля прошиты в коде, то можешь просто сравнивать
if( Sender = fld ) then ...


chir   (2005-01-10 20:44:00) [4]

эх... я только только избавился от индивидуальных обработчиков... не возврат к куче обработчиков - не выход...


DSKalugin   (2005-01-10 20:36:00) [5]

создай для каждого компонента свой личный обработчик OnChange вместо общего. Тогда проблема будет решена.
Я в примере исходил из того, что меняется содержимое компонента TEdit

TYoutFieldType - тип твоего поля ... как уже сказали
т.е Sender.ClassName  имя класса я так понимаю это
TcxTextEdit, TcxPopupEdit и т.д.


chir   (2005-01-10 20:18:00) [6]

procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
 RichEdit1.Lines.Add('cxPropertiesChange');
 RichEdit1.Lines.Add('sender: '+Sender.ClassName); // Получил имя класса... уже лучше конечно, но этого очень мало...
 ism := 1; // ради этого все и затевалось.
end;

В общем: форма личных данных сотрудников. Состоит из разных объектов (cxTextEdit, cxPopupEdit и т.д.). Слева список всех сотрудников. данные текущего сотрудника выводятся в форме. Если что-то в форме изменилось (срабатывает OnChange), то устанавливается ism:=1. В дальнейшем (например, при переходе на другого сотрудника) в зависимости от ism формируется запрос UPDATE...

Проблема: сейчас почему-то даже просто при просмотре данных где-то срабатывает OnChange. Не могу найти где.

ps. чтобы не срабатывал OnChange при выборе другого сотрудника использую такую технологию:

 cxTE_surname.Properties.OnChange := nil;
 cxTE_surname.Text := DM.ADOQ2.FieldValues['surname'];
 cxTE_surname.Properties.OnChange := cxPropertiesChange;

=============

TYoutFieldType(Sender).name - можно объяснить что и как тут?...


DSKalugin   (2005-01-10 20:13:00) [7]

procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
label1.Caption:=(Sender as TEdit).Name;
RichEdit1.Lines.Add(label1.Caption);
ism := 1;
end;


Rule   (2005-01-10 20:09:00) [8]

procedure TForm1.cxPropertiesChange(Sender: TObject);
begin
RichEdit1.Lines.Add('cxPropertiesChange');
RichEdit1.Lines.Add(TYoutFieldType(Sender).name);
ism := 1;//  а это зачем ?
end;


где TYoutFieldType - тип твоего поля ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо