Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/20: Рейтинг темы: голосов - 20, средняя оценка - 4.85
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800

Как создать на VB6 уникодный InputBox? Чтобы при вводе в InputBox можно было получать китайские иероглифы и так далее

15.11.2023, 22:50. Показов 5135. Ответов 51

Студворк — интернет-сервис помощи студентам
Как создать на VB6 уникодный InputBox? Чтобы при вводе в InputBox можно было получать китайские иероглифы и так далее. Текстовое поле InputBox'а, что самое интересное и так позволяет вводить китайщину, но вот на выходе функции мы получаем уже знаки вопросов...

Добавлено через 54 минуты
Хотите чудо? InputBox создаётся с ANSI-окнами, и с ANSI текстовым полем, без стилизации окна манифестом...
Со стилизацией манифестом уже создаётся Unicode окна и уникодное текстовое поле ввода... Это очень странно и меня очень шокировало...

Добавлено через 15 минут
Таким образом, уникодный InputBox будет работать только если стилизовать программу, применить стили красивостей окон. В противном случае пришлось бы уничтожать старый Edit через DestroyWindow и поверх создавать новое текстовое поле через CreateWindowExW... Чтобы работало и без стилей...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2023, 22:50
Ответы с готовыми решениями:

Можно ли настроить Inputbox, чтобы не блокировалась книга и можно было изменять данные в ячейках?
Всем привет! Подскажите, можно ли настроить Inputbox так, чтобы не блокировалась книга и можно было изменять данные в ячейках? Спасибо!

как сделать чтоб при вводе в inputbox вводились толька символы 0.123456789
Вопрос такой как сделать чтоб при вводе в inputbox вводились толька символы 0.123456789 чтоб если ввести чтота другое то появлялось...

Обработать событие OnKeyPress при вводе целого числа в Edit так, чтобы можно было вставить только один знак минус
помогите решить) Обработать событие OnKeyPress при вводе целого числа в Edit так, чтобы можно было вставить только один знак минус в...

51
30.01.2024, 12:25
Студворк — интернет-сервис помощи студентам

Не по теме:

I can, locm, завязывайте с офтопом. Неужели не понятно что человеку нужно для вб6. Причем тут дотнет и пурик?

0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
30.01.2024, 12:43  [ТС]
Пожалуйста, внимательно посмотрите на картинку и поймите чего я хочу. Я хочу разгадать майкрософтовский код "центровки" интпутбокса. Как именно, каким образом и при помощи какого механизча программный код майкрософта центрирует инпутбокс таким образом что он не совсем по центру по вертикали? А чуть выше идеального центра в вертикали. Итак что получается что в самом верху экрана расстояние будет меньше чем внизу по вертикали.
Миниатюры
Как создать на VB6 уникодный InputBox? Чтобы при вводе в InputBox можно было получать китайские иероглифы и так далее  
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
30.01.2024, 12:48  [ТС]
В целях эксперемента я пробовал вызывать этот InputBox на разных разрешениях экрана для того чтобы отследить хоть какие-то цифры которые мне помогли бы найти формулу, но меня огорчило что я так и не сог разгадать формулу, так как цифры перемещения окна по Top всегда какие-то разные никак не могу этого понять до сих пор и разгадать

Добавлено через 1 минуту
Неужели никто не разгадал эту формулу до сих пор. И кстати я до сих пор не понимаю почему окошко инпутбокса не вызывается в центре экрана а как бы выше центра, в моём разрешении экрана, выше центра на всю высоту почти самого инпутбокса
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,756
Записей в блоге: 14
31.01.2024, 06:48
Отдаю должное упорству... Но не проще ли просто сделать свою функцию с обычной vb-формой?
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
31.01.2024, 13:48  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Но не проще ли просто сделать свою функцию с обычной vb-формой?
Может для кого-то это и проще.ю воспользоваться формой похожей на инпутбокс, но только не для меня. Для меня нет, не проще. Да я и не искал никогда лёгких путей. Я всегда иду к своей целе чётко ставлю задачу чего я хочу
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,756
Записей в блоге: 14
31.01.2024, 19:57
HackerVlad, браво!
2
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
01.02.2024, 02:18  [ТС]
На самом деле можно всего добиться, если очень захотеть. Я вот наконец-то смог полностью воссоздать весь исходный код инпутбокса, мой код ни чем не хуже чем у самого майкрософта, а даже и лучше. Ну вот! Это стоило того! Мои труды и мои усилия. Теперь вот окончательный мой новый код! Новый модуль для вызова юникодного InputBox'а с функцией InputBoxW которая такая же как и оригинальная InputBox даже с поддержкой файлов справки только ещё лучше с моими усовершенствованиями!

Visual Basic
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
Option Explicit
'/////////////////////////////////////////////
'// Модуль для вызова юникодного InputBox'а //
'// Copyright (c) 01.02.2024 by HackerVlad  //
'// e-mail: vladislavpeshkov@yandex.ru      //
'// Версия 2.5                              //
'/////////////////////////////////////////////
 
Private Declare Function DialogBoxParam Lib "user32" Alias "DialogBoxParamW" (ByVal hInstance As Long, ByVal lpTemplate As Long, ByVal hWndParent As Long, ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryW" (ByVal lpLibFileName As Long) As Long
Private Declare Function EndDialog Lib "user32" (ByVal hDlg As Long, ByVal nResult As Long) As Long
Private Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageW" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextW" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As Long) As Long
Private Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextW" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As Long, ByVal nMaxCount As Long) As Long
Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextW" (ByVal hwnd As Long, ByVal lpString As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal CX As Long, ByVal CY As Long, ByVal wFlags As Long) As Long
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Declare Function WinHelp Lib "user32" Alias "WinHelpW" (ByVal hwnd As Long, ByVal lpHelpFile As Long, ByVal wCommand As Long, ByVal dwData As Long) As Long
Private Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpW" (ByVal hwndCaller As Long, ByVal pszFile As Long, ByVal uCommand As Long, ByVal dwData As Long) As Long
 
Private Const IDOK = 1
Private Const IDCANCEL = 2
Private Const ID_EDIT = 4900
Private Const ID_STATIC = 4901
Private Const ID_HELP = 4902
Private Const WM_COMMAND = &H111
Private Const WM_INITDIALOG = &H110
Private Const WM_HELP = &H53
Private Const WM_DESTROY = &H2
 
Private Const SW_HIDE = 0
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const WM_GETTEXTLENGTH As Long = &HE
Private Const EM_SETSEL = &HB1
Private Const SPI_GETWORKAREA = 48
Private Const HH_DISPLAY_TOPIC = &H0
Private Const HH_HELP_CONTEXT = &HF
Private Const HELP_CONTEXT = &H1
Private Const HELP_INDEX = &H3
Private Const HELP_QUIT = &H2
 
Private Type RECT
    iLeft As Long
    iTop As Long
    iRight As Long
    iBottom As Long
End Type
 
Dim sInputText As String
Dim sTitleText As String
Dim sDefaultText As String
Dim CenterOnWorkspace As Boolean ' Аналог DS_CENTER
Dim iXPos As Integer
Dim iYPos As Integer
Dim sHelpFile As String
Dim lContext As Long
Dim IsWinHelpRunning As Boolean
 
' Вызвать InputBox из msvbvm60.dll с поддеркой юникода
Public Function InputBoxW(ByVal hParent As Long, ByVal strPrompt As String, Optional ByVal strTitle As String, Optional ByVal strDefault As String, Optional intXPos As Integer, Optional intYPos As Integer, Optional strHelpFile As String, Optional intContext As Long, Optional CenterOnMonitorWorkspace As Boolean) As String
    Dim msvbvm60 As Long
    
    msvbvm60 = LoadLibrary(StrPtr("msvbvm60.dll"))
    
    If msvbvm60 <> 0 Then
        sTitleText = strTitle
        sDefaultText = strDefault
        CenterOnWorkspace = CenterOnMonitorWorkspace
        iXPos = intXPos
        iYPos = intYPos
        sHelpFile = strHelpFile
        lContext = intContext
        IsWinHelpRunning = False
        
        DialogBoxParam msvbvm60, 4031, hParent, AddressOf DlgProc, StrPtr(strPrompt) ' Тот самый заветный код, который вызывает InputBox
    End If
    
    InputBoxW = sInputText
    sInputText = vbNullString
    sTitleText = vbNullString
    sDefaultText = vbNullString
    sHelpFile = vbNullString
End Function
 
' Функция обработки сообщений диалогового окна
Private Function DlgProc(ByVal hwndDlg As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim NotifyCode As Long
    Dim ItemID As Long
    Dim wndRect As RECT
    Dim rcWork As RECT
    Dim TextLen As Long
    Dim lLeft As Long
    Dim lTop As Long
    
    Select Case uMsg
        Case WM_INITDIALOG
            If Len(sTitleText) = 0 Then sTitleText = App.Title
            SetWindowText hwndDlg, StrPtr(sTitleText)
            
            If Len(sHelpFile) = 0 Then
                ShowWindow GetDlgItem(hwndDlg, ID_HELP), SW_HIDE
            End If
            
            SetDlgItemText hwndDlg, ID_STATIC, lParam
            
            ' Определяем размеры окна
            GetWindowRect hwndDlg, wndRect
            
            ' Определяем размеры рабочей области экрана
            SystemParametersInfo SPI_GETWORKAREA, 0, rcWork, 0
            
            If CenterOnWorkspace = False Then ' Стандартная центровка
                If (iXPos Or iYPos) = 0 Then
                    ' Абсолютно идеальный код выравнивания диалогового окна, в точности так же, как это делает оригинальный InputBox
                    lLeft = rcWork.iLeft + (rcWork.iRight - rcWork.iLeft - (wndRect.iRight - wndRect.iLeft)) \ 2
                    lTop = rcWork.iTop + (rcWork.iBottom - rcWork.iTop - (wndRect.iBottom - wndRect.iTop)) \ 3
                Else
                    lLeft = iXPos
                    lTop = iYPos
                End If
            Else ' Центровка по рабочей области экрана (аналог стиля DS_CENTER)
                lLeft = ((rcWork.iRight - rcWork.iLeft) - (wndRect.iRight - wndRect.iLeft)) / 2
                lTop = ((rcWork.iBottom - rcWork.iTop) - (wndRect.iBottom - wndRect.iTop)) / 2
            End If
            
            SetWindowPos hwndDlg, 0, lLeft, lTop, 0, 0, SWP_NOSIZE Or SWP_NOZORDER ' Выравнивание диалогового окна
            
            If Len(sDefaultText) > 0 Then
                SetDlgItemText hwndDlg, ID_EDIT, StrPtr(sDefaultText)
                SendDlgItemMessage hwndDlg, ID_EDIT, EM_SETSEL, 0, -1
            End If
            
            DlgProc = 1
            Exit Function
        
        Case WM_COMMAND
            NotifyCode = wParam \ 65536
            ItemID = wParam And 65535
            
            If ItemID = IDOK Then
                TextLen = SendDlgItemMessage(hwndDlg, ID_EDIT, WM_GETTEXTLENGTH, 0, 0)
                sInputText = Space$(TextLen)
                GetDlgItemText hwndDlg, ID_EDIT, StrPtr(sInputText), TextLen + 1
                
                EndDialog hwndDlg, 0
                DlgProc = 1
                Exit Function
            End If
            
            If ItemID = IDCANCEL Then
                EndDialog hwndDlg, 0
                DlgProc = 1
                Exit Function
            End If
            
            If ItemID = ID_HELP Then
                RunHelp hwndDlg
                DlgProc = 1
                Exit Function
            End If
        
        Case WM_HELP
            RunHelp hwndDlg
            DlgProc = 1
            Exit Function
        
        Case WM_DESTROY
            If IsWinHelpRunning = True Then
                WinHelp hwndDlg, 0, HELP_QUIT, 0 ' Закрыть окно HLP справки
            End If
            
            DlgProc = 1
            Exit Function
    End Select
    
    DlgProc = 0
End Function
 
Private Sub RunHelp(ByVal hwnd As Long)
    If Len(sHelpFile) > 0 Then
        If Right$(sHelpFile, 4) = ".hlp" Then
            If lContext = 0 Then
                WinHelp hwnd, StrPtr(sHelpFile), HELP_INDEX, 0
            Else
                WinHelp hwnd, StrPtr(sHelpFile), HELP_CONTEXT, lContext
            End If
            IsWinHelpRunning = True
        Else ' CHM
            If lContext = 0 Then
                HtmlHelp hwnd, StrPtr(sHelpFile), HH_DISPLAY_TOPIC, 0
            Else
                HtmlHelp hwnd, StrPtr(sHelpFile), HH_HELP_CONTEXT, lContext
            End If
        End If
    End If
End Sub
Добавлено через 2 минуты
Но самое главное, что этот InputBoxW теперь отображается по в точности таким же координатам окна, что и оригинальный InputBox за что большое спасибо The Trick'у что помог разгадать формулу.
0
dive
 Аватар для I can
4990 / 4750 / 850
Регистрация: 13.04.2015
Сообщений: 9,990
01.02.2024, 04:51
Цитата Сообщение от HackerVlad Посмотреть сообщение
а даже и лучше.
Косячное позорище (как ты вчера уважаемого человека обосрал)

1
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
01.02.2024, 19:52  [ТС]
I can, ну и что тут такого? вообще не понял

Добавлено через 59 секунд
не вижу никаких косяков вообще
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
06.02.2024, 14:23
А без пустых кавычек нельзя, что ли?
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
06.05.2024, 11:29  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
Косячное позорище
Это не косяк, а такова была моя авторская задумка, что если необязательный параметр заголовка будет пустым, то будет имя заголовка это имя проекта. Однако, ты натолкнул меня на мысль, что в моей функции нельзя тогда будет сделать заголовок пустым, если кому-то это зачем-то будет нужно. Поэтому тут смотря как посмотреть. Возможно функцию и правда лучше переписать, чтобы можно было вводить пустоту для пустых заголовков если это кому-то так нужно. Но это уже другое. А тебе нужно было лишь бы прицепиться ко мне а это не очень красиво.

Добавлено через 59 секунд
Цитата Сообщение от Замабувараев Посмотреть сообщение
А без пустых кавычек нельзя, что ли?
Конечно можно
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
06.05.2024, 16:51
Цитата Сообщение от HackerVlad Посмотреть сообщение
Это не косяк, а такова была моя авторская задумка
считаю нужным отлить это в граните
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2024, 16:51

Как сделать так, чтобы при вводе в консоле не было перехода на новую строку?
Допустим у меня есть: #include&lt;iostream&gt; using namespace std; int main() { int a; cout &lt;&lt; &quot;Введите значение:...

Можно ли так сделать так,чтобы предыдущего окно закрывалось при нажатие кнопки далее
from tkinter import * from tkinter import messagebox from tkinter import filedialog def on_closing(): if...

Как создать массив строк, чтобы их можно было как возвращать, так и изменять?
Здравствуйте. У меня следующая проблема: Вот так записан массив переменных string класса: public static string Sharpness { ...

Создать класс из процедуры так, чтобы в нём при вызове можно было менять направление отсчёта счётчика цикла
Могу-ли я создать класс из процедуры так, чтобы в нём при вызове можно было менять направление отсчёта счётчика цикла, и некоторые формулы...

Как создать файл DLL так, чтобы его можно было подключить к VBA Excel?
Пытаясь научиться подключать к VBA хотя бы самую тривиальную функцию на C++. Для примера написал на C++ простую функцию Kvadrat и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
52
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru