Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: TextBox Locked Добавлено: 17.09.04 21:25  

Автор вопроса:  Lister | ICQ: 298621256 

Ответить

  Ответы Всего ответов: 44  

Номер ответа: 16
Автор ответа:
 Grayich



ICQ: 208280504 

Вопросов: 56
Ответов: 164
 Web-сайт: grayich.narod.ru
 Профиль | | #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-сайт: grayich.narod.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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, пожалуй ты прав. У апишного текстбокса есть свойство
ES_READONLY
, про которое почему-то в VB забыли...

Ответить

Номер ответа: 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:

ES_READONLY
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:
про которое почему-то в VB забыли


Да не забыли, это Locked и есть...

Ответить

Номер ответа: 28
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #28 Добавлено: 05.10.04 14:56
Да не забыли, это Locked и есть...

Неа. 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
        ;DoEvents
        PopupMenu mnuEmpty
        ' в меню mnuEmpty можно оставить только пункт "Копировать"
        Text1.Enabled = True
        LockWindowUpdate 0&
    End If
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    ' Блокировка Shift+Insert
    ;Dim 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 по которому вызывается системное меню..

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам