Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / изменение размера TextBox во время редактирования / 4 сообщений из 4, страница 1 из 1
16.04.2004, 20:08
    #32485069
МаксимВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение размера TextBox во время редактирования
Хочу сделать так, чтобы при изменении текста в TextBox свойство TextBox.Width оставалость не изменным, а TextBox.Height изменялось в зависимости от объема введенного тескта. Придумал два варианта, когда текст редактируешь работает нормально. Но когда вставляешь кусок текста из Clipboard размером более 200 000 символов - перерисовка TextBox "тормозит".

Изначально TextBox.Height=285
Первый вариант:
- размер текста в Clipboard 200 000 символов:
- задержка примерно 1 секунда.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
'*** ActiveX Control Event ***
Private Sub txtGridEdit_Change()
Dim i As Long, lngTextLen As Long
    For i= 1  to Len(txtGridEdit.Text)
        If (Asc(Mid(txtGridEdit.Text, i,  1 )) >=  65  And Asc(Mid(txtGridEdit.Text, i,  1 )) <=  90 ) Or _
            (Asc(Mid(txtGridEdit.Text, i,  1 )) >=  192  And Asc(Mid(txtGridEdit.Text, i,  1 )) <=  223 ) Then
            lngTextLen = lngTextLen +  105 
        Else
            lngTextLen = lngTextLen +  90 
        End If
    Next i
    lngTextLen = lngTextLen - CLng(lngTextLen / txtGridEdit.Width) *  950 
    txtGridEdit.Height = (CLng(lngTextLen / txtGridEdit.Width) +  1 ) *  285 
End Sub

Второй вариант (работает быстрее, но все равно "тормозит"):
- размер текста в Clipboard 200 000 символов:
- задержка примерно 0,5 секунды.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
'*** ActiveX Control Event ***
Private Sub txtGridEdit_Change()
Dim i As Long, lngTextLen As Long
    i =  1 
    Do While i < Len(txtGridEdit.Text) +  1 
        If (Asc(Mid(txtGridEdit.Text, i,  1 )) >=  65  And Asc(Mid(txtGridEdit.Text, i,  1 )) <=  90 ) Or _
            (Asc(Mid(txtGridEdit.Text, i,  1 )) >=  192  And Asc(Mid(txtGridEdit.Text, i,  1 )) <=  223 ) Then
            lngTextLen = lngTextLen +  105 
        Else
            lngTextLen = lngTextLen +  90 
        End If
        i = i +  1 
        DoEvents
    Loop
    lngTextLen = lngTextLen - CLng(lngTextLen / txtGridEdit.Width) *  950 
    txtGridEdit.Height = (CLng(lngTextLen / txtGridEdit.Width) +  1 ) *  285 
End Sub

Может кто-нибудь что посоветует? Я предполагаю, что можно сделать и подругому(я в VB новичок).
Интерфес срисовываю с чужого приложения, то-же написанного на VB6, там задержки практически нет.
...
Рейтинг: 0 / 0
17.04.2004, 11:24
    #32485257
МаксимВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение размера TextBox во время редактирования
Нашел в полне приемлемый способ(если кому-то интересно):
Для этого нужно создать дополнительный контрол Label.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub Form_Load()
    Me.Label1.WordWrap = True
    Me.Label1.AutoSize = True
    Me.Label1.Visible = False
End Sub

Private Sub Text1_Change()
    Call TextExtent
End Sub

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Private Function TextExtent()
    Me.Label1.Caption = Me.Text1.Text
    Me.Label1.Width = Me.Text1.Width
    Me.Text1.Height = Me.Label1.Height
End Function


Почему меня на форуме игнорируют? Вроде не рыжий!
...
Рейтинг: 0 / 0
17.04.2004, 12:20
    #32485273
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение размера TextBox во время редактирования
дык ты ж успеваешь ответить на свои вопросы быстрее всех :-) и остальным добавить нечего :-)
...
Рейтинг: 0 / 0
17.04.2004, 15:48
    #32485344
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение размера TextBox во время редактирования
Да и вопрос был задан в пятницу, все уже отдыхают и заливаются пивком :)

Magnus
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / изменение размера TextBox во время редактирования / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]