Вопрос очень прост, но в нете я не нашел нормального объяснения. А суть проста: во время выполнения нужно сделать текстовое поле многострочным через SetWindowLong. Вопрос только в том, какие ему дать константы, чтобы оно (текстовое поле) сохранило свой стиль (цвета, стили рамки и прочую бодягу), но при этом стало многострочным.
VВD ты глючишь чтоли?
Какая нафиг разница в стиле, цвете и рамке между однострочным и многострочным текстбоксом?
Аперэнс,
Бэкколор,
Бордерстайл,
Мультилайн и
Скроллбарс всё элементарно.
в свойствах textbox, multiline = true....
а вот далее самое интересное, переменной MaxLines указываешь сколько строк можно юзать в textbox'e
MaxLines = 1 - одна строка в textbox'e, и больше их нет... , MaxLines = 10 - десять строк доступно...
Спасибо, на суть не в этом. Проблема в другом. Во время выполнения программы делать
Multiline = True
нельзя (пишет ReadOnly - не знаю зачем так сделали, по моему тупо). Мне нужно сделать однострочное поле многострочным во время выполнения программы. Это делается только SetWindowLong. Нужно только константы. И все.
вот константы для класса EDIT, т.е. для TextBox' а
ES_AUTOHSCROLL - Автоматически прокручивает текст вправо на 10 символов, когда пользователь напечатает символ в конце строчки. Когда пользователь нажимает клавишу ENTER, управление прокручивает весь текст обратно, чтобы установить нуль.
ES_AUTOVSCROLL - Автоматически перемещает текст вверх на одну страницу, когда пользователь нажимает клавишу ENTER на последней строчке.
ES_CENTER - Выравнивает по центру текст в многостроковом поле редактирования текста.
ES_LEFT - Выравнивание текста слева.
ES_LOWERCASE - Преобразовывает все символы в нижний регистр, поскольку они печатаются внутри поля редактирования текста.
ES_MULTILINE - Обозначает многостроковое окно редактирования текста. Значение по умолчанию - одностроковое окно редактирования текста. Когда многостроковое поле редактирования находится в диалоговом окне, заданная по умолчанию ответная реакция на нажим клавиши ENTER должна активизировать кнопку по умолчанию. Чтобы использовать клавишу ENTER для перевода строки, стиль используйте ES_WANTRETURN. Когда многостроковое окно редактирования не в диалоговом окне и определен стиль ES_AUTOVSCROLL, поле редактирования показывает столько строчек, сколько это возможно и прокручивает вертикально, когда пользователь нажимает клавишу ENTER. Если Вы не определяете ES_AUTOVSCROLL, окно редактирования показывает столько строчек, сколько это возможно и подает звуковой сигнал, если пользователь нажимает клавишу ENTER, но больше ни строчки не может отобразиться в окне. Если Вы определяете стиль ES_AUTOHSCROLL, многостроковое окно редактирования автоматически горизонтально прокручивается, когда каретка проходит за правый край элемента управления. Чтобы запустить новую строку, пользователь должен нажать клавишу ENTER. Если Вы не определяете ES_AUTOHSCROLL, элемент управления, когда это необходимо, автоматически переносит без разрыва слова в начало следующей строки. Новая строка образуется и тогда, если пользователь нажимает клавишу ENTER. Размер окна определяет позицию перехода слова на новую строку. Если размер окна изменяется, изменяется позиция перехода на новую строку, а текст восстанавливается. Многостроковое окно редактирования текста может иметь линейки прокрутки . Окно редактирования с линейками прокрутки обрабатывают свои собственные сообщения от линейки прокрутки. Обратите внимание, что окно редактирования без линеек прокрутки, прокручивают текст, как описано в предыдущих параграфах и обрабатывают любые сообщений прокрутки, посланные родительским окном.
ES_NOHIDESEL - Отрицает заданное по умолчанию поведение для поля редактирования текста. Заданное по умолчанию поведение скрывает выбор, когда элемент управления теряет фокус ввода и инвертирует выбор, когда панель управления принимает фокус ввода. Если Вы определяете ES_NOHIDESEL, выбранный текст инвертируется, даже если панель управления не имеет фокуса.
ES_NUMBER - Позволяет ввести в поле редактирования только цифры.
ES_OEMCONVERT - Преобразует текст, введенный в окно редактирования. Текст преобразуется из набора символов Windows - в набор символов OEM, а затем обратно - в набор Windows. Это гарантирует соответствующее символьное преобразование, когда из прикладной программы вызывается функция CharToOem, чтобы преобразовать строку Windows в окне редактирования в символы OEM. Этот стиль наиболее полезен для окон редактирования текста, которые содержат имена файлов.
ES_PASSWORD - Отображает звездочку (*) вместо каждого символа, введенного с клавиатуры в окно редактирования. Вы можете использовать сообщение EM_SETPASSWORDCHAR, чтобы заменить ею символ, который отображается.
ES_READONLY - Не допускает пользователя к вводу или редактированию текста в окне редактирования.
ES_RIGHT - Выравнивает по правому краю текст в многострочном окне редактирования.
ES_UPPERCASE - Преобразует все символы в символы верхнего регистра, когда они вводятся в окно редактирования.
ES_WANTRETURN - Определяет, чтобы служебный код возврата каретки был вставлен тогда, когда пользователь нажимает клавишу ENTER при вводе текста в многострочное поле редактирования текста в диалоговом окне. Если Вы не определяете этот стиль, нажимая клавишу ENTER, вы получите тот же самый эффект, словно нажали заданную по умолчанию командную кнопку диалогового окна. Этот стиль не имеет никакого влияния в однострочном окне редактирования.
Но самое интересное, что когда ты в свойствах ставишь
Multiline = True
VB уничтожает и создает заново окно textbox'a с новым стилем... но в рантайме этого делать не хочет...
There are 2 kinds of edit box:
Multiline
Single Line
The difference between the 2 is that a multiline edit box can have scroll bars (managed by Windows), and the text wraps around automatically. A single line edit box is the default.
ну да.. при создании контрола используются разные стили. для многострочного необхотдим ES_MULTILINE
поэтому выход, или пересоздавать окно, или перехватывать WM_CREATE и там добавить стиль ES_MULTILINE...