Rich Text Box

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

Rich Text Box

Сообщение Faoren » 09.03.2005 (Ср) 15:14

Возникло 2 вопроса. Во-первых, можно ли отключить автоперенос строки, т.е. активизировать горизонтальную прокрутку? Во-вторых, чтобы производить действие с участком текста, я указываю selstart и sellenght. Это приходится делать много раз. Можно избежать перемещения указателя, чтоб экран не "скакал"?

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.03.2005 (Ср) 15:59

Перед сменой SelStart и SelLenght запрещай обновление RTB, а после опять разрешай и обновляй.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

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

Re: Rich Text Box

Сообщение Ennor » 09.03.2005 (Ср) 19:50

Faoren писал(а):...
можно ли отключить автоперенос строки, т.е. активизировать горизонтальную прокрутку?
...

Можно. Свойство RightMargin. Я обычно выставляю один миллион.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 09.03.2005 (Ср) 20:07

Есть способ понадежнее:
Код: Выделить всё
Option Explicit
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   ByVal lParam As Long) As Long

Private Const WM_USER = &H400
Private Const EM_SHOWSCROLLBAR As Long = (WM_USER + 96)
Private Const EM_SETTARGETDEVICE = (WM_USER + 72)
Private Const SB_BOTH As Long = 3

Private Sub Form_Load()
    SendMessageLong Rich.hwnd, _
    EM_SHOWSCROLLBAR, SB_BOTH, 1

    SendMessageLong Rich.hwnd, _
    EM_SETTARGETDEVICE, 0, 1
End Sub
Моду создают модоки, а распространяют модозвоны.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Re: Rich Text Box

Сообщение Ruslan Demidow » 10.03.2005 (Чт) 10:14

Ennor писал(а):
Faoren писал(а):...
можно ли отключить автоперенос строки, т.е. активизировать горизонтальную прокрутку?
...

Можно. Свойство RightMargin. Я обычно выставляю один миллион.

Кстати, а кто может мне подсказать, как установить RightMargin в зависимости от количества символов в строке.
Т.е. имеем RTB, в нём установлен определённый шрифт. Мне нужно установить авто-перенос строки например на 80-ом символе, не зависимо от ширины самого RTB.
Пробовал расчитывать исходя из ширины буквы выведенной в RTB.
Т.е. брал TextWidth(Left(TRB.Text,1)) * КоличествоСимволов.
Но явно выходит не то.
1. Как установить RightMargin равным ширине определённого количества символов с учётом шрифта установленного RTB?

2. Ну и в догонку. Если установить в RTB выравнивание по центру, то получается что строка просто начинается с определённого места. А если я сохраняю в обычный текст. То как мне определить, что данных текст отцентрирован.
Ведь в RTB.Text нет никаких маркеров, которые указывали бы, что нужно делать определённый отступ.
Может быть сумбурно выразился, но вот мне в редакторе (используется RTB) необходимо реализовать выравнивание текста по разным критериям (лево, право, центр, ширина). А отправляться текст сообщения будет в обычном виде. И смотреться будет тоже в обычном.
Т.е. я при создании текста хочу дать пользователю максимум удобств. А при сохранении текста сообщения, хочу сохранить всё что пользователь наделал за полтора часа мучений по украшательству текста.
Подскажите плиз.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

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

Сообщение tyomitch » 10.03.2005 (Чт) 10:45

Ответ на 1: если у тебя моноширинный шрифт, то ширину символов можно узнать через GetCharABCWidths. Если пропорциональный - то тоже можно, но тебе это не поможет: букв i всегда поместится больше, чем букв w.
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 11.03.2005 (Пт) 12:42

tyomitch писал(а):Ответ на 1: если у тебя моноширинный шрифт, то ширину символов можно узнать через GetCharABCWidths. Если пропорциональный - то тоже можно, но тебе это не поможет: букв i всегда поместится больше, чем букв w.

Ну а я выведу по максимуму (т.е. возьму ширину буквы "Ш" или "W").
Тем более я знаю данные шрифта, которые используются в RTB.
Всё же как его расчитать?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух


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

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

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

    TopList