Что за глюки с RichTextBox? И как осуществить контекстное м.

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

Что за глюки с RichTextBox? И как осуществить контекстное м.

Сообщение Rody66 » 02.10.2011 (Вс) 13:33

Встала задача - написать элементарный текстовый редактор. Условия следующие: умещать текст до 10 мб., возможность считывания по строкам, и, само собой, присутствие контекстного меню. Конечно же, первое что мне выдал поиск - это RichTextBox. Но при работе с ним возникло несколько вопросов:
1. по дефолту нет контекстного меню;
2. почему то при работе с ним бейсик ведет себя странно, а именно, в процессе отладки либо повисает, либо вообще вылетает, и так постоянно;
3. какие то непонятные проблемы со скроллом, а именно горизонтальная прокрутка, по какой то причине она вообще не работает, то есть, если в стандартном текстбоксе с вертикальным и горизонтальным скроллбаром, просто вводить текст в 1 линию, то горизонтальный скролл по-тихоньнку будет "сужаться", и так до тех пор, пока не будет начата новая строка, после которой все пойдет сначала. В ричтекстбоксе же, независимо от выбранного варианта прокрутки, горизонтальная прокрутка вообще не работает (только если отключить мультилайн), и получается эффект "переноса по строкам", так вот что я делаю не так, и как надо делать?
По первому пункту в инете и на форуме почти ничего дельного нет, единственное, что я нашел так эту апи функцию GetSystemMenu, с которой я не смог разобраться.
Кстати, может быть можно как то "расширить" обычный текст бокс? В инете уже отыскал пример того, как можно с текстбокса считывать строки, таким образом, единственное, что меня в нем не устраивает, так это ограничение в 64 кбайта. Заранее благодарен за ответы.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение Хакер » 02.10.2011 (Вс) 17:49

Rody66 писал(а):... до 10 мб., возможность считывания по строкам, и, само собой ...

Rody66 писал(а):... пример того, как можно с текстбокса считывать строки, таким образом ...

Что это, чёрт возьми, значит? :|

Rody66 писал(а):1. по дефолту нет контекстного меню;

А с чего оно должно быть? И если бы оно было, какие пункты оно должно было бы содержать? Телепатически угадываемые? Есть меню по умолчанию, с типичными пунктами (вставить, копировать, вырезать и т.п.), оно включается свойством AutoVerbMenu.

Rody66 писал(а):2. почему то при работе с ним бейсик ведет себя странно, а именно, в процессе отладки либо повисает, либо вообще вылетает, и так постоянно;

Не замечал. Сервиспаки стоят?

Rody66 писал(а):3. какие то непонятные проблемы со скроллом, а именно горизонтальная прокрутка, по какой то причине она вообще не работает, то есть, если в стандартном текстбоксе с вертикальным и горизонтальным скроллбаром, просто вводить текст в 1 линию, то горизонтальный скролл по-тихоньнку будет "сужаться", и так до тех пор, пока не будет начата новая строка, после которой все пойдет сначала. В ричтекстбоксе же, независимо от выбранного варианта прокрутки, горизонтальная прокрутка вообще не работает (только если отключить мультилайн), и получается эффект "переноса по строкам", так вот что я делаю не так, и как надо делать?

Вот это интересно, сейчас посмотрим.

Rody66 писал(а):таким образом, единственное, что меня в нем не устраивает, так это ограничение в 64 кбайта.

Афаик, это не обойти.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 02.10.2011 (Вс) 21:48

Rody66 писал(а):какие то непонятные проблемы со скроллом

Это не проблемы. Так и должно быть. RTF подразумевает автоматический перенос по строкам и разделение абзацев с помощью \par (ещё есть принудительный разрыв строки \line). Ты же не жмёшь в Word'е Enter (или Shift+Enter), но получаешь от него автоматический перенос строк. На этом форуме ты тоже не ставишь переводы строк внутри абзаца. Rtf создавался как универсальный формат форматированного текста.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение Хакер » 02.10.2011 (Вс) 21:50

Qwertiy писал(а):На этом форуме ты тоже не ставишь переводы строк внутри абзаца. Rtf создавался как универсальный формат форматированного текста.

Это называется перенос слов. В ричэдите его можно отключить. Но я не знаю как, и не могу найти в документации. Надо раз-реверс-инженирить Bred2r и посмотреть, как там это сделано.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение Rody66 » 02.10.2011 (Вс) 22:57

оно включается свойством AutoVerbMenu.

Хакер как всегда гениален, большое спасибо, как раз то, что искал :\
Что это, чёрт возьми, значит?

Дак то и значит. Считывать текст по строкам, например как умеет php.
А с чего оно должно быть? И если бы оно было, какие пункты оно должно было бы содержать? Телепатически угадываемые? Есть меню по умолчанию, с типичными пунктами (вставить, копировать, вырезать и т.п.)

Ну например с того, что текстбокс в вб по умолчанию контекстное меню имеет.
Это не проблемы. Так и должно быть. RTF подразумевает автоматический перенос по строкам

Вы правы, что это не проблема. В общем то, можно и так работать, но все-таки было бы интересно узнать как данную опцию можно отключить.
По поводу глюков, сейчас ребутнался, пока все в порядке, посмотрим что дальше будет.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение Хакер » 02.10.2011 (Вс) 22:59

Rody66 писал(а):Дак то и значит. Считывать текст по строкам, например как умеет php.

Бред какой-то.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение Rody66 » 02.10.2011 (Вс) 23:11

Бред какой-то.

Прошу прощения, насчет rtextbox не так понял, но обычный текстбокс с включенным мультилайн вроде как можно парсить на строки. Линк с примером в лс кинул.
Сейчас попробую тоже самое с rtextbox.
Последний раз редактировалось Rody66 02.10.2011 (Вс) 23:19, всего редактировалось 1 раз.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение Rody66 » 02.10.2011 (Вс) 23:18

Да, и с rtb отлично работает. Код следующий:
Код: Выделить всё
'Получение содержимого n-ой строки в Multiline TextBox.
'Расположите на форме элемент CommandButton и элемент TextBox.
'Установите свойство Multiline элемента TextBox как True.
'Синтаксис вызова функции прост: GetLine(НазваниеОкна.hWnd, НомерСтроки).
'Данный пример (при нажатии на кнопку) покажет содержимое 2-й строки элемента TextBox.

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long
Const EM_LINEINDEX = &HBB
Const EM_LINELENGTH = &HC1
Const EM_GETLINE = &HC4
Public Function GetLine(hWnd As Long, Line As Long) As String
Dim sBuf As String, nLen As Long, nIndex As Long
nIndex = SendMessage(hWnd, EM_LINEINDEX, Line - 1, ByVal 0&)
If nIndex < 0 Or Line <= 0 Then Exit Function
nLen = SendMessage(hWnd, EM_LINELENGTH, nIndex, ByVal 0&)
sBuf = Space(nLen + 1)
Mid$(sBuf, 1, 1) = Chr$(nLen And &HFF)
Mid$(sBuf, 2, 1) = Chr$(nLen \ 256)
SendMessage hWnd, EM_GETLINE, Line - 1, ByVal sBuf
GetLine = Left$(sBuf, nLen)
End Function

Private Sub Form_Load()
Text1.Text = "1111111" & vbCrLf & "22222" & vbCrLf & "3333" & vbCrLf & "4444"
End Sub

Private Sub Command1_Click()
MsgBox GetLine(Text1.hWnd, 2)
End Sub

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

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение alibek » 03.10.2011 (Пн) 16:26

Хакер писал(а):В ричэдите его можно отключить.

Его не надо отключать.
Надо просто задать ширину текста.
Если ширина текста будет больше ширины контрола, то появится скролл.
Lasciate ogni speranza, voi ch'entrate.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение Rody66 » 03.10.2011 (Пн) 17:36

Надо просто задать ширину текста.

Как бы сие действие совершить?

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

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение alibek » 04.10.2011 (Вт) 10:08

Задать правильный RightMargin (он должен быть не меньше самой длинной строки).
Lasciate ogni speranza, voi ch'entrate.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Что за глюки с RichTextBox? И как осуществить контекстно

Сообщение Rody66 » 04.10.2011 (Вт) 13:11

Задать правильный RightMargin (он должен быть не меньше самой длинной строки).

Выставил в 50000 и все получилось, большое спасибо.
Кстати, почему то только этот проект стабильно вылетает и глючит, отладку производить вообще не реально, может быть кто-нибудь сталкивался?


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

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

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

    TopList