Ввод массива hex-чисел

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

Ввод массива hex-чисел

Сообщение 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

:roll:

Код: Выделить всё
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. Разделены должны быть пробелами.

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 26.10.2005 (Ср) 22:54

В противном случае можно проверять каждый раз поле на допустимые символы, но это долго и не рационально! :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.10.2005 (Ср) 23:27

Шумит, правда... :roll:

Код: Выделить всё
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. выгуглил еще кое-что, но этот вариант имхо лучше. 8)

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
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ввод массива hex-чисел

Сообщение 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
Пользователь #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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 124

    TopList