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

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

Модератор: help_please, прошу изучить правила форума
...
Рейтинг: 0 / 0
visual basic
    #38057479
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшой пример. Перенести код в модуль.
Код: 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
visual basic
    #38058264
help_please
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,
Спасибо большое, попробую)
...
Рейтинг: 0 / 0
visual basic
    #38060851
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не использовать inputbox - это устаревшее средство, требующее жонглирования API функциями. Проще написать свою формочку.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / visual basic
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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