Мои вопрос такой: Программа перехватывает символы введенные с клавиатуры при событии KeyPress,а потом их подменевает. Скажем, символ "U" на "Ы" и т.д(вобщем, меняем транслит на русский). Так вот, если я пользуюсь TextBox- все работает, а если Rich TextBox, то печатаются какие-то каракули. Можно-ли этого избежать? Если да, то как? И, вообще, что это за проблемма такая?
Вообще-то эти кодировки - дикие дебри... Очень советую проверить как будет работать твоя программа на машинах с разными кодовыми страницами (отличными от русской). Хочешь - погоняю ее на немецкой...
To Gogic: а юзер тоже будет должен лазить в реестр и чего-то там менять.
На Сях такую проблемму я не встречал. Может попробывать отлавливать 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
Символ вставляется перед курсором. При 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"