![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
yahont7 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 25.4.2011 Репутация: нет Всего: нет |
Значит проблема такова, нужна таблица способная отображать как численные значения (с контролем диапазона и формата числа по столбцам), так и в отдельных столбцах компоненты типа CheckBox, ComboBox и т.д.
При этом важно чтобы визуальная стилистика таблицы была в тонах Office 2003. Всем этим требованиям отвечает компонент от TMS - TAdvStringGrid. Вроде бы разобрался как и чего делать, да компонет удобный в работе, и хелп не плохой. Но возникла проблема. Суть ее такова, для того чтобы работать с числами с плавающей точкой надо написать два обратботчика для этого компонента: 1. OnGetEditorType - в котором можно определить редактор типа данных для любой ячейки или столбца. В моем случае он выглядет так:
В этом обработчике для чисел с плавающей точкой можно еще использовать редактор edFloat но edFloatSpinEdit гораздо удобнее первого, так как позволяет мышкой плавно регулировать значение числа в ячейке. Второй обработчик OnGetFloatFormat определяет лишь формат самого числа в отображаемого в ячейке. реализован он для второго и третьего столбцов, следующим образом:
Так вот суть проблемы такова, что редактор edFloatSpinEdit, упорно округляет во втором столбце число до ДВУХ знаков, а нужно для ТРЕХ. Т.е. даже внутрипрограммно во второй столбец введены числа с тремя знаками после запятой, они отображаются корректно, но стоит только войти в редактирование этой ячейки как автоматом резульат округляется до ДВУХ знаков (что искажает результат). Что я только не делал но, но так и не смог найти способ заставить этот edFloatSpinEdit для второго столбца обеспечить точность в ТРИ знака после запятой. (а это критично) Если проблему неудастся решить то придется отказыватся от редактора edFloatSpinEdit в пользу более неудобного edFloat. Исходники примера прикладываю к тексту используются только обычные компоненты и компонент TAdvStringGrid от TMS. Присоединённый файл ( Кол-во скачиваний: 19 ) ![]() |
||||
|
|||||
yahont7 |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 25.4.2011 Репутация: нет Всего: нет |
Все вопрос снят.
Причиной было свойство самого компонента FloatFormat, в котором по умолчанию - "%.2f". Оказывается округление к двум знакам делал не редактор edFloatSpinEdit а сам компонент, пришлось много потрудится чтобы, это вычислить. Причем округление происходило после того как осуществлялся переход на следующую ячейцу или нажатие клавиши Enter. И так если требуется работать с числами с плавающей точкой но разной точности по столбцам (или строкам). То надо сделать следующее 1. Для самого компонента TAdvStringGrid установить свойство FloatFormat соответсвующую наибольшей точности из тех, столбцов, что будут определены. Например AdvStringGrid.FloatFormat := '%.4f'; 2. В обработчике OnGetEditorType - определить спинэдитовский редактор (ибо очень удобен для работы) вещественных чисел:
3. В обработчике OnGetFloatFormat определить формат вещественных чисел в столбцах. Например:
Кстати обращаться к ячейкам с вещественными числами можно так:
И это удобнее чем, например так
Все! После этого все работает. Компонент действительно очень удачный, и обладающий огромным функционалом. Исправленный пример приложен к посту Это сообщение отредактировал(а) yahont7 - 25.4.2011, 22:02 Присоединённый файл ( Кол-во скачиваний: 16 ) ![]() |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |