Форматирование

отредактировано 16:56 Раздел: FastReport 3.0
В мемо объекте нужно отобразить значения 2х полей, причем в отформатированном виде, т.е.

число 0,011 отображается должно как "0,011", а не ",011" . Применяю формат

[frxDBDataset2."specnorm1" #n%1,3f]
[frxDBDataset2."specnorm" #n%1,3f]

К сожалению, когда поле = NULL, выдает сообщение об ошибке работы с вариантами. Я считаю, что в коде компонента FastReport необходимо совершать проверку на NULL прежде чем совершать форматировани (видимо ее там нет).

Ест ли другой путь решения этой проблемы, или укажите место исправления кода компонента

Комментарии

  • отредактировано 16:56
    Проверил сейчас на демке, все работает без ошибок. Если поле = Null, то выводится пустое место.
  • отредактировано 16:56
    я использую версию 3,07 а Вы какую из демок. И я надеюсь Вы эксперимент ставили с заданием аналогичного форматирования. Без формата все ОК работает.
  • отредактировано 16:56
    Демка 3.09, формат аналогичный.
  • отредактировано January 2005
    В версии 3.07

    в модуле 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>

    Теперь форматированый вывод заработал
  • отредактировано January 2005
    SORRY так нельзя. Перестала работать функция SET. Надо еще повозиться
  • отредактировано 16:56
    Вот так вроде правильно. У меня вроде все работет после этих изменений

    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);
  • отредактировано 16:56
    Ой. И все это будет работать если стоит крыжик Project-Options-Compiler-Complete bolean eval?
    Нельзя проверять FValue = ''. TVarData(FValue).VOleStr = '' либо if ((TVarData(FValue).VType = varString) or (TVarData(FValue).VType = varOleStr) then if (FValue = '') либо обрамить то что ты написал директивами {$B-} {$B+}, чтоб до FValue = '' не доходило дело если тип не строковый...
    Эх...
  • отредактировано 16:56
    О! Это уже разговор.

    Согласен, что if ((TVarData(FValue).VType = varString) or (TVarData(FValue).VType = varOleStr) then if (FValue = '')

    будет понадежнее.

    П.С. Что за необходимость включать вражеский крыжик Project-Options-Compiler-Complete bolean eval, хотя наверное когда пишеш компоненты этот вариант рассматривать необходимо
  • отредактировано 16:56
    Если крыжик есть то его обязательно включат ;)

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.