Как организовать заполнение маски справа-налево (cxMaskEdit, MaskEdit) ?
Антохин
Дата: 03.05.2011 10:38:04
Есть такая задача: организовать ввод денежной суммы в формате "****,**", причём необходимо чтобы числа вводились слева-направо, то есть следующим образом, например ввод числа 123 - "****,*1" -> "****,12" -> "***1,23".
Указываю перед маской "!" - не помогает...
Sharkfire
Дата: 04.05.2011 12:12:58
Антохин, я думаю так выйдет. надо писать свои костыли. я в MaskEdit уже не раз разочаровывался, там многие простые вещи не сделаешь.
DimaBr
Дата: 04.05.2011 12:18:03
зачем вам cxMaskEdit если есть cxCurrencyEdit
Konstantin-78
Дата: 02.02.2015 16:58:51
Ну вот а всетаки, у меня обычный label отображает сумму размера файлов в байтах, например 28883684596 и мне нужно превратить его в вид: 28,883,684,596 (разбором строчки заниматься не хотелось бы).
Посмотрел "cxMaskEdit", но в нем у меня не получается достичь результата вида: 28,883,684,596, когда я ему пытаюсь присвоить 28883684596
DarkMaster
Дата: 02.02.2015 17:21:13
Konstantin-78,
Попробуй так:
OldDS:=DecimalSeparator; OldTS:=ThousandSeparator;
DecimalSeparator:='.'; ThousandSeparator:=',';
MY_NUMBER_STR:=Format('%n',[ANumber]); // <--- %n в строке форматирования.
DecimalSeparator:=OldDS; ThousandSeparator:=OldTS;
А потом просто откуси до точки в конце строки...
defecator
Дата: 02.02.2015 17:27:53
Konstantin-78 |
---|
Ну вот а всетаки, у меня обычный label отображает сумму размера файлов в байтах, например 28883684596 и мне нужно превратить его в вид: 28,883,684,596 (разбором строчки заниматься не хотелось бы). Посмотрел "cxMaskEdit", но в нем у меня не получается достичь результата вида: 28,883,684,596, когда я ему пытаюсь присвоить 28883684596 |
Может быть, поможет:
http://m-ivanov.livejournal.com/6653.html
Guest2013
Дата: 03.02.2015 04:12:44
Konstantin-78,
посмотри в сторону
TFormatSettings и
FormatFloat
var
FileSize: Integer;
FS: TFormatSettings;
begin
FileSize := 1234567890;
FS.ThousandSeparator := ',';
Label1.Caption := FormatFloat(',#', FileSize, FS);
end;
Konstantin-78
Дата: 03.02.2015 12:59:10
Guest2013,
Да это хороший вариант, но у меня размер больше "integer".
И библиотекта складывающая рамеры файлов (Гб) оперирует "string" (но это не важно)
Guest2013
Дата: 03.02.2015 16:00:02
Konstantin-78,
Используйте Int64, неужели 2^63 не хватит?
Либо рисуйте свой велосипед, такую функцию накидать дело 5-ти минут:
function FormatFileSize(AFSize: string; AThousandSeparator: Char): string;
var
i: Integer;
C: Char;
begin
i := 0;
Result := '';
while ( i < Length(AFSize) ) do
begin
C := AFSize[Length(AFSize)-i];
Result := C + Result;
Inc(i);
if ( (i mod 3) = 0 ) then
Result := AThousandSeparator + Result;
end;
end;
Konstantin-78
Дата: 03.02.2015 17:09:37
ага,
вот подсказали такую конструкцию, например:
var
S: string;
ff: int64;
begin
S:='42122128883684596';
ff:=StrToInt64(S);
Label1.Caption:=FormatFloat('#,###,###.###', ff);
end;