Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / visual basic / 7 сообщений из 7, страница 1 из 1
29.11.2012, 09:40
    #38057396
help_please
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
visual basic
Подскажите пожалуйста как сделать так, что бы при вводе данных(Inputbox) выполнялась их проверка? т. е. пользователю можно было бы ввести только числа.
...
Рейтинг: 0 / 0
29.11.2012, 09:41
    #38057397
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
visual basic
При вводе - никак. Разве что нарисовать свой InputBox.
...
Рейтинг: 0 / 0
29.11.2012, 09:50
    #38057412
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
visual basic
help_please,

Разве попробовать как нибудь через таймер, найти окно InputBox и изменить стиль бокса + ES_NUMERIC, может прокатит. Не пробовал. А вот похожий пример: 1796247 работал
...
Рейтинг: 0 / 0
29.11.2012, 09:52
    #38057413
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
visual basic
Не, ну можно, конечно, через API извращаться, но гораздо проще сделать свою формочку для ввода или проверять данные после ввода, а не при вводе

Модератор: help_please, прошу изучить правила форума
...
Рейтинг: 0 / 0
29.11.2012, 10:59
    #38057479
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
visual basic
Небольшой пример. Перенести код в модуль.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
Option Explicit

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpszClass As String, ByVal lpszTitle As String) As Long
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Enum eStyleBox
    ES_DEFAULT = &H0
    ES_UPPERCASE = &H8
    ES_NUMBER = &H2000
    EM_PASSWORD = &HCC
End Enum


Private Const GWL_STYLE = (-16)
Private Const GWL_EXSTYLE = (-20)

Private m_strTitle As String
Private m_StyleBox As eStyleBox

Public Function InputBoxEx(ByVal strPromt As String, _
                           ByVal strTitle As String, _
                           Optional ByVal strDefault As String = "", _
                           Optional ByVal StyleBox As eStyleBox = eStyleBox.ES_DEFAULT _
                           ) As String
    m_strTitle = strTitle
    m_StyleBox = StyleBox
    
    SetTimer Application.hwnd, 0&, 100&, AddressOf TimerProc
    InputBoxEx = InputBox(strPromt, strTitle, strDefault)
End Function

Private Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
    Dim hEditWnd As Long
    hEditWnd = FindWindowEx(FindWindow("#32770", m_strTitle), 0&, "Edit", vbNullString)
    
    If hEditWnd > 0 Then
        Select Case m_StyleBox
            Case EM_PASSWORD
                SendMessage hEditWnd, EM_PASSWORD, 42&, 0&
            Case ES_NUMBER, ES_UPPERCASE
                SetWindowLong hEditWnd, GWL_STYLE, GetWindowLong(hEditWnd, GWL_STYLE) Or m_StyleBox
        End Select
    End If
    
    KillTimer hwnd, idEvent
End Sub

Работает в Excel'е, иначе если в VB6 поменять хендл в SetTimer

Использовать так:
Код: vbnet
1.
2.
3.
Dim sText As String
sText = InputBoxEx("Введите числа", "Ввод данных", "", ES_NUMBER)
sText = InputBoxEx("Введите пароль", "Ввод данных", "", EM_PASSWORD)
...
Рейтинг: 0 / 0
29.11.2012, 15:47
    #38058264
help_please
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
visual basic
VSVLAD,
Спасибо большое, попробую)
...
Рейтинг: 0 / 0
01.12.2012, 04:31
    #38060851
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
visual basic
Не использовать inputbox - это устаревшее средство, требующее жонглирования API функциями. Проще написать свою формочку.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / visual basic / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]