powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Разделитель целой и дробной части.
24 сообщений из 24, страница 1 из 1
Разделитель целой и дробной части.
    #32973187
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как из под VB6 узнать какой в настойках Windows разделитель целой и дробной части?
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32973253
Сергей В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
Private Const LOCALE_SDECIMAL = &HE

Private Declare Function GetLocaleInfo Lib "kernel32" _
    Alias "GetLocaleInfoA" (ByVal Locale As Long, _
    ByVal LCType As Long, ByVal lpLCData As String, _
    ByVal cchData As Long) As Long

Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long

Public Function GetDecimalSep() As String
    On Error GoTo ErrorHandler
    Dim sBuffer As String
    Dim lNullPos As Long
    
    sBuffer = String( 100 , " ")
    If GetLocaleInfo(GetUserDefaultLCID(), LOCALE_SDECIMAL , sBuffer,  99 ) Then
        lNullPos = InStr(sBuffer, vbNullChar)
        If lNullPos Then
            GetDecimalSep = Left$(sBuffer, lNullPos -  1 )
            Exit Function
        End If
    End If
ErrorHandler:
    GetDecimalSep = vbNullChar
End Function
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32973337
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Сергей!
Пример проверил - работает.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32973368
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще вопрос появился:

В каком событии UserControl-а лучше всего проверять эту настройку Windows чтобы наверняка не пропустить смену настроек пользователем?
И в каом событии формы (если UserControl не используется)?
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32973376
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При загрузке? Не будут же пользователи менять региональные настройки по 2 раза в день?
Или посмотреть как Excel, например, делает.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32973447
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffИ еще вопрос появился:

В каком событии UserControl-а лучше всего проверять эту настройку Windows чтобы наверняка не пропустить смену настроек пользователем?
И в каом событии формы (если UserControl не используется)?
Andres 1Или посмотреть как Excel, например, делает. :) В свое время при создании одной весьма немаленькой системы руководство ребром поставило этот же вопрос: необходимо "на лету" отслеживать изменения локальных настроек Win (и тоже указали на Excel)
Решения найдено не было, настройки считывались при старте приложения.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32973492
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если только по таймеру проверять :-))).

Каждые десять секунд...
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32973498
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да... кажется не предусмотрено это в VB6.
Как вариант - в обработчиках ошибок, но две дыры:
не всегда можно поймать нужную ошибку в нужном месте
и уж слишком трудно оттестировать это ничего не пропустив.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32974252
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff wrote:
> Как из под VB6 узнать какой в настойках Windows разделитель целой и
> дробной части?

Много раз видел такой вопрос.
И всё никак не могу понять "А ЗАЧЕМ?"
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32974405
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickМного раз видел такой вопрос.
И всё никак не могу понять "А ЗАЧЕМ?"
Например, чтобы использовать стандартный MS TextBox для ввода числа с плавающей точкой.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32974639
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависит конечно от приложения, но можно было бы проверять именно там где это нужно. Т.е. стартует форма ввода данных - проверить. Открываешь отчет - проверить. Запускаешь обработку - проверить. Т.е. во всех критичных точках.
Это если не охота по таймеру :).

Есть еще одна идейка... Существует возможность получать извещения об изменениях на диске, если не ошибаюсь существует также Notifycation и для регистра. Т.е. подписаться на извещение об изменения в определенной ветке.

Magnus
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32974650
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кстати нашел.
Код: plaintext
1.
2.
3.
4.
Private Declare Function RegNotifyChangeKeyValue Lib "advapi32" _
 (ByVal hKey As Long, ByVal bWatchSubTree As Boolean, ByVal _
  dwNotifyFilter As Long, ByVal hEvent As Long, ByVal _
  fAsynchronous As Boolean) As Long
Magnus
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32974651
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32974701
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Magnus! Через день-два покапаюсь с этим.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32974730
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати о таймере. Таймер в каждом отдельном контроле - тяжеловато будет. Тем более что нельзя сделать статик - таймер один на весь класс, который бы обновлял свои многочисленные экземпляры на всех формах.
Тут, кажется, лучше использовать опрос на уровне приложения. И предусмотреть механизм обновления для тех контролов, которые этого требуют (да... и снова не хватает тут статик-свойства. Здесь он отработало бы на ура).

Все же что нибудь поестественнее надо.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32974795
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да забудь ты уже о таймерах и прочей лабуде :), последний пример самое то что дохтор прописал, как только юзер меняет - ты получаешь оповещение. И для своих компонентов организуй подобную же систему: все кому надо подписываются на событие изменения делителя, как только прога получает извещение - моментально отсылает остальным. Сидим и наслаждаемся :).

Magnus
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32975895
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только надо убедится, что во всех (требуемых) версиях Win:
а) эти параметры лежат в одинаковых ветках. Или отслеживать разные ветки в зав-ти от версии ОС.
б) это событие проходит.
с) и все это с правами пользователя

Если эти условия выполняется, то решение от Magnus23 с RegNotifyChangeKeyValue - весьма хорошее
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32976302
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Событие проходит это точно.
Права конечно нужны, но они нужны также и в других случаях.

Magnus
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32977831
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff wrote:
> Garrick
> Много раз видел такой вопрос.
> И всё никак не могу понять "А ЗАЧЕМ?"
>
>
> Например, чтобы использовать стандартный MS TextBox для ввода числа с
> плавающей точкой.
>

d# - это желаемое значение Double, полученное из TextBox1

If Len(Val(Me.TextBox1.Text)) < Len(Me.TextBox1.Text) Then
d# = CDbl(Me.TextBox1.Text)
Else
d# = Val(Me.TextBox1.Text)
End if
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32979401
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Garrick

Вообще-то конструкция вида
Len(Val(...

Изначально обречена ибо:
1. Val возвращает numeric value.
2. Len принимает либо строку, либо Variant, либо User-Defined Type (но тогда возвращает, конечно, не длину строки, а размер :-)).

У меня Ваш фрагмент даже не скомпилился.

Если же сделать так:

Код: plaintext
1.
2.
3.
4.
5.
If Len(СStr(Val(TextBox1.Text))) < Len(TextBox1.Text) Then
d# = CDbl(Me.TextBox1.Text)
Else
d# = Val(Me.TextBox1.Text)
End If

То тогда при вводе в Текстбокс строки "Text1" все это благополучно падает с моей любимой ошибкой за номером 13 :-), при попытке выполнить СDbl к строке.

Поправьте, если я не прав.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32980048
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дурак2Garrick

То тогда при вводе в Текстбокс строки "Text1" все это благополучно падает с моей любимой ошибкой за номером 13 :-), при попытке выполнить СDbl к строке.

Поправьте, если я не прав.

Я вовсе не предполагал представить полностью работающий код. Просто предложил концепцию решения поставленного вопроса. Самому догадаться проветить на IsNumeric вера не позволяет что-ли? Или хотите что бы я сам написал полностью работающую функцию проверки введённого значения... и ещё ключ от квартиры где деньги лежат.
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32980600
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickЯ вовсе не предполагал представить полностью работающий код. Просто предложил концепцию решения поставленного вопроса. Самому догадаться проветить на IsNumeric вера не позволяет что-ли? Или хотите что бы я сам написал полностью работающую функцию проверки введённого значения... и ещё ключ от квартиры где деньги лежат.

Лично я у Вас вообще ничего не просил :-).
А вера мне все позволяет.

В том числе упрекнуть человека в кидании на форум непроверенных огрызков кода без каких-либо комментариев с собственной стороны.

Обратите Ваше благосклонное внимание на то, как
Magnus, Processor, big-duke, etc "предлагают концепцию".

Иногда лучше жевать, чем говорить (С) Реклама "Стиморол"

Впрочем, это личное дело каждого...
Сорри, если чем обидел. Из лучших побуждений.

P.S.
Прошу прощения у модератора за офф, но задело...
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32980777
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дурак
P.S.
Прошу прощения у модератора за офф, но задело...

Извиняюсь за "задело..." - вовсе не хотел обидеть.
Я хотел обратить внимание, на то что поставленный вопрос можно решить, на мой взгляд, более простым способом, чем предлагалось. Я подумал, что достаточно концептуального решения, которе я и привёл, конечно оно не рабочее - просто идея. Наверное надо было и комментарии какие-либо приписать, но очень торопился...
...
Рейтинг: 0 / 0
Разделитель целой и дробной части.
    #32981676
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Контроль должен быть Только на вводе и нигде больше

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Text1_KeyPress(KeyAscii As Integer)
   Select Case KeyAscii
      Case  48  To  57 ,  8   'Случаи ввода цифр и BackSpase пропускаем 
      Case  44 ,  46  'Десятичная точка
      'Ограничение: точку можно лишь один раз
         If InStr( 1 , Text1, m_DecimalPoint) =  0  Then KeyAscii = Asc(m_DecimalPoint) _
         Else: KeyAscii =  0 
   Case Else   'Все остальное - запрещаем
      KeyAscii =  0 
   End Select
   RaiseEvent KeyPress(KeyAscii)
End Sub
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Разделитель целой и дробной части.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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