Russian Belarusian English German Japanese Ukrainian

Форматирование отображаемого значения поля

CuBook05

То, как выглядит значение поля в визуальных компонентах, зависит от типа поля, а также от системных установок Windows и BDE. Часто возникает необходимость изменить этот вид при отображении значений или их редактировании. Для этого используется форматирование выводимой информации.
 
Свойство DisplayFormat типа AnsiString управляет отображением значений полей в визуальных компонентах, например, DBGrid и DBEdit. Это свойство действует для числовых полей, а также для полей даты и времени. В качестве значения свойства DisplayFormat задается маска, определяющая формат отображения поля.
 
Эта маска состоит из трех секций, разделенных символом ";". Секции задают форму отображения положительных, отрицательных и нулевых значений соответственно. Если задана только одна секция, то она применяется для вывода всех значений. В маске можно использовать следующие управляющие символы:
  • 0 - цифра числа, незначащие нули отображаются;
  • # - цифра числа, незначащие нули гасятся;
  • . - разделитель целой и дробной части числа;
  • , - разделитель тысяч;
  • Е+ или е+ - разделитель мантиссы и порядка для чисел в форме с плавающей точкой, отображаются положительный и отрицательный знаки порядка;
  • Е- или e- - разделитель мантиссы и порядка для чисел в форме с плавающей точкой, отображается только отрицательный знак порядка;
  • "хх" и 'хх' - символы, выводимые без изменений; символы, заключенные в кавычки (двойные или апострофы), включаются в отображаемое значение;
  • ; - разделитель секций маски для положительных, отрицательных и нулевых значений.
Приведем примеры масок:
  • 000Е-00 или 000Е+00 - для чисел в форме с плавающей точкой;
  • #####0.00 или 000000.00 - для чисел в форме с фиксированной точкой;
  • #####0.00' рублей' - для денежных сумм;
  • ####0;-####0;0 - отдельно для положительных, отрицательных и нулевых значений.
Свойство EditFormat типа AnsiString задает маску, используемую при форматировании значения числового поля перед его отображением для редактирования в визуальном компоненте. Формирование этой маски не отличается от формирования маски, задаваемой в свойстве DisplayFormat.
 
Свойство EditMask типа AnsiString задает маску, используемую при редактировании значения в визуальном компоненте. Маска позволяет ограничить число вводимых пользователем символов и тип вводимых символов (алфавитный, цифровой и т.д.). Кроме того, во вводимую информацию можно вставить дополнительные символы (разделители при вводе даты, времени и т.п.). С помощью свойства EditMask удобно вводить телефонные номера, даты, почтовые индексы и другую информацию подобного рода, имеющую заранее определенный формат.
 
Названные свойства DisplayFormat и EditMask независимо друг от друга управляют форматированием значения поля при отображении и при редактировании. Кроме них, для объекта типа TField есть событие OnGetText типа TFieldGetTextEvent, в обработчике которого на программном уровне можно одновременно управлять форматом данных и при отображении, и при редактировании. Это событие генерируется при каждом обращении к свойствам DisplayText и Text. Тип события OnGetText описан так:
typedef void __fastcall (__closure *TFieldGetTextEvent)(TFieid* Sender, AnsiString &Text, bool DisplayText);
Параметр Text содержит значение, которое выводится в визуальном компоненте. Программист должен задать это значение. Логический параметр DisplayText (только для чтения) указывает, для каких целей выводится значение: для отображения (true) или для редактирования (false). Значение параметра DisplayText зависит от значения свойства ReadOnly визуального компонента (используемого для просмотра и редактирования значений полей наборов данных), такого как DBGrid или DBEdit.
 
Рассмотрим пример форматирования отображаемых и редактируемых значений:
void __fastcall TForm1::Table1A_fieldGetText(TFieid *Sender, AnsiString &Text, bool DisplayText)
{
if (DisplayText) {Text = Table1A_field->AsString;}
else {Text = AnsiUpperCase(Table1A_field->AsString);
}
}
//-----------------
void __fastcall TForm1::Table1G_SalaryGetText(TFieid *Sender, AnsiString &Text, bool DisplayText)
{
if (DisplayText) {Text = Table1G_Salary->AsString+'$';}
else {Text = AnsiUpperCase(Table1G_Salary->AsString);
}
}
Здесь обработчик Table1A_fieldGetText обеспечивает то, что при редактировании значения поля A_field оно выводится строчными буквами, а при просмотре — прописными. Если для перевода символов строки в верхний регистр вместо функции AnsiUpperCase использовать AnsiUpperCase, то символы русского алфавита будут преобразовываться некорректно.
 
Значение поля G_salary отображается в визуальных компонентах со знаком '$'. При редактировании этого поля знак процента отсутствует.
Если определен обработчик события OnGetText, то свойства DisplayFormat и EditMask не действуют.
Свойство DisplayWidth типа int определяет число символов, используемых для вывода значения поля в визуальном компоненте (обычно в сетке DBGrid), который связан с этим полем. По умолчанию значение этого свойства определяется шириной физического поля таблицы, заданной при его создании.
Ширина столбца компонента-сетки DBGrid также зависит от значения свойства width этого столбца, задающего ширину в пикселах.
Программист может изменить не только значение, но и заголовок поля, используемый как название столбца, например, в компоненте DBGrid. Заголовок поля определяется свойством DisplayLabel типа AnsiString. По умолчанию значением этого свойства является имя поля (свойство FieidName), однако, в отличие от последнего, свойство DisplayLabel доступно и для записи, и его можно использовать, например, для настройки пользователем интерфейса приложения. Например, так:
Table1G_Salary->DisplayLabel = Edit1->Text;
Здесь заголовку поля G_salary присваивается текст, введенный в компонент Edit1. Если это поле отображается в компоненте DBGrid, то соответствующий столбец сетки также изменяет свое значение на указанное в свойстве Text.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий