Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 26.10.2005 (Ср) 22:29
Сабж.
В окне программы надо ввести последовательность из 117 чисел в шестнадцатиричном виде. Желательно, чтобы получилось в стиле MaskedEdit. Собственно в MaskedExit нельзя маской задать допустимость цифр и [A-F]. Что посоветуете?
1) Таки заюзать MaskedEdit с ручной проверкой вводимого
2) Написать свою альтернативу. Как именно это проще сделать?
3) Заюзать неизвестный мне контрол?
-
GSerg
-
- Шаман

-
-
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 26.10.2005 (Ср) 22:41
- Код: Выделить всё
Option Explicit
Private Sub Form_Load()
Text1.MaxLength = 117
Text1.Text = vbNullString
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyDelete, vbKeyBack, vbKey0 To vbKey9, vbKeyA To vbKeyF
Case 97 To 102
KeyAscii = KeyAscii - 32
Case Else
KeyAscii = 0
End Select
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 26.10.2005 (Ср) 22:48
Ай-ай-ай. Каюсь, недоговорил.
Числа могут быть 0...255, то бишь 00...FF. Разделены должны быть пробелами.
-
GSerg
-
- Шаман

-
-
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 26.10.2005 (Ср) 23:27
Шумит, правда...
- Код: Выделить всё
Option Explicit
Private Const UNDERSCORE As Integer = 95
Private Const SPACE As Integer = 32
Private Sub Form_Load()
Text1.Font.Name = "Courier New"
Text1.MaxLength = 117 * (2 + 1)
Text1.Text = Replace$(String$(117, vbNullChar), vbNullChar, Chr$(UNDERSCORE) & Chr$(UNDERSCORE) & Chr$(SPACE))
End Sub
Private Sub ReplaceChar(ByVal t As TextBox, ByVal pos As Long, ByVal asc As Integer)
t.SelStart = pos
t.SelLength = 1
t.SelText = Chr$(asc)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim t As Long
t = Text1.SelStart Mod 3
Select Case t
Case 0, 1
Select Case KeyAscii
Case vbKeyDelete
ReplaceChar Text1, Text1.SelStart, UNDERSCORE
Case vbKeyBack
If t = 1 Then
ReplaceChar Text1, Text1.SelStart - 1, UNDERSCORE
Text1.SelStart = Text1.SelStart - 1
End If
Case vbKey0 To vbKey9, vbKeyA To vbKeyF
ReplaceChar Text1, Text1.SelStart, KeyAscii
Case 97 To 102
ReplaceChar Text1, Text1.SelStart, KeyAscii - 32
End Select
Case 2
Select Case KeyAscii
Case vbKeyBack
ReplaceChar Text1, Text1.SelStart - 1, UNDERSCORE
Text1.SelStart = Text1.SelStart - 1
Case vbKeySpace
ReplaceChar Text1, Text1.SelStart, SPACE
End Select
End Select
KeyAscii = 0
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 26.10.2005 (Ср) 23:32
Персональное блюдечко с голубой каемочкой?
Спасибо.
P.S. выгуглил еще кое-что, но этот вариант имхо лучше.

-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 26.10.2005 (Ср) 23:33
Да, и еще
- Код: Выделить всё
Text1.MaxLength = 117 * (2 + 1) - 1
-
GSerg
-
- Шаман

-
-
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 26.10.2005 (Ср) 23:40
Amed писал(а):Да, и еще
- Код: Выделить всё
Text1.MaxLength = 117 * (2 + 1) - 1
Я думал об этом
Тогда измени обработку vbKeyDelete тоже

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 26.10.2005 (Ср) 23:44
И еще
- Код: Выделить всё
If t = 1 Then text1.SelStart = text1.SelStart + 1
для полного счастья
В кирпичи?
-
GSerg
-
- Шаман

-
-
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 26.10.2005 (Ср) 23:48
Эту шумелку? Неа

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 26.10.2005 (Ср) 23:58
ROFL. Я-то сижу, думаю, что значит "шумелка". Взял, решил наушники на пробу надеть и понял
Завтра (вернее, уже сегодня) перепишу на DrawText.
-
GSerg
-
- Шаман

-
-
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 27.10.2005 (Чт) 0:05
У прынцыпе, если пожертвовать скоростью, можно и без DrawText - просто придётся работать с пропертью text, то есть перелопачивать её постоянно

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 27.10.2005 (Чт) 9:39
Нет уж, сделаю на совесть.

-
Andrey Fedorov
-
- Член-корреспондент академии VBStreets

-
-
- Сообщения: 3287
- Зарегистрирован: 21.05.2004 (Пт) 9:28
- Откуда: Москва
Andrey Fedorov » 27.10.2005 (Чт) 10:07
Amed писал(а):Сабж.
В окне программы надо ввести последовательность из 117 чисел в шестнадцатиричном виде. Желательно, чтобы получилось в стиле MaskedEdit. Собственно в MaskedExit нельзя маской задать допустимость цифр и [A-F]. Что посоветуете?
1) Таки заюзать MaskedEdit с ручной проверкой вводимого
2) Написать свою альтернативу. Как именно это проще сделать?
3) Заюзать неизвестный мне контрол?
Э... Grid умеющий работать с массивом, со 117 колонками по 2 символа длиной, и отключенным заголовком. Будет выглядеть и работать так как тебе нужно. Допустимость ввода достаточно легко проверяется.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...
-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 28.10.2005 (Пт) 11:10
Всем спасибо. Шумелка превратилась во вкусный рулез с помощью всего пары изменений.
Form_Load:
- Код: Выделить всё
txtHexStream.MaxLength = 117 * (2+1)
_KeyPress:
- Код: Выделить всё
txtHexStream.Text = Left$(txtHexStream.Text, 117 * (2+1) - 1)
KeyAscii = 0
И еще пришлось чуть-чуть поправить код по нажатию delete'а.
Будет время, - выложу пример.
-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 28.10.2005 (Пт) 15:48
Amed писал(а):Всем спасибо. Шумелка превратилась во вкусный рулез с помощью всего пары изменений.
Ты когда-то давно обещал мой daemon_saver, также превращённый во вкусный рулез, выложить.
Не забыл?

-
Amed
-
- Алфизик

-
-
- Сообщения: 5346
- Зарегистрирован: 09.03.2003 (Вс) 9:26
-
Amed » 28.10.2005 (Пт) 17:34
tyomitch, помню прекрасно. Руки не доходят пока что. Адская круговерть.
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot], PetalBot, SemrushBot, Yandex-бот и гости: 10