Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];

Вниз

Люди, которые пишут begin..end вокруг одного оператора   Найти похожие ветки 

 
DVM ©   (2012-12-16 22:18) [160]

Inc и Dec это и не функции или процедуры вообще в привычном понимании, это магия компилятора скорее, Inc(p) дает более оптимальный код, чем p := p + 1


 
QAZ9   (2012-12-16 22:29) [161]


> Особенно с учетом inline?

нету инлайна в "старых" делфях


 
Rouse_ ©   (2012-12-16 22:36) [162]


> QAZ9   (16.12.12 22:29) [161]
>
> > Особенно с учетом inline?
>
> нету инлайна в "старых" делфях

Та шош ты так уперся :) Ну во первых есть, нужно только уметь его использовать. Во вторых не там ты ищешь :)


 
QAZ9   (2012-12-16 22:38) [163]

где в 7ке например искать?


 
DVM ©   (2012-12-16 22:40) [164]


> QAZ9   (16.12.12 22:29) [161]
>
> > Особенно с учетом inline?
>
> нету инлайна в "старых" делфях

Ну применительно к Inc Dec хоть есть он хоть нет его, все одно код будет вставлен по месту, никакого вызова функции то и не будет, самой функции то и нет.

Речь даже не о скорости, а о наглядности, удобстве использования. Там где все упрется в быстродействие, можно и ASM использовать.


 
Игорь Шевченко ©   (2012-12-16 22:44) [165]

Rouse_ ©   (16.12.12 22:09) [159]


> люди реализовавшие Inc/Dec/Max/Min


Я не вижу, чтобы они были реализованы как функции в одну строку.
Я про другое - в каком-то юните (по-моему, из VCL, не могу найти, не хочу врать) есть масса нелепых конструкций, повторяющих поведение сишных операторов.


 
Игорь Шевченко ©   (2012-12-16 22:46) [166]

DVM ©   (16.12.12 22:18) [160]


> Inc(p) дает более оптимальный код, чем p := p + 1


Это было давно и неправда


 
Rouse_ ©   (2012-12-16 22:46) [167]


> QAZ9   (16.12.12 22:38) [163]
> где в 7ке например искать?

Открою тайну - инклуды :)


 
Rouse_ ©   (2012-12-16 22:55) [168]


> Я про другое - в каком-то юните (по-моему, из VCL, не могу
> найти, не хочу врать) есть масса нелепых конструкций, повторяющих
> поведение сишных операторов.

А вот это уже нюанс - покажешь, может и соглашусь...


 
DVM ©   (2012-12-16 23:00) [169]


> Игорь Шевченко ©   (16.12.12 22:46) [166]


> Это было давно и неправда

да, посмотрел, действительно теперь компилятор заменяет выражения k := k + 1 на точно такой же код, какой раньше он порождал для Inc(k). Один в один.


Unit5.pas.37: inc(k, 10);
00510639 8345E80A         add dword ptr [ebp-$18],$0a

Unit5.pas.52: k := k + 10;
005106E9 8345E80A         add dword ptr [ebp-$18],$0a


 
DVM ©   (2012-12-16 23:05) [170]


> Игорь Шевченко ©   (16.12.12 22:44) [165]


> Я про другое - в каком-то юните (по-моему, из VCL, не могу
> найти, не хочу врать) есть масса нелепых конструкций, повторяющих
> поведение сишных операторов.

этот юнит случайно не для линковки какой то сишной либы типа zlib?


 
Rouse_ ©   (2012-12-16 23:10) [171]


> DVM ©   (16.12.12 23:00) [169]
>
> > Игорь Шевченко ©   (16.12.12 22:46) [166]
>
>
> > Это было давно и неправда
>
> да, посмотрел, действительно теперь компилятор заменяет
> выражения k := k + 1 на точно такой же код, какой раньше
> он порождал для Inc(k). Один в один.

с адресной арифметикой INC выиграет, но на нюансах, надо найти в загашниках код который кажет данный нюанс...


 
Игорь Шевченко ©   (2012-12-16 23:11) [172]

DVM ©   (16.12.12 23:05) [170]

Нет, но явно что-то сишное переписывалось. Даже в блогах по этому модулю или связанному с ним проходились.


 
Игорь Шевченко ©   (2012-12-16 23:34) [173]

Дабы не слыть голословным

возможно, я натыкался на это

function Incr(var Arg: Integer): Integer; inline;
begin
 Inc(Arg);
 Result := Arg;
end;

function Decr(var Arg: Integer): Integer; inline;
begin
 Dec(Arg);
 Result := Arg;
end;

function IncrAfter(var Arg: Integer): Integer; inline;
begin
 Result := Arg;
 Inc(Arg);
end;

function DecrAfter(var Arg: Integer): Integer; inline;
begin
 Result := Arg;
 Dec(Arg);
end;

function C_Conditional(const Condition: Boolean; const TruePart, FalsePart: UnicodeString): UnicodeString;
begin
 if Condition then
   Result := TruePart
 else
   Result := FalsePart;
end;


C:\Program Files\Embarcadero\RAD Studio\7.0\source\database\dbxplatform.pas

причем, только в 10% эти функции используются, как функции, в 90% - как процедуры, то есть, ничем не отличаются от стандартных Inc, Dec


 
Игорь Шевченко ©   (2012-12-16 23:39) [174]

Оттуда же

 if Hex = nil then
 begin
   SetLength(Hex,16);
   Hex[0] := Ord("0");
   Hex[1] := Ord("1");
   Hex[2] := Ord("2");
   Hex[3] := Ord("3");
   Hex[4] := Ord("4");
   Hex[5] := Ord("5");
   Hex[6] := Ord("6");
   Hex[7] := Ord("7");
   Hex[8] := Ord("8");
   Hex[9] := Ord("9");
   Hex[10] := Ord("A");
   Hex[11] := Ord("B");
   Hex[12] := Ord("C");
   Hex[13] := Ord("D");
   Hex[14] := Ord("E");
   Hex[15] := Ord("F");
   SetLength(MethodStart,10);
   MethodStart[0] := Ord("{");
   MethodStart[1] := Ord(""");
   MethodStart[2] := Ord("m");
   MethodStart[3] := Ord("e");
   MethodStart[4] := Ord("t");
   MethodStart[5] := Ord("h");
   MethodStart[6] := Ord("o");
   MethodStart[7] := Ord("d");
   MethodStart[8] := Ord(""");
   MethodStart[9] := Ord(":");
   SetLength(ParamsStart,10);
   ParamsStart[0] := Ord(""");
   ParamsStart[1] := Ord("p");
   ParamsStart[2] := Ord("a");
   ParamsStart[3] := Ord("r");
   ParamsStart[4] := Ord("a");
   ParamsStart[5] := Ord("m");
   ParamsStart[6] := Ord("s");
   ParamsStart[7] := Ord(""");
   ParamsStart[8] := Ord(":");
   ParamsStart[9] := Ord("[");
   SetLength(Connect,10);
   Connect[0] := Ord(""");
   Connect[1] := Ord("c");
   Connect[2] := Ord("o");
   Connect[3] := Ord("n");
   Connect[4] := Ord("n");
   Connect[5] := Ord("e");
   Connect[6] := Ord("c");
   Connect[7] := Ord("t");
   Connect[8] := Ord(""");
   Connect[9] := Ord(",");
   SetLength(Disconnect,13);
   Disconnect[0] := Ord(""");
   Disconnect[1] := Ord("d");
   Disconnect[2] := Ord("i");
   Disconnect[3] := Ord("s");
   Disconnect[4] := Ord("c");
   Disconnect[5] := Ord("o");
   Disconnect[6] := Ord("n");
   Disconnect[7] := Ord("n");
   Disconnect[8] := Ord("e");
   Disconnect[9] := Ord("c");
   Disconnect[10] := Ord("t");
   Disconnect[11] := Ord(""");
   Disconnect[12] := Ord(",");
   SetLength(Prepare,10);
   Prepare[0] := Ord(""");
   Prepare[1] := Ord("p");
   Prepare[2] := Ord("r");
   Prepare[3] := Ord("e");
   Prepare[4] := Ord("p");
   Prepare[5] := Ord("a");
   Prepare[6] := Ord("r");
   Prepare[7] := Ord("e");
   Prepare[8] := Ord(""");
   Prepare[9] := Ord(",");
   SetLength(Parameters,15);
   Parameters[0] := Ord("{");
   Parameters[1] := Ord(""");
   Parameters[2] := Ord("p");
   Parameters[3] := Ord("a");
   Parameters[4] := Ord("r");
   Parameters[5] := Ord("a");
   Parameters[6] := Ord("m");
   Parameters[7] := Ord("e");
   Parameters[8] := Ord("t");
   Parameters[9] := Ord("e");
   Parameters[10] := Ord("r");
   Parameters[11] := Ord("s");
   Parameters[12] := Ord(""");
   Parameters[13] := Ord(":");
   Parameters[14] := Ord("[");
   SetLength(Execute,10);
   Execute[0] := Ord(""");
   Execute[1] := Ord("e");
   Execute[2] := Ord("x");
   Execute[3] := Ord("e");
   Execute[4] := Ord("c");
   Execute[5] := Ord("u");
   Execute[6] := Ord("t");
   Execute[7] := Ord("e");
   Execute[8] := Ord(""");
   Execute[9] := Ord(",");
   SetLength(CommandClose,16);
   CommandClose[0] := Ord(""");
   CommandClose[1] := Ord("c");
   CommandClose[2] := Ord("o");
   CommandClose[3] := Ord("m");
   CommandClose[4] := Ord("m");
   CommandClose[5] := Ord("a");
   CommandClose[6] := Ord("n");
   CommandClose[7] := Ord("d");
   CommandClose[8] := Ord("_");
   CommandClose[9] := Ord("c");
   CommandClose[10] := Ord("l");
   CommandClose[11] := Ord("o");
   CommandClose[12] := Ord("s");
   CommandClose[13] := Ord("e");
   CommandClose[14] := Ord(""");
   CommandClose[15] := Ord(",");
   SetLength(ReaderClose,15);
   ReaderClose[0] := Ord(""");
   ReaderClose[1] := Ord("r");
   ReaderClose[2] := Ord("e");
   ReaderClose[3] := Ord("a");
   ReaderClose[4] := Ord("d");
   ReaderClose[5] := Ord("e");
   ReaderClose[6] := Ord("r");
   ReaderClose[7] := Ord("_");
   ReaderClose[8] := Ord("c");
   ReaderClose[9] := Ord("l");
   ReaderClose[10] := Ord("o");
   ReaderClose[11] := Ord("s");
   ReaderClose[12] := Ord("e");
   ReaderClose[13] := Ord(""");
   ReaderClose[14] := Ord(",");
   SetLength(ResultStart,11);
   ResultStart[0] := Ord("{");
   ResultStart[1] := Ord(""");
   ResultStart[2] := Ord("r");
   ResultStart[3] := Ord("e");
   ResultStart[4] := Ord("s");
   ResultStart[5] := Ord("u");
   ResultStart[6] := Ord("l");
   ResultStart[7] := Ord("t");
   ResultStart[8] := Ord(""");
   ResultStart[9] := Ord(":");
   ResultStart[10] := Ord("[");
   SetLength(ErrorStart,17);
   ErrorStart[0] := Ord("{");
   ErrorStart[1] := Ord(""");
   ErrorStart[2] := Ord("e");
   ErrorStart[3] := Ord("r");
   ErrorStart[4] := Ord("r");
   ErrorStart[5] := Ord("o");
   ErrorStart[6] := Ord("r");
   ErrorStart[7] := Ord(""");
   ErrorStart[8] := Ord(":");
   ErrorStart[9] := Ord("{");
   ErrorStart[10] := Ord(""");
   ErrorStart[11] := Ord("n");
   ErrorStart[12] := Ord("a");
   ErrorStart[13] := Ord("m");
   ErrorStart[14] := Ord("e");
   ErrorStart[15] := Ord(""");
   ErrorStart[16] := Ord(":");
   SetLength(CodeLabel,7);
   CodeLabel[0] := Ord(""");
   CodeLabel[1] := Ord("c");
   CodeLabel[2] := Ord("o");
   CodeLabel[3] := Ord("d");
   CodeLabel[4] := Ord("e");
   CodeLabel[5] := Ord(""");
   CodeLabel[6] := Ord(":");
   SetLength(MessageLabel,10);
   MessageLabel[0] := Ord(""");
   MessageLabel[1] := Ord("m");
   MessageLabel[2] := Ord("e");
   MessageLabel[3] := Ord("s");
   MessageLabel[4] := Ord("s");
   MessageLabel[5] := Ord("a");
   MessageLabel[6] := Ord("g");
   MessageLabel[7] := Ord("e");
   MessageLabel[8] := Ord(""");
   MessageLabel[9] := Ord(":");
   SetLength(NullValue,4);
   NullValue[0] := Ord("n");
   NullValue[1] := Ord("u");
   NullValue[2] := Ord("l");
   NullValue[3] := Ord("l");
   SetLength(TrueValue,4);
   TrueValue[0] := Ord("t");
   TrueValue[1] := Ord("r");
   TrueValue[2] := Ord("u");
   TrueValue[3] := Ord("e");
   SetLength(FalseValue,5);
   FalseValue[0] := Ord("f");
   FalseValue[1] := Ord("a");
   FalseValue[2] := Ord("l");
   FalseValue[3] := Ord("s");
   FalseValue[4] := Ord("e");
...
 end;


 
GEN++ ©   (2012-12-16 23:40) [175]

Пусть я n! раз тормоз прогресса и заклятый враг программистов
все времен и народов - но ставить begin ... end даже на один оператор
буду!!!!!


 
DVM ©   (2012-12-16 23:55) [176]


> Игорь Шевченко ©   (16.12.12 23:34) [173]


> function C_Conditional(const Condition: Boolean; const TruePart,
>  FalsePart: UnicodeString): UnicodeString;

а вот такого плана функция на мой взгляд часто бывает полезна, другое ее название IIF и для разных типов перегруженные ее варианты. Помогает сильно сократить запись, например при формировании строки подключения ADO к серверу.


> Игорь Шевченко ©   (16.12.12 23:39) [174]

а это какая то жесть, зачем так было делать мне не очень понятно. Оно и не наглядно и длинно. Как будто кто-то для теста по быстрому написал и так оно и осталось.


 
Игорь Шевченко ©   (2012-12-17 00:01) [177]

DVM ©   (16.12.12 23:55) [176]


> а вот такого плана функция на мой взгляд часто бывает полезна,
>  другое ее название IIF и для разных типов перегруженные
> ее варианты. Помогает сильно сократить запись, например
> при формировании строки подключения ADO к серверу.


Расстреливать из ржавого пистолета за такое применение. Во-первых, вызов влечет за собой вычисление ВСЕХ ее операндов, даже тех, которые по условию не будут нужны, во-вторых, код становится непонятнее.

Что делается в этой строке ? (indy)

     StreamWrite(AStream, iif(HeadContent <> "", HeadContent));


 
Игорь Шевченко ©   (2012-12-17 00:02) [178]

DVM ©   (16.12.12 23:55) [176]


> а это какая то жесть


целиком код не влез, там еще сотня строк такого же плана


 
DVM ©   (2012-12-17 00:07) [179]


> Игорь Шевченко ©   (17.12.12 00:01) [177]


> Во-первых, вызов влечет за собой вычисление ВСЕХ ее операндов,
>  даже тех, которые по условию не будут нужны

ну это критично редко бывает


> во-вторых, код становится непонятнее.

Есть такое. Но все равно, на мой взгляд удобно с ней.


>
> Что делается в этой строке ? (indy)
>
>      StreamWrite(AStream, iif(HeadContent <> "", HeadContent));
>
>
>

а где еще один параметр у iif ?


 
Игорь Шевченко ©   (2012-12-17 00:18) [180]

DVM ©   (17.12.12 00:07) [179]

А почему должно быть несколько параметров ?

Я привел код, источник
C:\Program Files\Embarcadero\RAD Studio\7.0\source\IntraWeb\iwtemplateprocessorwap.pas

еще пример (не из indy)

         for I := 0 to S.Count - 1 do
           writeln(T, Format("   ""%s""%s", [S[I], IIF(S.Count - 1 - I,
                 0, "", "||CHR(13)||CHR(10)||")]));

сколько времени потребуется, чтобы понять смысл действий ?


 
DVM ©   (2012-12-17 00:28) [181]


> Игорь Шевченко ©   (17.12.12 00:18) [180]
> DVM ©   (17.12.12 00:07) [179]
>
> А почему должно быть несколько параметров ?

А какой смысл когда параметров только 2 (условие и один из вариантов)?

Ну обычно IIF(условие, результат при ИСТИНА, результат при ЛОЖНО): тип результата;

Я только за такой вариант.


> for I := 0 to S.Count - 1 do
>            writeln(T, Format("   ""%s""%s", [S[I], IIF(S.
> Count - 1 - I,
>                  0, "", "||CHR(13)||CHR(10)||")]));
>
> сколько времени потребуется, чтобы понять смысл действий
> ?

Кому как, это дело привычки, если знать доподлинно, что делает IIF тому понятно, остальным нет.
А вообще мудрено написано. В си стиле я бы даже сказал.


 
Игорь Шевченко ©   (2012-12-17 00:36) [182]

DVM ©   (17.12.12 00:28) [181]


> А какой смысл когда параметров только 2 (условие и один
> из вариантов)?


Смотрим потроха indy и видим несколько объявлений:

function iif(ATest: Boolean; const ATrue: Integer; const AFalse: Integer): Integer; overload;
function iif(ATest: Boolean; const ATrue: string; const AFalse: string = ""): string; overload; { do not localize }
function iif(ATest: Boolean; const ATrue: Boolean; const AFalse: Boolean): Boolean; overload;

Я сам в таком же недоумении был - как это, iif и два параметра ?

а стандартная конструкция if then else не может быть overload, поэтому всегда понятна :)

Я все к одному - если код подобных субгениев не приходилось бы сопровождать - пусть себе пишут, как хотят.


 
Германн ©   (2012-12-17 02:12) [183]

А в результате весь спор свёлся к тому, что давно уже очевидно:
Borland/CodeGear/Embarkadero собирают весь "мусор", если он бесплатный.
Ну или его можно купить со скидкой.


 
RGV ©   (2012-12-17 05:09) [184]

я пишу так
 
 case day of
    1: FeedCat("Мурзик");
    2: begin
           FeedCat("Масяня");
           FeedCat("Мурзик");
        end;
    else FeedAllCats;
 end;
 try getObject(obj) except  DoSomething end;


 
TUser ©   (2012-12-17 07:04) [185]

у iif 4 параметра?

IIF(
S.Count - 1 - I,
0,
"",
"||CHR(13)||CHR(10)||")


 
DVM ©   (2012-12-17 10:14) [186]


> TUser ©   (17.12.12 07:04) [185]
> у iif 4 параметра?

да их там хоть 100 сделать можно, тогда он CASE подобным становится.


 
QAZ9   (2012-12-17 10:16) [187]


> Открою тайну - инклуды :)

мдаааа ,так и думал что про них вспомнишь
и как ты себе это представляеш?
например x:=x+1; помещенный в иклюд каким местом мне применить для y ?


 
RWolf ©   (2012-12-17 10:35) [188]


>  [180]
>          for I := 0 to S.Count - 1 do
>            writeln(T, Format("   ""%s""%s", [S[I], IIF(S.
> Count - 1 - I,                  0, "", "||CHR(13)||CHR(10)||")]));
>


этот код непрозрачен не из-за IIF, а из-за кривой записи.

for I := 0 to S.Count - 1 do
begin
 arg := IIF(S.Count - 1 - I, 0,
               "",
               "||CHR(13)||CHR(10)||");
 writeln(T, Format("   ""%s""%s", [S[I], arg]));
end;


 
Дмитрий С ©   (2012-12-17 10:37) [189]


> например x:=x+1; помещенный в иклюд каким местом мне применить
> для y ?

{$I include_begin.inc}y{$I include_middle.inc}1{$I include_end.inc} :)


 
Rouse_ ©   (2012-12-17 10:38) [190]


> QAZ9   (17.12.12 10:16) [187]
>
> > Открою тайну - инклуды :)
>
> мдаааа ,так и думал что про них вспомнишь

А зачем x := x + 1 в инклуд то помещать, когда есть Inc? :)
В остальных случаях соблюдаются определенные правила.


 
QAZ9   (2012-12-17 10:43) [191]


> А зачем x := x + 1 в инклуд то помещать

это минимальный гипотетический пример на твой гипотетический ответ

> Дмитрий С ©   (17.12.12 10:37) [189]

а содержимое этих самых файлов?
и кстати по любому проще повторить 100500 раз нужный код в разных местах чем инклюдить или и тут поспорим ?


 
DVM ©   (2012-12-17 11:22) [192]


> QAZ9   (17.12.12 10:43) [191]


> и кстати по любому проще повторить 100500 раз нужный код
> в разных местах

Проще функцию сделать, чем повторять код 100500 раз в нужных местах. А накладные расходы на вызов функции как правило в обычном коде не заметны, если только функция не вызывается в цикле миллионы раз.


 
QAZ9   (2012-12-17 11:35) [193]


> DVM ©   (17.12.12 11:22) [192]

неспорю :)
но батонокидатели обожают такие функции пихать в циклы миллиоразные :)
типа чем меньше букв тем оптимизированней код


 
Игорь Шевченко ©   (2012-12-17 11:53) [194]

RWolf ©   (17.12.12 10:35) [188]

А чем вариант


        for I := 0 to S.Count - 1 do
          if I <> S.Count - 1 then //Не последняя строка
            writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||", [S[I]]))
          else
            writeln(T, Format("   ""%s""", [S[I]]));


менее прозрачен ?


 
RWolf ©   (2012-12-17 11:56) [195]


> [194]

ничем, лично я так и написал бы.


 
RWolf ©   (2012-12-17 11:58) [196]

впрочем, вру, я написал бы
writeln(T, "   """, S[I], ""||CHR(13)||CHR(10)||")
;)


 
Sha ©   (2012-12-17 12:32) [197]

> Игорь Шевченко ©   (17.12.12 11:53) [194]

Я бы и этот вариант развернул.
Спрашивается, нафига там формат, а не обычное сцепление?

P.S.
Сейчас как раз ковыряю корпоративный софт.
Настоящее лекарство от альцгеймера:
ребусы, кроссворды, анекдоты рядом не стояли.


 
Компромисс1   (2012-12-17 12:47) [198]

Кстати, всегда раздражал код вида

for I := 0 to S.Count - 1 do
          if I <> S.Count - 1 then //Не последняя строка
            writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||", [S[I]]))
          else
            writeln(T, Format("   ""%s""", [S[I]]));

так и хочется его заменить на

if S.Count > 0 then
begin
 for I := 0 to S.Count - 2 do
 begin
     writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||", [S[I]]))
 end;
 // последняя строка
  writeln(T, Format("   ""%s""", [S[S.Count-1]]));
end;


 
Компромисс1   (2012-12-17 12:47) [199]

Кстати, всегда раздражал код вида

for I := 0 to S.Count - 1 do
          if I <> S.Count - 1 then //Не последняя строка
            writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||", [S[I]]))
          else
            writeln(T, Format("   ""%s""", [S[I]]));

так и хочется его заменить на

if S.Count > 0 then
begin
 for I := 0 to S.Count - 2 do
 begin
     writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||", [S[I]]))
 end;
 // последняя строка
  writeln(T, Format("   ""%s""", [S[S.Count-1]]));
end;


 
Игорь Шевченко ©   (2012-12-17 15:16) [200]

Компромисс1   (17.12.12 12:47) [199]


> if S.Count > 0 then
> begin
>  for I := 0 to S.Count - 2 do
>  begin
>      writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||",
> [S[I]]))
>  end;
>  // последняя строка
>   writeln(T, Format("   ""%s""", [S[S.Count-1]]));
> end;


непонятно

Sha ©   (17.12.12 12:32) [197]


> Я бы и этот вариант развернул.
> Спрашивается, нафига там формат, а не обычное сцепление?
>


Кстати, да. Формат там ни к селу


> Сейчас как раз ковыряю корпоративный софт.
> Настоящее лекарство от альцгеймера:
> ребусы, кроссворды, анекдоты рядом не стояли.


Не сыпь мне соль на рану :)



Страницы: 1 2 3 4 5 6 вся ветка

Форум: "Прочее";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.84 MB
Время: 0.02 c
15-1355922292
картман
2012-12-19 17:04
2013.04.14
хочу 32 часа


15-1355862609
Юрий
2012-12-19 00:30
2013.04.14
С днем рождения ! 19 декабря 2012 среда


15-1355847254
dummy_user
2012-12-18 20:14
2013.04.14
Как сделать удобный Dispose TList?


4-1264578817
Interesting
2010-01-27 10:53
2013.04.14
Время по GMT


15-1355839583
dummy_user
2012-12-18 18:06
2013.04.14
TClassList. Получить класс по названию.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский