Форматирование
В мемо объекте нужно отобразить значения 2х полей, причем в отформатированном виде, т.е.
число 0,011 отображается должно как "0,011", а не ",011" . Применяю формат
[frxDBDataset2."specnorm1" #n%1,3f]
[frxDBDataset2."specnorm" #n%1,3f]
К сожалению, когда поле = NULL, выдает сообщение об ошибке работы с вариантами. Я считаю, что в коде компонента FastReport необходимо совершать проверку на NULL прежде чем совершать форматировани (видимо ее там нет).
Ест ли другой путь решения этой проблемы, или укажите место исправления кода компонента
число 0,011 отображается должно как "0,011", а не ",011" . Применяю формат
[frxDBDataset2."specnorm1" #n%1,3f]
[frxDBDataset2."specnorm" #n%1,3f]
К сожалению, когда поле = NULL, выдает сообщение об ошибке работы с вариантами. Я считаю, что в коде компонента FastReport необходимо совершать проверку на NULL прежде чем совершать форматировани (видимо ее там нет).
Ест ли другой путь решения этой проблемы, или укажите место исправления кода компонента
Комментарии
в модуле frxClass
После изменения куска кода
<span style='color:red'>function TfrxCustomMemoView.CalcAndFormat(const Expr: String): String;
.........
.........
.........
if FHideZeros and (TVarData(FValue).VType <> varString) and
(TVarData(FValue).VType <> varOleStr) and (FValue = 0) then
Result := '' else
Result := FormatData(FValue, Format);
.........
.........
.........
</span>
следующим образом
<span style='color:green'>.........
.........
.........
if ((TVarData(FValue).VType <> varString)
and (TVarData(FValue).VType <> varOleStr))
or (FHideZeros and (FValue = 0))
or VarIsNull(FValue) or (FValue='')
then
Result := '' else
Result := FormatData(FValue, Format);
.........
.........
.........</span>
Теперь форматированый вывод заработал
if ((TVarData(FValue).VType <> varString)
and (TVarData(FValue).VType <> varOleStr)
and FHideZeros and (FValue = 0))
then
Result := '' else
if ((TVarData(FValue).VType=varString) or
(TVarData(FValue).VType=varOleStr))
and (FValue='')
then
Result := FormatData(FValue) else
Result := FormatData(FValue, Format);
Нельзя проверять FValue = ''. TVarData(FValue).VOleStr = '' либо if ((TVarData(FValue).VType = varString) or (TVarData(FValue).VType = varOleStr) then if (FValue = '') либо обрамить то что ты написал директивами {$B-} {$B+}, чтоб до FValue = '' не доходило дело если тип не строковый...
Эх...
Согласен, что if ((TVarData(FValue).VType = varString) or (TVarData(FValue).VType = varOleStr) then if (FValue = '')
будет понадежнее.
П.С. Что за необходимость включать вражеский крыжик Project-Options-Compiler-Complete bolean eval, хотя наверное когда пишеш компоненты этот вариант рассматривать необходимо