1. Pascal / Говнокод #12472

    +98

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    Сижу такой набираю код
    
    program Project6;
    
    {$APPTYPE CONSOLE}
    var i,j: integer;
    
    begin
      repeat
        readln(j);
        i := 0;
        if (j=0) then
          i := 1
        else
          break;
        Writeln(i);
      until false;
    end.
    [Hint] : Value assigned to 'i' never used
    
    Ну ладно, похер, уберу
    
    program Project6;
    
    {$APPTYPE CONSOLE}
    var i,j: integer;
    
    begin
      repeat
        readln(j);
       // i := 0;
        if (j=0) then
          i := 1
        else
          break;
        Writeln(i);
      until false;
    end.
    [Warning] : Variable 'i' might not have been initialized
    
                                                                                    
                                                                                    
                                                                                    
                                                                                    
                                 _________________                                  
                     g@@@@@44444*********9444@@@@@@@@@@@Mggg__                      
                   g@M"         _an**"""""""**Vw=G______"%%@@@@@gg_                 
                 ,@@`        a^"  __a=~v-vvv~~,___         _____`"*@gg_             
                a@@       _M" _m*"` _______     `""""""""""`    "   "9@g_           
                @@      a" ,m"_ar*"'`     -,         ,amv****-~,       9@g          
               @@        .* u"              C         ,~        "\       @          
              d@           '    __gg____              `                  @y         
             g@             ,g@@@@@@@@4@@gg_          C   ______         9@g        
           g@@.>~.     __  a@""@@@@@@__  "9@g         ,g@@@@**4@@_        "@g_      
         g@"$-*"""     *Y, @@@@*""**4@@@g__$@C     ggg@@@@@@@@@@*" "'" ""Mg`8@g     
       g@",`  ,g@@@@@@@g_       _g@     ""@M"      `"@@"                *n_"C"@@    
      g@'    p@"    ,`"@@@ggggg@@"                   8]      ,_  _gM@@@@g ' 'C8@    
      @@    j@     8@_    `"""'                      8@g_    3@g@@@`,  `"    ][@    
      @L    8@  _g@@@@@gg_              _gMMy         "9@g_    `""' 8L       j8@    
      @k    3@ d@@@@   "@@@gg_   *""""" @"``___         '@@g_       @@C  n"  Q@     
      "@C $  9k    @@_    "8@@@@gg_     @g_fM4@@M      g@""" "n.   a@@@  _m*3@"     
       "@g N,      9@@gg_  8@ `""9@@@gg__"         8gg@M        _g@@@d@k   a@%      
        "@@g_'      "@@@@@@@@g_     `"8@@@@ggg____  ""`   ___gg@@@@ 8@@@   @@       
          "@g_       '@g `"@@@@gg__   @L  `"""4@@@@@@@@@@@@@@@@"  @C @@@  3@        
            9@_       `@g  3@"9@@@@@@g@        [@     @@     4@y  @kg@@@  [@        
             9@         8@gd@   '"9@@@@@@@gggggd@gggggd@gggggg@W@@@@@@@@  [@        
              8g         "@@g        @""9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F  [@        
               @g          "@@g_    d@     '""@@@@@@@@@@@@@@@@@@@@@@@$@   3@        
               `@g_          "@@@g_j@'        @C  ``"3@@"""8@""j@'j@g@@   3@        
                 9@g_ ~__ ~._  `"@@@@g_       @C     8@   g@^ p@^ "@@M     @C       
                   "@@g "9m_ "Nq_  "*@@@@ggggg@______@____@@gg@@@@@M"      @L       
                     "9@@g_`"Mm_`"Nq_   """"*4@@@@@@@@@@M@@4*"""'          8k       
                        "9@@g_ ""Mm_"*w__       ~~~~ aaa~~        _/       $@       
                           `"@@gg_  "*WG_"*w~.____          ___am*"    /   [@       
                               "*@@gg    `"*-~<.__         `       __M"    3@       
                                   "9@gg_         `""'** ------**""`       d@       
                                      `"@@ggggg__                        ,d@        
                                          ""9@@@@@gg__                __g@"         
                                                 `""*4@@@@MggggggggM@@@@"           
                                                         `""""""""""'

    TarasB, 24 Января 2013

    Комментарии (147)
  2. Pascal / Говнокод #12471

    +95

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    if length(fsizeS)<=9 then fsize:=strtoint(fsizeS);
    if (length(fsizeS)>9) and (length(fsizeS)<18) then
      fsize:=strtoint(copy(fsizeS,length(fsizeS)-8,length(fsizeS)-9))+
         strtoint(copy(fsizeS,1,length(fsizeS)-9))*1000000000{10**9};
    if length(fsizeS)>18 then
     begin
      writeln;
      writeln('File:'+curstr);
      writeln('Size:'+fsizeS);
      write('Please input file''s size, written above:');
      readln(fsize);
     end;

    Интересный способ конвертации строки в число. Думаю, у вас здесь такого ещё не было. Нашел в своих исходниках времён 8 - 9 класса.

    vovams, 24 Января 2013

    Комментарии (2)
  3. Pascal / Говнокод #12375

    +90

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    program Project1;
    Var
      i,j : Integer;
    begin
        i := 300001; j := 300002;
        asm
         MOV EAX, I;
         XCHG EAX,j
         MOV I, EAX;
        end;
        Write(i,' ',j); Readln;
    end.

    Ещё один кулхацкерный метод перестановки значений двух чисел местами.

    Govnocoder#0xFF, 30 Декабря 2012

    Комментарии (27)
  4. Pascal / Говнокод #12304

    +82

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    var
      u: longint;
     
    begin
      u := $-80000000;
      writeln(u);
    end.

    Жуквери в Дельфи7. Компилируется.

    TarasB, 18 Декабря 2012

    Комментарии (77)
  5. Pascal / Говнокод #12272

    +91

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    procedure RecursiveVisibility(e : PCreature; oct, depth : integer; slopeA, slopeB : single);
    var
      x, y : integer;
    begin
      case oct of
        1 : begin
          y := e^.y - depth;                                                { initialize y }
          x := round(e^.x - slopeA * depth);                                { initialize z }
          while GetSlopeStd(x, y, e^.x, e^.y) >= slopeB do begin            { while in octant }
            if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin            { if within max visual range }
              if WorldSurface[x, y].entity^.obstruct then begin             { if obstruction }
                if not WorldSurface[x - 1, y].entity^.obstruct then begin   { if no prior obstruction }
                  RecursiveVisibility(e, 1, depth + 1, slopeA, GetSlopeStd(x - 0.5, y + 0.5, e^.x, e^.y));
                end;                                                        { ^create recursive scan }
              end else begin                                                { no obstruction }
                if WorldSurface[x - 1, y].entity^.obstruct then begin       { if prior obstruction }
                  slopeA := GetSlopeStd(x - 0.5, y - 0.5, e^.x, e^.y);      { adjust slope for later recursion }
                end;
              end;
              WorldSurface[x, y].visibility := 3;                           { set block visible }
            end;
            inc(x);
          end;
          dec(x)
        end;
        2 : begin
          y := e^.y - depth;                                                { initialize y }
          x := round(e^.x + slopeA * depth);                                { initialize z }
          while GetSlopeStd(x, y, e^.x, e^.y) <= slopeB do begin            { while in octant }
            if GetVisDistance(x, y, e^.x, e^.y) <= mw then begin            { if within max visual range }
              if WorldSurface[x, y].entity^.obstruct then begin             { if obstruction }
                if not WorldSurface[x + 1, y].entity^.obstruct then begin   { if no prior obstruction }
                  RecursiveVisibility(e, 2, depth + 1, slopeA, GetSlopeStd(x + 0.5, y + 0.5, e^.x, e^.y));
                end;                                                        { ^create recursive scan }
              end else begin                                                { no obstruction }
                if WorldSurface[x + 1, y].entity^.obstruct then begin       { if prior obstruction }
                  slopeA := -GetSlopeStd(x + 0.5, y - 0.5, e^.x, e^.y);     { adjust slope for later recursion }
                end;
              end;
              WorldSurface[x, y].visibility := 3;                           { set block visible }
            end;
            dec(x);
          end;
          inc(x)
        end;
     // Далее всё в таком же духе.

    Отсюда: http://roguebasin.roguelikedevelopment.org/index.php?title=FOV_using_recursive_shad owcasting_-_improved
    Можно было сделать менее говнокодистей?

    Govnocoder#0xFF, 11 Декабря 2012

    Комментарии (9)
  6. Pascal / Говнокод #12202

    +75

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    procedure TForm1.RunCode(Code:String;A,B:Cardinal);
    var
    i,j:Cardinal;
    dpth:Word;
    itrCounter:Integer;
    ans:Integer;
    begin
     i:=A-1;
      repeat
       i:=i+1;
        if Code[i]='>' then
         if p=30000 then p:=1 else p:=p+1;
        if Code[i]='<' then
         if p=1 then p:=30000 else p:=p-1;
        if Code[i]='+' then allspace[p]:=allspace[p]+1;
        if Code[i]='-' then allspace[p]:=allspace[p]-1;
        if Code[i]='.' then Memo2.Lines.Text:=Memo2.Lines.Text + Chr(allspace[p]);
        if Code[i]='[' then
         begin
          dpth:=0;
          j:=i;
          repeat
           if (Code[j]=']') and (dpth>0) then dpth:=dpth-1;
           j:=j+1;
           if Code[j]='[' then dpth:=dpth+1;
           if j>B then
            begin
             ShowMessage('Обнаружен незакрытый цикл. Выполнение остановится');
             running:=False;
             Exit;
            end;
          until (Code[j]=']') and (dpth=0);
          itrCounter:=0;
          while allspace[p]<>0 Do
           begin
            if running=False then Exit;
            RunCode(Memo1.Text,i+1,j-1);
            itrCounter:=itrCounter+1;
            if itrCounter=10000000 then
             begin
              ans:=MessageDlg('Выполнение программы вероятно зациклилось (прошло уже 10 000 000 итераций). Возможно код содержит ошибки.' + #13 + 'Остановить выполнение?',mtConfirmation,[mbYes,mbNo],0);
              if ans=mrYes then running:=False;
              if ans=mrNo then itrCounter:=0;
             end;
           end;
          i:=j;
         end;
        if Code[i]=',' then EnterChar;
       Application.ProcessMessages;
      until (i>=B) or (running=False);
    end;

    Процедура интерпретации brainfuck кода

    SmseR, 27 Ноября 2012

    Комментарии (164)
  7. Pascal / Говнокод #12185

    +67

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    function IntToHex(N: integer): string;
    const
      S = '0123456789ABCDEF';
    var
      i: integer;
    begin
      SetLength(Result, 8);
      for i := 0 to 7 do Result[8 - i] := S[N shr (i shl 2) and $0F + 1];
    end;

    Носки менял, ноги мыл, все равно воняет хаккирством.

    И оно почему-то в модуле WinAPI.pas у Тараса лежит о_О

    PascalGovno, 23 Ноября 2012

    Комментарии (52)
  8. Pascal / Говнокод #12107

    +99

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    Procedure TForm1.CreateObjects(Column, Row: Integer); // Процедура создания кнопок (ячеек).
    Var
      i, j, iLeft, iTop, iRow : Integer; // Переменные, отвечающие за расположение ячеек на форме. (Кроме iRow, она содержит номер ячейки по горизонтали.)
      SpeedButton : array of TSpeedButton; // Собственно, сам массив с ячейками.
      cColumn : Char; // Номер ячейки по вертикали.
      iMine : ShortInt; // Дополнительная переменная кол-ва бомб на поле.
    BEGIN
    {Присваиваем начальные значения переменным. :7:}
      iLeft := 0; // Начальная позиция по горизонтали.
      iTop := 5; // Начальная позиция по вертикали.
      iRow := 1; // Номер ячейки по горизонтали.
      iMine := MineCount; // Кол-во мин на поле.
      cColumn := 'A'; // Номер ячейки по вертикали.
      SetLength(SpeedButton, Row+1); // Массив с ячейками.
    {------------------------------------------ :7:}
    
    {Создаём новые списки. :8:}
      FObjectList := TObjectList.Create; // Список с объектами.
      Form2.FMineList := TStringList.Create(); // Список с номерами мин на поле.
    {--------------------- :8:}
    
    {Главный цикл создания игрового поля :9:}
      For i := 1 to Column do // Запускаем цикл создания по вертикали.
       Begin
        For j:=1 to Row do // Теперь тоже самое по горизонтали.
         bEgin
           SpeedButton[j] := TSpeedButton.Create(Self); // Создаём очередную ячейку на поле.
           SpeedButton[j].Parent := GamePanel; // Этим параметром указываем, что ячейка принадлежит первой форме.
           SpeedButton[j].Top := iTop; // Задаём расположение ячейки по вертикали.
           SpeedButton[j].Name := cColumn + IntToStr(iRow); // Задаём имя ячейки.
           SpeedButton[j].Flat := True; // Используем св-во кнопок не отображаться на рисунке.
           SpeedButton[j].Font.Color := clBlue; // Делаем цвет текста синим.
           SpeedButton[j].Font.Style := [fsBold]; // Делаем шрифт жирным.
           SpeedButton[j].OnClick := SpeedButton1.OnClick; // Указываем, какая процедура будет вызываться при клике на ячейку.
           SpeedButton[j].OnMouseDown := SpeedButton1.OnMouseDown; // Указываем, какая процедура будет вызываться при нажатии на ячейку.
           SpeedButton[j].Left := iLeft+8; // Задаём расположение ячейки по горизонтали, смещая её на 8 пикселей вправо.
           {Устанавливаем бомбу в ячейку. :10:}
             If (iMine <> 0) and (SpeedButton[j].Name <> 'A1') then // Если кол-во бомб не превышено, то...
              beGin
               Randomize; // Генерируем список ПСЧ.
               SpeedButton[j].Tag := Random(2); // Случайным образом задаём, будет ли бомба находится в ячейке.
               If SpeedButton[j].Tag = 1 then
                begin
                 Form2.FMineList.Add(SpeedButton[j].Name); // Добавляем новую запись в массив бомб.
                 Dec(iMine); // Уменьшаем счетчик мин на единицу.
                end;
              enD;
           {----------------------------- :10:}
             FObjectList.Add(SpeedButton[j]);// Добавляем новую запись в массив ячеек.
             iLeft := iLeft + 24; //Увеличиваем расстояние между ячейками.
             If iRow = Row then iRow := 1 // Если номер следующей ячейки по горизонтали неправильный, то меняем его на 1.
              Else Inc(iRow); // Иначе увеличиваем номер.
         eNd;
        cColumn := Char(Ord(cColumn) + 1); // Увеличиваем номер ячейки по вертикали.
        iTop := iTop + 24; // Увеличиваем положение ячейки по вертикали.
        iLeft := 0; // Обнуляем позицию ячейки по горизонтали.
       End;
    {----------------------------------- :9:}
    
      ImageList1.GetBitmap(0, (FindComponent('A1') as TSpeedButton).Glyph); // Загружаем спрайт в первую ячейку.
      Form2.FMineList.SaveToFile('OUTPUT.TXT'); // Сохраняем расположение мин в файл.
      MineCountLabel.Caption := IntToStr(Form2.FMineList.Count); // Показываем колво мин на поле.
    END;
    
    Function TForm1.CheckMove(X,Y : ShortString): Boolean; // Функция проверки валидности ячейки. Она должна находится рядом с текущей.
    Var
     iXod, iAlf : Integer; // Вспомогательные переменные.
    BEGIN
     result := false; // Презумпция вины :)
     iXod := Abs(StrToInt(Y) - StrToInt(dPos.yInt)); // Получаем расстояние до текущей ячейки по горизонтали.
     iAlf := Abs(Ord(dPos.xChr) - Ord(X[1])); // Получаем расстояние до текущей ячейки по вертикали.
     If ((iXod <= 1) and (iAlf <= 1)) and ((iXod <> 0) or (iAlf <> 0)) then result := true; // И если оно не больше одного, то разрешаем ход.
    END;
    
    Procedure TForm1.SpeedButton1Click(Sender: TObject); // Главная процедура нажатия на кнопку(ячейку).
    Var
      i : Integer; // Счётчик цикла.
      cObject : TSpeedButton; // Сам объект.
      Str, j : String; // Вспомогательная переменная имени ячейки.
      Count : Integer; // Вспомогательная переменная. (стр. 160)
    BEGIN
    {Подготавливаем переменные :1:}
      cObject := TSpeedButton(Sender); // Получаем ячейку, на которую кликнули.
      Str := cObject.Name; // Присваиваем вспомогательной переменной имя задействованной ячейки.
      dClick.xAlf := Str[1]; // Присваиваем переменной первый символ задействованной ячейки по вертикали.
      dClick.yFlt := Copy(Str, 2, Length(Str)); // Получаем номер ячейки по горизонтали.
    {------------------------- :1:}
    ...

    По просьбам желающих. Код некогда созданной мною игрушки Сапёр. Отдельный прикол, это как потом все эти кнопки удаляются.

    Govnocoder#0xFF, 12 Ноября 2012

    Комментарии (149)
  9. Pascal / Говнокод #12097

    +81

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Если ты имеешь в виду, что появляются полосы прокрутки и 
    уродуют окно или stringgrid, то просто оставляй "запас" в
    несколько пикселей, т.к. на разных системах может быть разная
    ширина краев формы и прочих элементов.
    А что, я еще и код писать должен чтобы какие-то экзотичные
    темы винды поддерживать? Нет уж, я лучше несколько
    пикселей оставлю запаса.

    Вся суть дельфинов
    http://www.gamedev.ru/code/forum/?id=168899

    Topacer, 11 Ноября 2012

    Комментарии (43)
  10. Pascal / Говнокод #11824

    +100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    procedure TDetailForm.GridPanel1Click(Sender: TObject);
    var
      i: Integer;
      s: String;
    begin
      //set title and subtitle
      if Pos('Item', TControl(Sender).Name) > 0 then begin
        if Sender.ClassName = 'TImage' then begin
          i := Length(TControl(Sender).Name) - Length('ItemImage') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
          ItemSubtitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end else if Pos('ItemSubTitle', TControl(Sender).Name) > 0 then begin
          ItemSubtitle.Caption := TLabel(Sender).Caption;
          i := Length(TControl(Sender).Name) - Length('ItemSubTitle') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
        end else if Pos('ItemDescription', TControl(Sender).Name) > 0 then begin
          i := Length(TControl(Sender).Name) - Length('ItemDescription') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemTitle.Caption := TLabel(DetailForm.FindComponent('ItemTitle' + s)).Caption;
          ItemSubtitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end else begin
          ItemTitle.Caption := TLabel(Sender).Caption;
          i := Length(TControl(Sender).Name) - Length('ItemTitle') - 1;
          s := Copy(TControl(Sender).Name, Length(TControl(Sender).Name) - i, Length(TControl(Sender).Name));
          ItemSubTitle.Caption := TLabel(DetailForm.FindComponent('ItemSubTitle' + s)).Caption;
        end;
      end;
    end;

    Код из шаблона New Metropolis UI Application в новом Delphi XE3. Рефлексия так и прет.

    kipar, 23 Сентября 2012

    Комментарии (45)