Примеры форматирования строк с использованием API-функции wvsprintf

Примеры форматирования строк с использованием API-функции wvsprintf

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Примеры форматирования строк с использованием API-функции wvsprintf
Примеры показывают приемы использования функции wvsprintf в Delphi для
форматирования строк. Эта функция входит в состав Windows API
(реализована в user32.dll), поэтому не требует подключения модуля
SysUtils по сравнению с аналогичной функцией Format.
Зависимости: Windows
Автор: Внук, <a href="mailto:Zhigalin@poria.ru">Zhigalin@poria.ru</a>, ICQ:60571446, Самара
Copyright: Внук
Дата: 29 мая 2002 г.
***************************************************** }

// Пример использования функции wvsprintf с двумя параметрами разного типа
function WinFormat(out TargetString: AnsiString): Boolean;
const
 FormatStr = 'String Parameter:"%s", Number Parameter:%05d';
var
 StrParam: AnsiString;
 NumberParam, FormatResult: Integer;
 ParamArray: array[0..1] of Pointer;
begin
 NumberParam := 105; // Задаем значение первого параметра
 StrParam := 'Hello'; // Задаем значение второго параметра
 SetLength(TargetString, 50); // Должно быть достаточно места для результата.
 // Без этой строки работать не будет
 ParamArray[0] := @StrParam[1];
 ParamArray[1] := Pointer(NumberParam);
 FormatResult := wvsprintf(PChar(TargetString), FormatStr, PChar(@ParamArray));
 if FormatResult < Length(FormatStr) then // В случае ошибки значение функции
  // меньше длины шаблонной строки
 begin
  TargetString := '';
  Result := False;
 end
 else
  result := True;
end;
// Пример использования функции wvsprintf с одним параметром
function SimpleWinFormat(out TargetString: AnsiString): Boolean;
const
 FormatStr = 'Number Parameter:%05d';
var
 NumberParam, FormatResult: Integer;
begin
 NumberParam := 112;
 SetLength(TargetString, 50); // Должно быть достаточно места для результата.
 // Без этой строки работать не будет
 FormatResult := wvsprintf(PChar(TargetString), FormatStr,
  PChar(@NumberParam));
 if FormatResult < Length(FormatStr) then // В случае ошибки значение функции
  // меньше длины шаблонной строки
 begin
  TargetString := '';
  Result := False;
 end
 else
  result := True;
end;
Пример использования:
uses Dialogs, ...;
...
var
 S: AnsiString;
 ...
begin
 ...
  if WinFormat(S) then
  ShowMessage(S)
 else
  ShowMessage('An error has been occured!');
 if SimpleWinFormat(S) then
  ShowMessage(S)
 else
  ShowMessage('An error has been occured!');
 ...
end;
...

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

Проверка
Антиспам проверка
Image CAPTCHA
...