Unterschied von Delphi-Formatstrings & wvsprintf
In einem nonVCL-Projekt benutze ich die Format-Funktion aus Luckies Toolbox:
Delphi-Quellcode:
Diese Funktion beruht also auf wvsprintf. Nun wollte ich folgenden String formatieren:
function Format(fmt: string; params: array of const): string;
var pdw1, pdw2: PDWORD; i: integer; pc: PCHAR; begin pdw1 := nil; if length(params) > 0 then GetMem(pdw1, length(params) * sizeof(Pointer)); pdw2 := pdw1; for i := 0 to high(params) do begin pdw2^ := DWORD(PDWORD(@params[i])^); inc(pdw2); end; GetMem(pc, 1024 - 1); try SetString(Result, pc, wvsprintf(pc, PCHAR(fmt), PCHAR(pdw1))); except Result := ''; end; if (pdw1 <> nil) then FreeMem(pdw1); if (pc <> nil) then FreeMem(pc); end;
Delphi-Quellcode:
Mit der RTL-Unit Sysutils kein Problem. Aber mit der API-Funktion bekomm ich nur "f" angezeigt. Schaue ich mir die Dokumentation von wvsprintf an, seh ich auch, warum: es git dort kein Formator-Zeichen f.
sTotalBytes := Format('%1.2f', [FTotalBytes / 1000]);
Also wie kann man mit dieser Funktion Gleitkommakonvertierungen durchführen? |
Mit dem C/C++ Implementierung von wvsprintf geht es. Aber nimm doch Str(). Ist in der System-Unit drin, die sowieso automatsich eingebunden wird.
|
Stimmt, an die hab ich gar nicht gedacht.
Vielen Dank. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz