TextBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
master35
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 20.10.2004 (Ср) 1:46

TextBox

Сообщение master35 » 20.10.2004 (Ср) 2:33

Нужно программно поместить в TextBox большой объем текста.
Text1.Text = "...тут идет большой текст..."
Когда текст вводишь, такое впечатление что он ограничен определенным количеством знаков. Как решить эту проблемму?

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 20.10.2004 (Ср) 7:18

Он вообще то и ограничен 65535 символами, если нужно больше юзай RichTextBox.
الفيجوال بيسك الرابح

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.10.2004 (Ср) 10:35

Помоему даже 32767. А если не включен Multiline, то даже 2048.
В NT-системах в него можно загнать до двух Гб.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.10.2004 (Ср) 12:23

Подтверждаю, что 32Кб.
Изображение

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 20.10.2004 (Ср) 22:00

Именно поэтому в 9х Блокнот при открытии больших файлов переносит их в WordPad.

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 21.10.2004 (Чт) 7:33

Незнаю я для проверки я сделал так(Win XP):
Код: Выделить всё
Private Sub Form_Load()
text
Dim s As String
s = String(128000, "A")
MsgBox ("Len(s) = " & Len(s))
Text1.Text = s
MsgBox ("Len(text1.text) = " & Len(Text1.Text))
End Sub

Результат был:
1.128000
2.65535
الفيجوال بيسك الرابح

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 21.10.2004 (Чт) 7:34

Незнаю я для проверки я сделал так(Win XP):
text1.multiline = true
Код: Выделить всё
Private Sub Form_Load()

Dim s As String
s = String(128000, "A")
MsgBox ("Len(s) = " & Len(s))
Text1.Text = s
MsgBox ("Len(text1.text) = " & Len(Text1.Text))
End Sub

Результат был:
1.128000
2.65535
الفيجوال بيسك الرابح

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 9:45

А теперь то же самое проверь на Win98 ;-)
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.10.2004 (Чт) 12:30

2 GM: Фишка в том, что блокнот в NT - это не тот же самый блокнот, что в мастдае. В блокноте NT можно открыть хоть метровый файл, правда, есть большая вероятность BSOD словить :) По крайней мере, открытие 500-метрового файла в блокноте NT4 приводило именно к этому, в конечном итоге. Но не в этом суть. Суть в том, что текстбокс VB абсолютно идентичен именно мастдайному блокноту со всем из этого вытекающим. Зачем? - очень просто: вспомните, в каком году вышла шестая студия...

Так что только RTB, причем без вариантов, если, конечно, никто не собирается свой собсный TextBox писать с нуля целиком на апях, и (о ужас!), возможно, даже через CreateWindowEx()...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 14:17

А я думаю, что через EM_SETHANDLE текстовый буфер таки можно расширить... Сейчас проверю.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 15:40

Точно, всё даже без EM_SETHANDLE работает.
Нужно просто устанавливать текст через SetWindowText: в Property Let VB.TextBox::Text текст искуственно обрезается до 64Кб.

Вот этот код работает:
Код: Выделить всё
Option Explicit
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long

Private Sub Form_Load()
SetWindowText Text1.hWnd, Space(2000000)
Debug.Print Len(Text1.Text)
End Sub
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 15:43

Ennor писал(а):Суть в том, что текстбокс VB абсолютно идентичен именно мастдайному блокноту со всем из этого вытекающим.

Так что абсолютность оказалась весьма относительной - и в стандартный текстбокс можно впихнуть несколько метров текста...
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2004 (Чт) 16:27

Тёмыч, ты это точно на 98 проверил? А то это несколько расходится с тем, что написано в MSDN :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 17:04

Только на Win2000
Потому что Ennor утверждал, что и там есть ограничение.

А в Win98-то никаких сомнений нет, что 32Кб - максимум...
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.10.2004 (Чт) 20:16

tyomitch писал(а):Только на Win2000
Потому что Ennor утверждал, что и там есть ограничение.
...

Это где я такое утверждал? Нет, я, может, и безумец, но не идиот, все-таки :) . Есть ли такое ограничение в NT - точно не знаю, но сам видел, как валится NT4 Workstation при открытии дампа оракловой базы в блокноте. Полчаса зависона, и свободен. Так что, даже если де-юре ограничения нет (4 Гб не считаем, это у всех), то на практике оно вполне может быть. Причем скорее всего плавающим, например, зависящим от длины рамы в машине, или еще от чего...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 20:27

Ты утверждал, что VB.TextBox не способен содержать больше 32Кб даже на Win2000.
Утверждал?
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 22.10.2004 (Пт) 18:20

Насчет абсолютности, я, возможно, и погорячился, но в принципе - да. А ты попробуй применить SetWindowText() к мастдайному блокноту - не удивлюсь, если сработает :) .

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.10.2004 (Пт) 18:25

Ennor писал(а):А ты попробуй применить SetWindowText() к мастдайному блокноту - не удивлюсь, если сработает :) .

Ладно, ночью пойду под Win98 в игрушку резаться - заодно проверю :-)
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.10.2004 (Вс) 0:39

Вот, проверил. 32Кб максимум, как и ожидалось.
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 24.10.2004 (Вс) 21:51

Что ж, значит, в мастдае блокнот действительно такой кривой сам по себе, а VB.TextBox просто под него закамуфлирован. Непонятно, правда, зачем, но, как известно, пути Microsoft неизвестны никому, в том числе и дяде Билли...

Andrew Sherd
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 10.05.2004 (Пн) 0:18
Откуда: Санкт-Петербург

Сообщение Andrew Sherd » 25.10.2004 (Пн) 3:26

Когда-то давно в одной книжке еще по VB5 был примерчик как загрузить в блокнот больше 32 кб....там просто текст в массив разбивался на блоки по 32 и при скролинге дописывался в блокнот, а первые удалялись....гемморно, но чем не вариант?
Маленькие хитрости: Если золотую рыбку положить на сковородку, количество желаний увеличивается да 50!!!

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 25.10.2004 (Пн) 13:06

Andrew Sherd писал(а):Когда-то давно в одной книжке еще по VB5 был примерчик как загрузить в блокнот больше 32 кб....там просто текст в массив разбивался на блоки по 32 и при скролинге дописывался в блокнот, а первые удалялись....гемморно, но чем не вариант?
Ага! Что-то похожее читал! А что там с выделением и копированием творилось - даже вспомнить страшно!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 6

    TopList