Как заставить TextBox нормально отображать данные?...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Как заставить TextBox нормально отображать данные?...

Сообщение BV » 24.05.2005 (Вт) 0:53

Есть одна интересная проблема с TextBox’ом VB – если загрузить в него не простой текст, а бинарные данные (напр., содержимое рисунка), то отобразится лишь несколько символов, в то время как если открыть этот же рисунок в Notepad’е Windows, отобразятся все данные в файле! Подскажите, можно ли как-то сделать загрузку в TextBox всех бинарных данных?

Что характерно – если использовать RichTextBox, проблема исчезает.
НО! Мне нужен ИМЕННО TextBox.
А кодом для загрузки данных я пользуюсь этим:

Код: Выделить всё
n = FreeFile
Open strFileName For Binary Access Read As #n
   Get #n, ,strData
Close #n
txtMain.Text = strData
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 1:17

BV
Ну а как отобразить непечатные символы???
WordPad, похоже, вместо них квадратики рисует.... А тебе оно надо?
Не уж-то в блокноте кто-то будет бинарники править?!

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 1:25

А, ну так ты их выводишь некорректно... Чтобы получить свои "квадратики" нужно каждый байт переводить в ASCII.
for i =0 to LenOfData
txtMain.Text =txtMain.Text & chr(strData)
next i

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 24.05.2005 (Вт) 1:58

WordPad, похоже, вместо них квадратики рисует....

Бывает еще хуже, уменя однажды код
Код: Выделить всё

Text1.Text="Текст " & strTxt & " продолжение"

в текстбоксе отобразил "Текст ", нужно самому каждый некорректный символ заменять на корректный.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 2:05

2 Ariman

Ты имел ввиду Chr$(Mid$(strData,i,i))?

Или ещё Asc(Chr$(Mid$(...


2 ism

Можешь дать код этой замены?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 2:23

BV
А ты бинарник куда читаешь? Не в байтовый массив?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 2:24

Понял. Но тормоза при таком методе ЖУДКИЕ!
Может есть иные способы?

Ariman, мы тут практически он-лайн! :)

Ну а если начну читать в байтовый массив?...
Сейчас попробую...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 2:38

BV
Только ты того.. этого...... По байтам-то не читай :D
А то я сам, бывало.......... :lol:
Читай сразу блок.
Последний раз редактировалось Ariman 24.05.2005 (Вт) 2:41, всего редактировалось 1 раз.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 2:40

О! А я по байтам! :lol:

ReDim strData(lSize)
f = FreeFile
Open strFileName For Binary Access Read As #f
Get #f, , strData
Close #f
For i = 0 To lSize
TTextBlock.Text = TTextBlock.Text & Chr$(strData(i))
Next i

Изменим...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 2:43

BV
Не понял юмора :?
ЭТо по байтам??? А как же тогда НЕ по байтам?

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 2:46

BV писал(а):Ariman, мы тут практически он-лайн! :)

ПРАКТИЧЕСКИ????
А где ж мы, как не он-лайн? :?: :lol:
Ты, наверное, хотел сказать "Реалтайм" :wink:

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 2:48

Нет, в смысле читаю я блоком, а конвертирую по байтам. Чё-то я щас решил, что конвертация блоком пройдёт... ступил маленько... :? :)

Да, верно, "реалтайм"! :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 2:50

Одни тут в такое-то время на форуме... :D
Да...


Ух, но тормоза при чтении таким способом те ещё!
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 2:55

BV
Тормоза.....
А что делать??
Ну пихни в цикл DoEvents, от тормозов не спасет, но будет не так тошно :lol:

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 2:59

Слушай, а как бы по-быстрому распознать - открывается бинарник или простой текст?


Хотя нет... Это будет ещё смешнее... :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 3:03

В текстовых, насколько я заню, за /r всегда идет /n...... Или наоборот...
А вот в бинарниках - нет!

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 3:06

/r и /n?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 3:13

т.е. VbCr и VbLf

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 3:15

Ну не знаю... Там разное бывает... А если файл размером в 500 (и больше) КБ, что его весь InStr'ингом проходить?...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 3:19

Зачем весь - до первого CrLF'а! :lol:
А на самом деле, все это фигня.... надо по-другому....

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 3:21

Да, точно... Только как?...

Ладно, пора мне... Завтра заходи, продолжим, окей?

Т.е. сегодня, но спустя часов шесть-восемь... :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 11:08

Вот и прошло часов шесть-восемь... :)

Может кто-нибудь знает более быстрый способ загрузки бинарных данных в TextBox? И что лучше - массив или Mid'ом?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

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

Сообщение tyomitch » 24.05.2005 (Вт) 11:38

Если вы читаете Get-ом строку из файла, то её нужно предварительно забить (например, пробелами) до требуемой длины.
Но vbNullChar-ы в текстбоксе отобразиться всё равно не смогут. Посему вопрос - нафига вам в текстбоксе мусор? Это, что ли, хекс-едитор будет?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 11:50

Да нет, просто если хочется просмотреть заголовки в WAV файле и пр.... Удобно как бы...

Так есть более удобный способ (кстати, забивание Space'ами я делаю)?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

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

Сообщение tyomitch » 24.05.2005 (Вт) 12:14

BV писал(а):Да нет, просто если хочется просмотреть заголовки в WAV файле и пр.... Удобно как бы...

Так есть более удобный способ (кстати, забивание Space'ами я делаю)?

Far-ом :-)

Если серьёзно, то это для себя или для какой-то проги?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 12:34

Для текстового редактора.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.05.2005 (Вт) 13:01

BV
Послушай доброго совета :D
ненужная это фича! Все одно половину байт отобразить не сможешь, будут вместо них непесатные символы!
ну зачем эт о надо? Ни редактировать нельзя бинарники, ничего.....
Какой толк от такого просмотра? Если человек надо, он возьмет ХЕКС-редактор, а если нет - то нафига ему смотреть заголовки??

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 16:25

Да ладно тебе, может просто приятно, когда загружается не три символа из файла в 50 КБ, а все (или, хоть, почти все), если этот файл содержит всякие Chr$(0), Chr$(7) и т.д.


Меня теперь интересует другой вопрос: как быстро и на 100% распознать, открывается бинарник или файл с простым текстом (поиск vbCrLf в данных не катит, проверял – многие архивы и файлы миди содержат эти символы!...)?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

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

Сообщение alibek » 24.05.2005 (Вт) 16:28

Если в файле есть символы с кодом меньше 32 (за исключением 9, 10, 13, 26), то это не текстовый файл.
Lasciate ogni speranza, voi ch'entrate.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.05.2005 (Вт) 17:04

Да...

Я и так каждый символ Mid'ом прохожу, так ещё это делать два раза?! От тормоза будуть!!! Ручные!!!
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

След.

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

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

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

    TopList