
Последние записи
- Joomla 3.8 — Автоматическая авторизация по IP автоматически созданного временного пользователя с принадлежностью к заданной группе
- Конвертация MOV to MP4
- Автоматическое уничтожение объектов
- Найти среднее значение по данным в ячейке
- Число различных чисел (Microsoft Office Excel)
- Убить процесс
- Конвертер heic в jpg
- Проверка на шестнадцатеричный формат записи
- Отдать пользователю файл с помощью file_get_contents()
- Написать собственую функцию operator[] для битов

Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk

Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
25th
Июн
Как отображать размер файла в зависимости от размера в кб,мб,гб?
Posted by Chas under Топик-обзор
а есть процедура для того чтобы размер отображался не в байтах а в зависимости от размера в кб,мб,гб?
GunSmoker:
Я использую Shell-скую StrFormatByteSize:
var
StrFormatByteSizeW: function(ASize: UInt64; szBuf: PWideChar; uiBufSize: UINT): PWideChar; stdcall;function StrFormatByteSizeDummy(ASize: UInt64; szBuf: PWideChar; uiBufSize: UINT): PWideChar; stdcall;
function FmtSizeToStr(const ASize: Int64): String;
const
_Kb: Int64 = 1024;
_Mb: Int64 = 1024*1024;
_Gb: Int64 = 1024*1024*1024;
_Tb: Int64 = 1099511627776; // 1024*1024*1024*1024;
begin
if ASize < _Kb then Result := Format(rsELSzFmt, [IntToStr(ASize), rsELb]) else if ASize < _Mb then Result := Format(rsELSzFmt, [FloatToStrF(ASize / _Kb, ffFixed, 18, 2), rsELKb]) else if ASize < _Gb then Result := Format(rsELSzFmt, [FloatToStrF(ASize / _Mb, ffFixed, 18, 2), rsELMb]) else if ASize < _Tb then Result := Format(rsELSzFmt, [FloatToStrF(ASize / _Gb, ffFixed, 18, 2), rsELGb]) else Result := Format(rsELSzFmt, [FloatToStrF(ASize / _Tb, ffFixed, 18, 2), rsELTb]); end; var Buf: WideString; Sz: Integer; begin Buf := FmtSizeToStr(ASize); Sz := Min(Length(Buf) + 1, uiBufSize); if Sz > 0 then
begin
Move(Buf[1], szBuf^, Sz * SizeOf(WideChar));
szBuf[uiBufSize - 1] := #0;
end;
Result := szBuf;
end;function FmtFormatSize(const ASize: UInt64): String;
var
Lib: HMODULE;
Buf: WideString;
begin
if not Assigned(StrFormatByteSizeW) then
begin
Lib := LoadLibrary(shlwapi);
if Lib <> 0 then
begin
StrFormatByteSizeW := GetProcAddress(Lib, 'StrFormatByteSizeW'); // Do Not Localize
if not Assigned(StrFormatByteSizeW) then
StrFormatByteSizeW := StrFormatByteSizeDummy;
end
else
StrFormatByteSizeW := StrFormatByteSizeDummy;
end;
SetLength(Buf, 1024);
if StrFormatByteSizeW(ASize, PWideChar(Buf), Length(Buf)) = nil then
StrFormatByteSizeDummy(ASize, PWideChar(Buf), Length(Buf));
Result := PWideChar(Buf);
StrFormatByteSizeDummy — это заглушка только для старых систем. Если это не надо, то можно существенно проще:
function StrFormatByteSizeW(ASize: UInt64; szBuf: PWideChar; uiBufSize: UINT): PWideChar; stdcall; external 'shlwapi.dll';
function FmtFormatSize(const ASize: UInt64): String;
var
Buf: WideString;
begin
SetLength(Buf, 1024);
if StrFormatByteSizeW(ASize, PWideChar(Buf), Length(Buf)) <> nil then
Result := PWideChar(Buf)
else
Result := UIntToStr(ASize);
end;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту

пеллетные котлы

Пеллетный котел Emtas

Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)