powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как программно выделить текст в TextBox-е?
29 сообщений из 29, показаны все 2 страниц
Как программно выделить текст в TextBox-е?
    #32618792
oops1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как программно выделить текст в TextBox-е?
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32618812
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelLength, SelStart, SelText - оно ?
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32618871
oops1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторSelLength, SelStart, SelText - оно ?

А оно же только показывает выделение, но не выделяет само, или я чего-то не понимаю?
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32618915
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, выделяет, а если тебе нужно КОПИРОВАНИЕ - это другое дело...

Что значит "показывает выделение"?
А что, есть скрытое выделение текста :-)?

Или я чего-то не понимаю...
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32618956
oops1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я уже ничего не понимаю? :-(

У меня есть форма, на ней есть TextBox с текстом и курсором; мне нужно чтобы когда юзер зашел на эту форму и не щелкая больше нигде мышкой, начал стучать по клавишам, а текст в TextBox-е сразу саменился на то что он набил.
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32619124
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
У меня есть форма, на ней есть TextBox с текстом и курсором


С каким еще курсором?
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32619154
oops1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторС каким еще курсором?

В LoadForm стоит TextBox1.SetFocus. B результате при открытии формы имею TextBox готовый в редактированию, НО мне нужно чтобы все что в нем было стиралось перед вводом нового текста, а у меня получается что курсор находится перед текстом и все вновь вводимое помещается в начало строки.

(Если, например, мышкой выделить весь текст, и начать вводить, то старый текст, естесственно, удаляется. Мне нужно тоже самое,но без манипуляций с мышкой)
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32619161
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А просто стереть все без таких сложностей?
Text="" ?

Magnus
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32619249
oops1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, так не пойдет. Мне нужно чтобы юзер увидел старый текст, до того как начал вводить новый
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32619269
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так big-duke же сказал что использовать. Неужели так сложно F1 нажать и самому написать 2 строки?

Private Sub Form_Load()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub


Magnus
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32619346
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Magnus

Ну зачем Вы :-)...

Я уже чуть было это запостил, и, в последний момент, решил - пусть человек сам F1 нажмет, ведь полезно самому до чего-то дойти, тем более уж пихают, пихают, осталось чуть-чуть :-)...
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32619436
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж, так вышло уж :)
Я и сам, того же метода стараюсь придерживаться, подсказать как найти а не как сделать. :)

Расслабился.
Буду внимательнее.

Magnus
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32620217
oops1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо конечно за подсказку "сквозь зубы"

А на счет F1 - нажимал я его, нажимал. И все в чем ошибся, так
Text1.SelStart = 1, а вы сразу F1, F1.

А давайте закроем форум и одну большую F1 напишем. Нехрен чайникам вообще на форумы лазить, гениев отвлекать
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32620598
oops1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и еще! Предложенный вами метод работает только в VB.NET, но не в VB 6.
Нажимаем вашу любимую клавищу F1 и читаем:

автор
SelLength — returns or sets the number of characters selected.

SelStart — returns or sets the starting point of text selected; indicates the position of the insertion point if no text is selected.

SelText — returns or sets the string containing the currently selected text; consists of a zero-length string ("") if no characters are selected.
These properties aren't available atdesign time


Разрешите спросить, где тут написано, что этими командами можно чего то выделить?
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32620669
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м-да..
1. пуск-программы - visual basic 6.0
2. new - standart - exe
3. add textbox - text1
4. add commandbutton - command1
5.
Private Sub Command1_Click()
Text1.Text = "TEST"
Text1.SelStart = 0
Text1.SelLength = 2
Text1.SetFocus
End Sub
6. f5
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32620850
oops1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо конечно, но я понял это моя вина, извиняюсь. Тот пример который я привел, он упрощенный, и в нем все действительно работает. У меня приложение посложнее, в нем после появления TextBox - просто пропадает фокус и сделовательно исчезает выделение.

Все равно спасибо за заботу. :-)
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32620869
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oops1Да и еще! Предложенный вами метод работает только в VB.NET, но не в VB 6.
Нажимаем вашу любимую клавищу F1 и читаем:

автор
SelLength — returns or sets the number of characters selected.

SelStart — returns or sets the starting point of text selected; indicates the position of the insertion point if no text is selected.

SelText — returns or sets the string containing the currently selected text; consists of a zero-length string ("") if no characters are selected.
These properties aren't available atdesign time


Разрешите спросить, где тут написано, что этими командами можно чего то выделить?

Так там только о выделении и написано. Количество выделенных, старт выделения, строка с выделением. :)
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32624979
Radist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики!
Помягче, помочь - так момочь, а не нагибать человека. Не "мастеритесь", как говаривал мой Учитель. "Все там были. И будем".
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #32625340
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RadistМужики!
Помягче, помочь - так момочь, а не нагибать человека. Не "мастеритесь", как говаривал мой Учитель. "Все там были. И будем".
Никто никого не нагибал. Ты о чем? На мой взгляд лучшая помощь - подвести человека к решению а не выдавать готовый код. Тем более в такой простой ситауции. Научить находить решение. За свою бытность на этом форуме и других, много раз наблюдал ситуации когда люди привыкшие получать готовые ответы, писали свои аппликухи с помощью всего форума, спрашивая буквально каждый шаг.
Кстати и по собственному опыту так же. Благодарен людям которые отвечали мне наводками а не готовыми решениями.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как программно выделить текст в TextBox-е?
    #36693986
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите.
Как запретить выделять текст в TextBox мышкой и соот-но с помощью Shift в прово и в лево.
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36693995
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Timer1_Timer()
If Text1.SelLength >  0  Then
Text1.SelLength =  0 
End If
End Sub
Обленивились все :)
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36694030
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kiv-1980, Спасибо помогло.
Почему обленились я искал нашел только это

http://kbyte.ru/ru/Programming/Sources.aspx?id=581&mode=show

:)
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36694039
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kiv-1980,

Как-то некошерно... таймер гонять...
Может на MouseUp и на KeyUp повесить? (не пробовал, лень :) )
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36694082
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valdemar_ru kiv-1980, Спасибо помогло.
Почему обленились я искал нашел только это

http://kbyte.ru/ru/Programming/Sources.aspx?id=581&mode=show

:)
Так это VB.Net, если прикрутите к VB, почему бы и нет.
И потом в этом топике и был указан по сути ответ - Text1.SelLength .

Shocker.Prokiv-1980,

Как-то некошерно... таймер гонять...
Может на MouseUp и на KeyUp повесить? (не пробовал, лень :) )
Неа, не пойдет этот вариант, мышку двигать нужно, KeyUp вообще не вариант.
Таймер на мой взгляд самый простой и эффективный выход.
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36694169
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: kiv-1980
> Таймер на мой взгляд самый простой и эффективный выход.

А по моему самый простой и эффективный вариант - сабкласс текстбокса и блокировка сообщения выделения текста
Я бы однозначно пошел-бы по этому пути. Даже не задумываясь

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36694290
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос, Вы лучебы написали хотябы примерно как это сделать :)
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36694426
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: valdemar_ru
> Игорь Горбонос, Вы лучебы написали хотябы примерно как это сделать :)

Начну с теории
Все что делается в операционной системе виндовс делается через механизм сообщений, для этого у каждого окона(в том
числе и оконного контрола) есть функция приема и обработки этих самых сообщений. Так вот термин subclass обозначает
подмену стандартной функции обработки сообщений, на пользовательскую для придания каких-то спецефичиских особенностей,
которые невозможно получить стандартными способами.

Теперь практика:
Для реализации сабклассинга нам понадобится стандартный модуль со следующим содержанием:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
Option Explicit


' Константа для указания что мы хотим получить/установить адрес оконной функции
Private Const GWL_WNDPROC = - 4 

Private lpPrevWndProc As Long
Private gHW As Long

Public Declare Function DefWindowProc Lib "user32" Alias _
   "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias _
   "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
    ByVal hwnd As Long, ByVal Msg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias _
   "SetWindowLongA" (ByVal hwnd As Long, _
    ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Sub Hook(gHW_ As Long)
    'Start subclassing.
' Сохраняем переданный hWnd для последующего возврата стандартной оконной функции
    gHW = gHW_
' Подменяем стандартную оконную функцию на пользовательскую
' Адрес старой функции сохраняется в переменной lpPrevWndProc и нужен
' для вызова стандартной функции, а так-же для возврата на место, когда все закончим :)
    lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
       AddressOf WindowProc)
End Sub

Public Sub Unhook()
    Dim temp As Long

    'Cease subclassing.
' Снимаем свой сабклассинг - возвращаем стандартную оконную функцию.
    temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
   ByVal wParam As Long, ByVal lParam As Long) As Long
  ' Пользовательская оконная функция. Имя может быть произвольным, имена параметров тоже.
' Но! к таким имена все привыкли, поэтому рекомендую не менять имена параметров :)

' здесь можно написать Select Case - если много сообщений нужно обрабатывать
' или обойтись простым If

' все сообщения, которые нас НЕ интересуют должны отправлятся на обработку в стандартную оконную функцию:
        WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, _
           wParam, lParam)
End Function
Теперь этот модуль можно подключить к проекту и задействовать механизм сабклассинга можно следующим образом:
Например нам необходимо подменять ввод символа "точка"(.) на "запятую"(,) с клавиатуры с TextBox. Для этого нам
необходимо обратится к документации (MSDN) и там выяснить, что сообщение которое передает в контрол TextBox вводимые
символы называется WM_CHAR. В wParam - передается собственно код вводимого символа(его и будем анализировать), а в
lParam - передается дополнительная информация о состоянии клавишь спец-назначения(Ctrl, Alt etc)(в данном примере она
нас не интересует). Все сообщения - это константы. Их нужно просто найти :). Найти можно в любом PlatformSDK для
виндовс. Так-же эти и многие други объявления можно найти в APIView от книги Эпплмана VB porgamming Guide to the Win32
API или с VB6 поставлялась утилита API Viewer.
Таким образом модуль сабклассинга будет выглядеть так:

Модуль сабклассинга
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Option Explicit


' Константа для указания что мы хотим получить/установить адрес оконной функции
Private Const GWL_WNDPROC = - 4 
' Константа идентифицирующая сообщение
Private Const WM_CHAR& = &H102

Private lpPrevWndProc As Long
Private gHW As Long

Public Declare Function DefWindowProc Lib "user32" Alias _
   "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias _
   "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
    ByVal hwnd As Long, ByVal Msg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias _
   "SetWindowLongA" (ByVal hwnd As Long, _
    ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Sub Hook(gHW_ As Long)
    'Start subclassing.
' Сохраняем переданный hWnd для последующего возврата стандартной оконной функции
    gHW = gHW_
' Подменяем стандартную оконную функцию на пользовательскую
' Адрес старой функции сохраняется в переменной lpPrevWndProc и нужен
' для вызова стандартной функции, а так-же для возврата на место, когда все закончим :)
    lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
       AddressOf WindowProc)
End Sub

Public Sub Unhook()
    Dim temp As Long

    'Cease subclassing.
' Снимаем свой сабклассинг - возвращаем стандартную оконную функцию.
    temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
   ByVal wParam As Long, ByVal lParam As Long) As Long
  ' Пользовательская оконная функция. Имя может быть произвольным, имена параметров тоже.
' Но! к таким имена все привыкли, поэтому рекомендую не менять имена параметров :)

' здесь можно написать Select Case - если много сообщений нужно обрабатывать
' или обойтись простым If
    If uMsg = WM_CHAR Then
        If wParam = Asc(".") Then
            wParam = Asc(",")
        End If
    End If
' все сообщения, которые нас НЕ интересуют должны отправлятся на обработку в стандартную оконную функцию:
        WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, _
           wParam, lParam)
End Function

Добавляем этот модуль к проекту, добавляем на форму TextBox и в форме прописываем следующий код:
Модуль формы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Option Explicit


Private Sub Form_Load()
' Делаем подмену оконной функции
Hook Text1.hwnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
' Возвращаем стандартную оконную функцию
Unhook
End Sub

Запустив, легко убедится, что ввести точку с клавиатуры никак не получится.

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

З.Ы. Тебе осталось выяснить какими сообщениями делается выделение в текстбоксе и заблокировать их. Дерзай

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36694579
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос ,

Поэтому и указал простой вариант.
При использовании сабклассинга, необходимость в таймере полностью отсутсвует. Но и пользоваться им нужно аккуратней, проект вылетает на ура :) Да и кода поболее будет.
Если автор немного покапается думаю и его прикрутит.
...
Рейтинг: 0 / 0
Как программно выделить текст в TextBox-е?
    #36696000
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,

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


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