Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 29 мар 2024, 15:29

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 20 мар 2023, 11:36 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
v11.0.014 + Delphi 11.3 + Win10
Код:
  col := dbgAllPayments.Columns.Add;
  col.FieldName := 'sum_payment';
  col.Title.Caption := 'Сумма';
  col.DisplayFormat := '### ### ##0.00';
  col.AutoFitColWidth := False;
  col.Width := 100;
  col.Footer.DisplayFormat := '### ### ##0.00';
  col.Footer.ValueType := fvtSum;

Выглядит так:
Вложение:
1.png
1.png [ 3.97 KiB | Просмотров: 4549 ]

Т.е. нет разделения разрядов в футере и текст слегка смещен влево.
Если же задать такой формат
Код:
  col.Footer.DisplayFormat := '###,###,##0.00';

то всё выглядит так, как должно бы быть и примером выше:
Вложение:
2.png
2.png [ 3.96 KiB | Просмотров: 4549 ]

Баг? Просьба исправить.


Последний раз редактировалось rlc 19 май 2023, 05:19, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 20 мар 2023, 16:48 
Не в сети

Зарегистрирован: 23 мар 2017, 13:41
Сообщений: 70
Зачем вам такие форматы, используйте нормальные, не надо так много решеток.
Код:
#,##0.00


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 20 мар 2023, 17:02 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Функции FormatBCD и FormatFloat возвращают разный результат когда получают в качестве формата строку '### ### ##0.00'.
Чтобы во всех функциях форматирования получать одинаковый формат используйте в качестве разделителя тысяч знак запятую (Ее можно прописывать один раз).

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s1, s2, s3, s4: String;
begin
  s1 := FormatBCD('### ### ##0.00', 3727105.52);
  s2 := FormatFloat('### ### ##0.00', 3727105.52);

  s3:= FormatBCD(',0.00', 3727105.52);
  s4 := FormatFloat(',0.00', 3727105.52);

  ShowMessage(s1 + sLineBreak + s2 + sLineBreak + sLineBreak + s3 + sLineBreak + s4);
end;


Результат:

Код:
[Window Title]
Project1

[Content]
3727105 ,52
3 727 105,52

3 727 105,52
3 727 105,52

[OK]


В библиотеке для форматирования футеров используется функция FormatBCD

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 20 мар 2023, 18:12 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
Все понятно, спасибо.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 май 2023, 08:16 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
Возвращаясь к теме, появились нюансы :?
С предложенным решением в виде DisplayFormat := ',0.00' перестал работать поиск в гриде, т.е. 105 еще выделяется в столбце, но следующие 22 уже никак:
Вложение:
1.png
1.png [ 53.53 KiB | Просмотров: 4434 ]

пробел между разрядами не помогает:
Вложение:
2.png
2.png [ 54.32 KiB | Просмотров: 4434 ]

Если убрать разделение - DisplayFormat := '0.00', то все ОК (но так не нужно):
Вложение:
3.png
3.png [ 55.92 KiB | Просмотров: 4434 ]

А вот ранее использованный DisplayFormat := '### ### ##0.00' также не ищет '10522', но ищет '105 22':
Вложение:
4.png
4.png [ 59.31 KiB | Просмотров: 4434 ]


Вопрос разработчику: как же сделать рабочим поиск при DisplayFormat := ',0.00'?
Версия EhLib 11.0.016, Delphi 11.3.1


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 май 2023, 20:00 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Вариант 1. Убедитесь, что в настройках Windows в качестве разделителя используется проблем #32, а не какой-нибудь, неразрывный пробел #0160.

Вариант 2. Можно зашить разделитель тысяч – Проблем при запуске программы.
Код:
  FormatSettings.ThousandSeparator := ' ';


Вариант 3. Можно использовать возможность грубого сравнение строк при поиске в гриде
Для этого необходимо задать ссылку на процедуру DBUtilsEh.MakeStringRoughProcEh

Код:
function MyMakeStringRoughProc(Str: String): String;
begin
  Result := StringReplace(Str, #0160, ' ', [rfReplaceAll]);
  //Result := Str;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  DBUtilsEh.MakeStringRoughProcEh := MyMakeStringRoughProc;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB