Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.19;
Скачать: CL | DM;

Вниз

Научите работать, как работает 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("&#185;%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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
15-1277411278
AlexDn
2010-06-25 00:27
2010.09.19
Кто-нибудь пользовался Inno Setup?


15-1276784558
Aleks
2010-06-17 18:22
2010.09.19
Armadillo (неожиданное автозакрытие программы)


3-1245325959
vanatage10
2009-06-18 15:52
2010.09.19
Как обновить значение в DBgrid измененное в другой программе


15-1276882263
istok
2010-06-18 21:31
2010.09.19
попал с виртуальной машиной...


15-1277370419
partizan
2010-06-24 13:06
2010.09.19
Открыть веб-страницу