Ответ на этот вопрос интерисует только одного человека на форуме.
Ответ на вопрос "зачем это делать" - ни одного.
По-моему тебе уже все довольно хорошо объяснили, разжевали и положили в рот, прямо как в школе.
На всякий случай более кратко поясню
TextBox технически является окном.
При создании окна указывается его стиль, в том числе в этом стиле указывается, в каком режиме работает TextBox - однострочном или многострочном.
Некоторые стили после создания можно менять, некоторые - нет. Тебя интерисует именно тот который менять нельзя. Это ограничение Windows, не VB6, оно очень нелогичное на мой взгляд.
Поэтому ответ на твой вопрос - сделать то что ты хочешь (сменить определенный стиль текстбокса) невозможно, единственное что ты можешь сделать - смириться с этим и жить дальше.
Если же смотреть на проблему более широко (не "как сделать текстовое поле многострочным через SetWindowLong?", а как сделать из однострочного текстбокса многострочный), то можно найти решения.
Например, в Windows Forms (надеюсь не нужно объяснять что это такое?) у класса TextBox есть свойство MultiLine, оно доступно и для чтения и для записи, причем как в дизайнтайме, так и в райнтайме. Запустив пример кода, который я дал, ты бы мог убедиться в этом. А также понять в Windows Forms обошли указанное выше ограничение. При изменении этого свойства создается новое окно с точно такими же свойствами и стилями (кроме, разумеется, указанного MultiLine), и в него копируется старый текст. Старое окно удаляется. Заметить это очень легко - при изменении указанного свойства у TextBox оказывается новый идентификатор hWnd.
Все это можно реализовать на VB6. Примерный код создания окна приводил пан EROS, впрочем он опустил (ввиду ее очевидности) часть кода, отвечающую за сабклассинг и обработку событий новосозданного текстбокса. Сделав это, ты также столкнешься с некоторыми сложностями сабклассинга в среде VB6.
Более логичное и простое решение, которое сразу же находит опытный программист - создать два TextBox в дизайнтайме, с разными установками MultiLine. Установить для них одинаковые шрифты, одинаковое расположение. В каждый момент времени, используя свойствао Visible, один из текстбоксов прятать, другой показывать. При необходимости переключения режима, соответственно менять их местами, не забывая копировать текстовое содержимое. Реализация занимает около 5-8 очень очевидных строчек кода, которые бы уже давно написали все программисты, практикующие VB6, кроме одного.
Так-то.
Мне кажется или раньше школьникам не нужно было по 3 часа разжевывать абсолютно очевидные вещи?
Ответить
|