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

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

Мгновенное изменение [D7, WinXP]


capkoh ©   (2005-08-30 14:20:00) 

Как можно сделать реальное изменение текстового свойства, как Text в TEdit? Т.е. текст на компоненте изменяется сразу же при введении очередного символа в поле свойства.

Посмотрел как сделано в TControl:

property Caption: TCaption read GetText write SetText stored IsCaptionStored;

procedure TControl.SetText(const Value: TCaption);
begin
 if GetText <> Value then SetTextBuf(PChar(Value));
end;

procedure TControl.SetTextBuf(Buffer: PChar);
begin
 Perform(WM_SETTEXT, 0, Longint(Buffer));
 Perform(CM_TEXTCHANGED, 0, 0);
end;

Но, ведь, SetText будет выполняться не сразу при вводе текста...


Юрий Зотов   (2005-08-30 15:03:00) [1]

Это делается не самим компонентом, а редактором свойства (что и естественно, потому что этот механизм относится исключительно к design-time). Если метод GetAttributes редактора свойства включает флаг paAutoUpdate, то при каждом изменении свойства сразу же и автоматически вызывается его метод SetValue.

Для строкового свойства можно и не писать свой редактор, а просто объявить свойство с типом TCaption (а не просто string). Тогда автоматически подключится уже готовый редактор TCaptionProperty (что и использовано в TControl для свойства Caption).


Наверх

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