Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизDecimalSeparator Найти похожие ветки
← →
Viruz (2005-01-19 11:27) [0]Как многие знают удобные функции форматрования строк format, intToStr, floatToStr и т.д. используют глобальные переменные разделителей, вообще их там много но для меня головную боль являет именно DecimalSeparator.
Вот хочу чтобы разделитель был только скажем точкой, соотвественно высталяю его насильно при запукске и работаю дальше. Только вот проблема, если в системе происходят некие применения системных параметров, например попробуйте нажать на применить в свойствах экрана, прога сама пречитывает эти константы и сама их по новой выставляет во время выполнения. Как бы этого избежать?
← →
Vlad Oshin © (2005-01-19 11:41) [1]если
Изменение системных параметров
Все будет делаться с помощью функции SystemParametersInfo:
function SystemParametersInfo(uiAction, uiParam: UINT; pvParam: Pointer; fWinIni: UINT): BOOL;
uiAction
Одна из констант spi_xxx (список - ниже)
uiParam
Значение зависит от uiAction, если в описании соотв. spi_xxx константы ничего о uiParam не сказано, то нуль.
pvParam
Определяет значение изменяемого параметра (имеет тип Pointer). Также в это поле записывается возвращаемое значение. Если используется константа типа SPI_GETxxx, то в переменную на которую указывает pvParam будет помещен результат. С константами SPI_SETxxx аналогично.
fWinIni
Если системный параметр будет Устанавливаться (не считываться), то значение этого поля определяет, будет ли изменен соответствующий .ini файл, а также, будет ли послано сообщение WM_SETTINGCHANGE всм окнам верхнего уровня, чтобы они смогли принять эти изменения для корректировки своего состояния. Параметр м.б. равен нулю или одной из следующих констант:
SPIF_UPDATEINIFILE
Записать изменения в .ini файл
SPIF_SENDCHANGE
Послать сообщение WM_SETTINGCHANGE после обновления пользовательского профайла (.ini файла)
Если выполнение прошло успешно, возвращается True иначе - False
то
можть реагировать на соотв. сообщение?
← →
Amoeba © (2005-01-19 11:47) [2]
> Viruz (19.01.05 11:27)
А может не стоит насильно навязывать пользователю что в качестве DecimalSeparator должна использоваться непременно точка? Не лучше ли все-таки оставить за ним возможность выбора?
← →
Viruz (2005-01-19 12:47) [3]> Amoeba © (19.01.05 11:47) [2]
>
> > Viruz (19.01.05 11:27)
>
> А может не стоит насильно навязывать пользователю
да вобщем не в пользователе дело, а в верном формировании строк для передачи в др приложения
← →
Плохиш © (2005-01-19 12:54) [4]
>Viruz (19.01.05 12:47) [3]
>да вобщем не в пользователе дело, а в верном формировании строк для передачи в др приложения
Так и устанавливай перед каждой передачей.
← →
Style © (2005-01-19 12:57) [5]Application.UpdateFormatSettings := false;
← →
REA (2005-01-19 13:47) [6]>да вобщем не в пользователе дело, а в верном формировании строк для передачи в др приложения
Есть варианты функций (в D7 кажется), где используются не глобальные настройки.
← →
Юрий Зотов © (2005-01-19 14:00) [7]> Viruz (19.01.05 12:47) [3]
> да вобщем не в пользователе дело, а в верном формировании
> строк для передачи в др приложения
Вот как раз в этом случае и не стоит менять системный DecimalSeparator на собственный. Тогда все приложения будут использовать один и тот же.
← →
Style © (2005-01-19 14:08) [8]Обычно проблемы могут возникнуть наоборот при вызове StrToFloat... Тогда перед вызовом StrToFloat, можно просто заминить символы ".", "," на текущий DecimalSeparator в конвертируемой строке.
2 Ю.З.
← →
Style © (2005-01-19 14:09) [9]
> Вот как раз в этом случае и не стоит менять системный DecimalSeparator
> на собственный. Тогда все приложения будут использовать
> один и тот же.
2 Ю.З.
Ну почему, если приложение ДОСовское и там требуют определенный формат чисел..
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c