Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Примеры форматирования строк с использованием API-функции wvsprintf
 
Примеры показывают приемы использования функции wvsprintf в Delphi для
форматирования строк. Эта функция входит в состав Windows API
(реализована в user32.dll), поэтому не требует подключения модуля
SysUtils по сравнению с аналогичной функцией Format.
 
Зависимости: Windows
Автор:       Внук, Zhigalin@poria.ru, 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;
...