Форум: "Начинающим";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];
ВнизНаучите работать, как работает ShowMessageFmt Найти похожие ветки
← →
12 © (2010-06-23 13:03) [0]например, пишу - ShowMessageFmt("%d %f %s",[1,pi,"eklmn"]);
и контрол+клик
доскакал доprocedure FmtStr(var Result: string; const Format: string; const Args: array of const);
потом там естьfunction FormatBuf(var Buffer; BufLen: Cardinal; const Format;
FmtLen: Cardinal; const Args: array of const): Cardinal;
var
ArgIndex, Width, Prec: Integer;
BufferOrg, FormatOrg, FormatPtr, TempStr: PChar;
JustFlag: Byte;
StrBuf: array[0..64] of Char;
TempAnsiStr: string;
SaveGOT: Integer;
{ in: eax <-> Buffer }
{ in: edx <-> BufLen }
{ in: ecx <-> Format }
asm
PUSH EBX
...
далее там несколько страниц асма, мне не реально понять
что хочу, собственно
Как написать ShowMessageMyFmt, самому, чтоб, допустим,
вывод ее был не "1 3.14 eklmn"
а "№1(int)=1 №2(float)=3.14 №3(str)=eklmn"
ps
Вариант
ShowMessageFmt("№1(int)=%d - не интересен :)
← →
Leonid Troyanovsky © (2010-06-23 13:09) [1]
> 12 © (23.06.10 13:03)
> ShowMessageFmt("№1(int)=%d - не интересен :)
Переобоснуй.
--
Regards, LVT.
← →
Игорь Шевченко © (2010-06-23 13:15) [2]
> Как написать ShowMessageMyFmt, самому, чтоб, допустим,
> вывод ее был не "1 3.14 eklmn"
> а "№1(int)=1 №2(float)=3.14 №3(str)=eklmn"
интерпретировать строку формата. Готов ?
← →
12 © (2010-06-23 13:24) [3]> [2] Игорь Шевченко © (23.06.10 13:15)
> > Как написать ShowMessageMyFmt, самому, чтоб, допустим,
> > вывод ее был не "1 3.14 eklmn"
> > а "№1(int)=1 №2(float)=3.14 №3(str)=eklmn"
> интерпретировать строку формата. Готов ?
не знаю
самостоятельно пришел к перегрузке
а можно как-то, (и как) понять, что в ShowMessageFmt("%d" ,[1,
первый параметр int?
> [1] Leonid Troyanovsky © (23.06.10 13:09)
> > 12 © (23.06.10 13:03)
> > ShowMessageFmt("№1(int)=%d - не интересен :)
> Переобоснуй.
это же сам указываешь
← →
turbouser © (2010-06-23 13:56) [4]
> 12 © (23.06.10 13:24) [3]
> это же сам указываешь
а вот [1,pi,"eklmn"] дельфи указывает?
← →
RWolf © (2010-06-23 14:03) [5]
> > 12 © (23.06.10 13:24) [3]
> это же сам указываешь
Если передавать параметром массив Variant"ов, то можно обойтись без явного указания типа в строке формата, в принципе.
← →
Leonid Troyanovsky © (2010-06-23 14:40) [6]
> 12 © (23.06.10 13:24) [3]
> а можно как-то, (и как) понять, что в ShowMessageFmt("%d"
> ,[1,
> первый параметр int?
function MakeStr(const Arg: TVarRec): string;
const
BoolChars: array[Boolean] of Char = ("F", "T");
begin
Result := "";
with Arg do
case VType of
vtInteger: Result := "(int) " + IntToStr(VInteger);
vtBoolean: Result := "(bool) " + BoolChars[VBoolean];
vtChar: Result := "(char) " + VChar;
vtExtended: Result := "(ext) " + FloatToStr(VExtended^);
vtString: Result := "(str) " + VString^;
vtAnsiString: Result := "(ansi) " + string(VAnsiString);
// ..
end;
end;
function FrmStr(const v: array of const): String;
var
i: Longint;
begin
Result := "";
for i := Low(v) to High(v) do
Result := Result + Format("¹%d %s ", [Ord(i)+1, MakeStr(v[i])]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(FrmStr([12, -1e-23, true]));
end;
--
Regards, LVT.
← →
12 © (2010-06-23 15:37) [7]с вариантами ясно
и наверное так и сделаю, что-то типа
> [6] Leonid Troyanovsky © (23.06.10 14:40)
но зачем тогда borland так заморачивался с асмом? Скорость?
← →
Leonid Troyanovsky © (2010-06-23 16:18) [8]
> 12 © (23.06.10 15:37) [7]
> но зачем тогда borland так заморачивался с асмом? Скорость?
Они морочились не с ShowMessageFmt, а с Format.
Она достачно широко используется и, видимо,
захотелось оптимальности.
--
Regards, LVT.
← →
В школу! (2010-06-23 21:47) [9]
> но зачем тогда borland так заморачивался с асмом?
делать нечего
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c