Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Не работает изменение стиля у TEdit


Автор: Bitter 6.7.2010, 12:03
Привет. Поставил на форму Edit, а в FormCreate пишу
Код

 SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);


Но почему-то не работает. Что бы я там ни писал, никакой стиль не работает. почему? У меня Delphi 7, Windows XP

Автор: Snowy 6.7.2010, 12:45
А пробовал свернуть, развернуть приложение?
Вставь следующей строкой
Код
   SetWindowPos(Edit1.Handle, 0, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_FRAMECHANGED);

Автор: CodeMonkey 6.7.2010, 12:55
Можно попробовать скрыть/показать Edit.

Автор: Bitter 6.7.2010, 13:25
Хм, да действительно, это какой-то глюк. Заработало после всяких таких манипуляций. Спасибо

Автор: CodeMonkey 6.7.2010, 13:28
Цитата(Bitter @  6.7.2010,  14:25 Найти цитируемый пост)
это какой-то глюк

Это не глюк - об этом сказано в http://msdn.microsoft.com/en-us/library/ms633591(VS.85).aspx.

Автор: Snowy 6.7.2010, 14:23
Цитата(CodeMonkey @  6.7.2010,  13:28 Найти цитируемый пост)
Это не глюк - об этом сказано в описании SetWindowLong.
Угу.
Так и написано английским по белому:
Цитата
Certain window data is cached, so changes you make using SetWindowLong will not take effect until you call the SetWindowPos function. Specifically, if you change any of the frame styles, you must call SetWindowPos with the SWP_FRAMECHANGED flag for the cache to be updated properly.
То есть нужно добавить ту строчку, что я написал.
Иногда срабатывает и без неё. Но для гарантии лучше добавить.

Автор: Bitter 6.7.2010, 17:27
о как... Мдя, умом Microsoft не понять, спасибо, подводный камень что надо smile

Автор: CodeMonkey 6.7.2010, 17:35
Забавно слышать это от человека, не читающего документацию, но всегда знающего, как надо правильно делать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)