Страница: 1 | 2 | 3 |
Вопрос: TextBox Locked
Добавлено: 17.09.04 21:25
Автор вопроса: Lister | ICQ: 298621256
Ответы
Всего ответов: 44
Номер ответа: 16
Автор ответа:
Grayich
ICQ: 208280504
Вопросов: 56
Ответов: 164
Web-сайт:
Профиль | | #16
Добавлено: 18.09.04 07:04
А копировать из поля допустимо ?
Номер ответа: 17
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #17
Добавлено: 18.09.04 07:08
Да, допустимо.
Но если копировать допустимо, то будет примерно так:
Private sStr As String
Private Sub Text1_Change()
If Text1.Locked = True Then Text1 = sStr
End Sub
Кривовато, правда
А хотелось бы без копирования...
Номер ответа: 18
Автор ответа:
Grayich
ICQ: 208280504
Вопросов: 56
Ответов: 164
Web-сайт:
Профиль | | #18
Добавлено: 18.09.04 07:24
мдя... если shift+insert заблокировать можно, то на меню мышиное хук нужен полюбому. Может проще взять контрол другой ? Кстати у меня ctrl+c нефурычет только shift+insert.
Номер ответа: 19
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #19
Добавлено: 18.09.04 07:26
ctrl+c у меня тоже не работает
Номер ответа: 20
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #20
Добавлено: 18.09.04 10:55
Хм... может легче ТекстБокс свой на АПИ написать ?
Номер ответа: 21
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #21
Добавлено: 18.09.04 15:28
2 Lister
Ещё вариант, но придётся переменную использовать, если у тебя много текст боксов можно создать массив, и в цикле по всем текстбоксам присвоить значения каждому элементу массива. Я же преведу просто пример с одним текстбоксом.
Dim txt1$
Private Sub Form_Load()
Text1.Locked = True
txt1$ = Text1.Text
End Sub
Private Sub Text1_Change()
If Text1.Text <> txt1$ Then Text1.Text = txt1$
End Sub
Номер ответа: 22
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #22
Добавлено: 18.09.04 17:28
>> на меню мышиное хук нужен полюбому
Необязательно: см. http://www.vbnet.ru/faq/showtopic.asp?id=286
Номер ответа: 23
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #23
Добавлено: 18.09.04 22:55
Короче, все сошлося на Text_Change, так?
И чего тут не пашет? все ОК!
Номер ответа: 24
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #24
Добавлено: 05.10.04 03:55
Да, sne, пожалуй ты прав. У апишного текстбокса есть свойство
Номер ответа: 25
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #25
Добавлено: 05.10.04 04:01
Кстати, заметил странность, которую не могу объяснить...
Вот такая штука работает и запрещает вводить в текстбокс символы кроме цифр:
[CODE] hEdit=txt.hWnd
lStyle = GetWindowLong(hEdit, GWL_STYLE&)
lRetval = SetWindowLong(hEdit, GWL_STYLE&, lStyle Or ES_NUMBER)[/CODE]
А вот эта штука, которая по-идее должна была разрешать только копирование текста из текстбокса, не работает...
Может кто знает, почему?
[CODE] hEdit=txt.hWnd
lStyle = GetWindowLong(hEdit, GWL_STYLE&)
lRetval = SetWindowLong(hEdit, GWL_STYLE&, lStyle Or ES_READONLY)[/CODE]
Номер ответа: 26
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #26
Добавлено: 05.10.04 12:25
Цитата из MSDN:
Prevents the user from typing or editing text in the edit control.
To change this style after the control has been created, use the EM_SETREADONLY message.
Номер ответа: 27
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #27
Добавлено: 05.10.04 12:32
2Lister:
Да не забыли, это Locked и есть...
Номер ответа: 28
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #28
Добавлено: 05.10.04 14:56
Неа. Locked запрещает вводить символы только с клавиатуры, а Paste при нем работает
ES_READONLY такого не допускает. Paste при нем НЕ работает
Номер ответа: 29
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #29
Добавлено: 05.10.04 16:28
Попробуй вот это (код формы):
Private Const EM_SETREADONLY As Long = &HCF
Private Declare Function LockWindowUpdate Lib "User32" (ByVal hwndLock As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any) As Long
Private Sub Form_Load()
SendMessage Text1.hwnd, EM_SETREADONLY, 1, 0
Text1.Text = "Old text"
End Sub
Private Sub Form_Click()
' Щелчок по форме эмулирует вставку из буфера обмена через Shift+Insert
' (Ctrl+V - можно и не эмулировать, т.к. оно и не работает, слава богу)
Clipboard.SetText "NEW TEXT"
With Text1
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
SendKeys "+{INSERT}" ' << посылаем Shift+Insert - работает!
' Однако, спасаемся от Shift+Insert просто - см. событие Text1_KeyDown
End Sub
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
LockWindowUpdate Text1.hwnd
Text1.Enabled = False
 oEvents
PopupMenu mnuEmpty
' в меню mnuEmpty можно оставить только пункт "Копировать"
Text1.Enabled = True
LockWindowUpdate 0&
End If
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
' Блокировка Shift+Insert
 im shiftDown As Boolean
shiftDown = (Shift And vbShiftMask) > 0
If KeyCode = vbKeyInsert And shiftDown Then KeyCode = 0
End Sub
Номер ответа: 30
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #30
Добавлено: 06.10.04 00:07
Я тоже долго маялся с этой бедой.. В конце концов поставил хук на окно и все забыл.. Заблокировал и системное меню и Ctrl+V и все остальное.
И кстати.. Ни один из предыдущих примеров не блокирует RightClick по которому вызывается системное меню..