Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Замена символов Добавлено: 12.10.03 23:44  

Автор вопроса:  gallo
Мои вопрос такой:  Программа перехватывает символы введенные с клавиатуры при событии KeyPress,а потом их подменевает. Скажем, символ "U" на "Ы" и т.д(вобщем, меняем транслит на русский). Так вот, если я пользуюсь TextBox- все работает, а если Rich TextBox, то печатаются какие-то каракули. Можно-ли этого избежать? Если да, то как? И, вообще, что это за проблемма такая?

Ответить

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

Номер ответа: 1
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #1 Добавлено: 14.10.03 15:09

Попробуй залезть в системный реестр, найди там раздел

HKLM\System\CurrentControlSet\Control\Nls\CodePage и

изменить значение переменной 1251 с "CP_1251.nls" на

"CP_1252.nls"

Ответить

Номер ответа: 2
Автор ответа:
 RotesByte



Вопросов: 11
Ответов: 69
 Web-сайт: koch.onestop.net
 Профиль | | #2
Добавлено: 14.10.03 18:51

To gallo: Попробуй в RichTextBox совать символы в unicod'e.

Скорее всего, контрол получает символ с ascii-кодом, большим 127 и использует для его отображения неправильную кодовую страницу.

Наверное, ему можно указать чтобы использовaл кириллицу, но если контрол понимает unicode, то лучше подсовывать ему unicode-коды.

Для проверки: 
Ы = 1067 (unicode)
Д = 1044
Щ = 1065

Вообще-то эти кодировки - дикие дебри...
Очень советую проверить как будет работать твоя программа на машинах с разными кодовыми страницами (отличными от русской).
Хочешь - погоняю ее на немецкой...

To Gogic: а юзер тоже будет должен лазить в реестр и чего-то там менять.

Ответить

Номер ответа: 3
Автор ответа:
 gallo



Вопросов: 5
Ответов: 3
 Профиль | | #3 Добавлено: 15.10.03 03:35

Контрол  не понимает  unicode (проверил).

На Сях такую проблемму я не встречал.
Может попробывать отлавливать ScanCode?
Я только не разберусь никак....
Контрол выводит символ при KeyDoun, но этот-же символ я могу подменить в KeyPress. Событие KeyPress происходит после KeyDoun. Странно!
Рассуждаю:
Положем- при событии KeyDoun был отловлен ascii и сразу же пропечатан контролом.
Отпустив клавишу клавиатуры, вызывается KeyUp,который удостоверевшийся, что был нажат именно ascii передает управление KeyPress. И вот здесь я его(символ) меняю. Но, позвольте, как-же
он меняется если уже давно пропечатан контролом.
Что-же контрол  стирает последний выведенный символ, а потом печатает новый?? А если я его не менял? Значит еще одна проверка. Что-то я , господа, не просццу никак. И вот еще, обратите внимание!

Private Sub Text1_KeyPress(KeyAscii As Integer)
Text1.Text = "Hallo"
KeyAscii = Asc("a")
End Sub

Выводит:  "aHallo", а я пологал , что выведет "Halloа" 
И как это понимать??( Может, я неправильно думаю- ореентируюсь на С++, Java)
ПОМОГИТЕ раобраться! Я не хочу разочаровываться, ведь это моя первая программа на VB  :)   

Заранее благодарю :)

 

Ответить

Номер ответа: 4
Автор ответа:
 RotesByte



Вопросов: 11
Ответов: 69
 Web-сайт: koch.onestop.net
 Профиль | | #4
Добавлено: 15.10.03 12:39

Символ вставляется перед курсором. При Text1.Text = .... курсор как раз оказывается в самом начале. Замени в своём примере .Text на .SelText - увидишь.
Чтобы нажатый символ не вставлялся, напиши в самом конце KeyAscii = 0

Не забудь поставить Form.KeyPreview = True

Вот, по-моему, то,что тебе надо:


Private Sub Text1_KeyPress(KeyAscii As Integer)
' ASCII Table http://www.asciitable.com/
    If (KeyAscii > 31) Then
        Text1.SelText = "-" & Chr(KeyAscii) & "*"
    Else
        Select Case KeyAscii
            Case 13:
                MsgBox "Enter"

' Остальное обработай сам


        End Select
    End If
    KeyAscii = 0
End Sub

Ответить

Страница: 1 |

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



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