Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Разделитель целой и дробной части. / 24 сообщений из 24, страница 1 из 1
22.03.2005, 11:50:53
    #32973187
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель целой и дробной части.
Как из под VB6 узнать какой в настойках Windows разделитель целой и дробной части?
...
Рейтинг: 0 / 0
22.03.2005, 12:07:47
    #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
22.03.2005, 12:35:27
    #32973337
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель целой и дробной части.
Спасибо, Сергей!
Пример проверил - работает.
...
Рейтинг: 0 / 0
22.03.2005, 12:48:06
    #32973368
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель целой и дробной части.
И еще вопрос появился:

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

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

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

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

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

Magnus
...
Рейтинг: 0 / 0
22.03.2005, 19:20:03
    #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
22.03.2005, 19:20:47
    #32974651
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель целой и дробной части.
...
Рейтинг: 0 / 0
22.03.2005, 19:43:25
    #32974701
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель целой и дробной части.
Спасибо, Magnus! Через день-два покапаюсь с этим.
...
Рейтинг: 0 / 0
22.03.2005, 20:05:31
    #32974730
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель целой и дробной части.
Кстати о таймере. Таймер в каждом отдельном контроле - тяжеловато будет. Тем более что нельзя сделать статик - таймер один на весь класс, который бы обновлял свои многочисленные экземпляры на всех формах.
Тут, кажется, лучше использовать опрос на уровне приложения. И предусмотреть механизм обновления для тех контролов, которые этого требуют (да... и снова не хватает тут статик-свойства. Здесь он отработало бы на ура).

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

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

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

Magnus
...
Рейтинг: 0 / 0
24.03.2005, 10:43:36
    #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
24.03.2005, 18:06:59
    #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
25.03.2005, 09:58:29
    #32980048
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделитель целой и дробной части.
Дурак2Garrick

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

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

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

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

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

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

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

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

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

Извиняюсь за "задело..." - вовсе не хотел обидеть.
Я хотел обратить внимание, на то что поставленный вопрос можно решить, на мой взгляд, более простым способом, чем предлагалось. Я подумал, что достаточно концептуального решения, которе я и привёл, конечно оно не рабочее - просто идея. Наверное надо было и комментарии какие-либо приписать, но очень торопился...
...
Рейтинг: 0 / 0
25.03.2005, 18:21:20
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Разделитель целой и дробной части. / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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