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

    +131

    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
    1
    1
    	
    
    Имеется графический обозреватель картинок, где мини-изображения хранятся в ImageList, а выводятся ListView (поименованные графические файлы). При открытие папок с картинками (где большое количество картинок) возникает торможение отображения. Вся программа начинает тормозить, ожидая загрузки картинок в ListView. Чтобы избежать такого, я вынес загрузку ListBox в отдельный процесс Thread. В результате возникла другая проблема: при загрузке картинок, часть загружается просто черными квадратами. Как избавиться от этого неприятного эффекта?
    
    Код выбора папки для дальнейшего просмотра содержимого:
    
    procedure TForm1.DirectoryListBox1Change(Sender: TObject);
    begin
      Form1.ListView1.Clear;
      Form1.ImageList1.Clear;
      NewThread:=TNewThread.Create(false);
      NewThread.FreeOnTerminate:=true;
      NewThread.Priority:=tpHighest;
      NewThread.Resume;
    end;
    
    Код отдельно выделенного процесса:
    
    procedure TNewThread.Execute;
    begin
      Form1.FillListView(form1.DirectoryListBox1.Directory , '*.jpg');
      Form1.FillListView(form1.DirectoryListBox1.Directory, '*.bmp');
    end;
    
    И наконец код обработки графических файлов с последующей загрузкой в ListBox:
    
    procedure TForm1.fillListView(path: string; mask: string = '*.jpg');
    var
      sr:  TSearchRec;
      img: TPicture;
      bmp: TBitmap;
      pic: TBitMap;
      x,y: integer;
    begin
      img := TPicture.Create;
      bmp := TBitMap.Create;
      pic := TBitMap.Create;
    
      With Form1 do
      if FindFirst(path +'\'+mask, faAnyFile, sr) = 0 then
      begin
        repeat
          if (sr.Name<>'.') and (sr.Name<>'..') and (sr.Attr<>faDirectory) then
          //if (sr.Attr and $20) = $20 then
          begin
            try
              img.LoadFromFile(path +'\'+ sr.Name);
            except
              Continue;
            end;
            bmp.Assign(img.Graphic);
            x:=bmp.Width;
            y:=bmp.Height;
            pic.Width := ImageList1.Width;
            pic.Height:= ImageList1.Height;
            pic.Canvas.Brush.Color :=clWhite;
            pic.Canvas.FillRect(Canvas.ClipRect);
            pic.Canvas.StretchDraw(Rect(0,0,pic.Width, Round((pic.Height*y)/x)), bmp);
            ImageList1.Add(pic, nil);
    
            with ListView1.Items.Add do
            begin
              Caption := sr.Name;
              ImageIndex := ListView1.Items.Count-1;
            end;
          end;
        until FindNext(sr) <> 0;
        FindClose(sr);
      end;
      img.Free;
      bmp.Free;
      pic.Free;
    end;

    Не сопротивляйся, смерть сладка.

    http://hashcode.ru/questions/86688/delphi-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-listview-%D0%B2-%D0%B4%D0%B5%D0%BB%D1%84%D0%B8

    Запостил: Stertor, 27 Июля 2013

    Комментарии (35) RSS

    • Опять какой-то жопокодерр с программерсфорума пишет под моим никомъ)
      Ответить
      • Жопокодер уже не напишет, ибо пароль уже вне зоны доступах)
        Ответить
        • Опять кипятильником балуешься, дрянь?!!
          Ответить
    • На этом hashcode.ru одни дебилы и спермобляди.
      Ответить
    • По минусам и началу сразу понял, кто автор. Так и вышло.
      Ответить
      • >Pascal
        Уже по этому можно понять.
        Ответить
      • У меня создалось впечатление, что отцы людей, которые поставивили плюсы, совершали интромиссию -засовывали совй горячий возбужденный половой хуй- мамам в пупок, когда их делали.
        Ответить
    • Коментну тред

      >В мире биллион языков. Автор выбрал этот. Уважай его выбор, даже если он тебе не по душе.
      "Уважать" в данном случае - забить болт.

      Все-таки зачем сегодня нужен пасцаль и его отростки вроде лазаруса, на котором сто пудов пишут 3,5 человека? Почему бы не начать с языков со сборкой мусора?

      vbs на универсальный язык, имхо, не потянет.
      Ответить
      • Но ведь сборка мусора для анскильных питухов, которые не заботятся о перфомансе.
        Ответить
      • А кто говорит, что он универсальный? Я всего лишь имел в виду, что по сравнению с дохлым пасцалом, даже рулонный язык vbs имеет больше преимуществ: на нем пишут свитки для упрощения различных манипуляций с файлами, системой, а учить его начинающему быдлокодеру легче. О том, что компилятор пасцаля не генерирует нормальные исполняемые для винды (консолечка - гоатсе) - об этом я даже не упоминаю.
        Ответить
        • Турбо пасцал - вот так пасцал! Все кругом забрызгал.
          Ответить
        • > компилятор пасцаля не генерирует нормальные исполняемые для винды

          Обобщения не нужны. Компиляторов много. Который из них не генерирует нормальные исполняемые для винды?
          Ответить
          • кроме делфи - никакой ))
            Но Делфи не паскаль, паскаль не Делфи.
            А компиляторов и впрямь много: FreePascal, TurboPascal, TMT Pascal, DEV Pascal - ни один из них не удовлетворяет моим требованиям.
            Ответить
            • 1. Turbo Pascal генерирует EXE для Win16. Но это тоже не Standard Pascal, а Object Pascal.

              2. Free Pascal, Virtual Pascal и TMT Pascal генерируют для Win32 (FPC умеет и для Win64). Но это тоже Object Pascal.

              3. Oxygene и PascalABC.NET генерируют код для Microsoft.NET, но это тоже Object Pascal.

              4. Prospero Extended Pascal Compiler реализует Extended Pascal.

              5. Наконец, gpc генерирует код для всего, что поддерживает gcc, но при этом реализует и Standard Pascal, и Extended Pascal, и Object Pascal, хотя и плохо совместим с Delphi.
              Ответить
              • Но ведь консолечка...
                Ответить
                • Что консолечка?
                  Ответить
                  • Неудобная среда разработки. Низкоуровневщина. Какой тогда смысл кодить на пасцале? Он ничем не лучше FreeBasic или c++.
                    Ответить
                    • IDE действительно незатейливые, но для каких языков IDE лучше?

                      И поясните, что означает низкоуровневщина.
                      Ответить
                      • Я за визуальные среды.
                        Ответить
                        • показать все, что скрыто> Я за визуальные среды
                          А я думал, ты за визаульные четверги. Для той быдлятины, что ты, должно быть, кодишь, хватит и Notepad++ да компилера в консоли.
                          Ответить
                          • Сообщение удалено.

                            Ненормативная лексика
                            Ответить
                            • Я только написал, что vistefan - мудак, и где здесь ненормативная лексика? Что-то я не понимаю.
                              Ответить
                        • Я за визуальные среды. Делфи и PureBasic, к примеру, я стал учить из-за того лишь, что среды разработки и компилятор удобные, а не от большой любви к синтаксису. Не надо вручную описывать точку входа, регистрацию оконного класса, обработчики событий, прорисовку и тп.: на это уходит время, которое можно было бы потратить на разработку основного функционала. Есть, к примеру, язык FreeBasic - синтаксис сильно напоминает VisualBasic, а работает он быстрее всех бейсиков. Так вот, в нем программу нужно создавать полностью "с нуля". Никаких готовых решений, даже дизайнера форм (не конструктора, как в Делфи) нет. Так какой смысл извращаться, кодить на этом языке? Тогда уже лучше на c++. Паскаля с его убогостью это особенно касается: зачем кодить на консолечке, если есть более удобные среды?
                          Ответить
                          • Анонимб, хоть ты меня поддержи, ты же тоже не любишь консолечку! Консоль=гоатсе.

                            http://sho.rt-b.us/lib/archive/2007/08/caturday-goatse.jpg
                            Ответить
                            • Кстати, вы видели, как в Delphi организована работа с типом Variant? Конкретно то место, где идет проверка, чем заполнена переменная в данный момент - плакать хочется. Такое ощущение, что компилятор спотыкается о такую "вседозволенность" variant
                              Ответить
                            • Сообщение удалено.

                              Антиалкогольная пропаганда
                              Ответить
                              • Консолечка, консолечка, ты ж меня, сука, совсем так лишишь разума, черт бы тебя драл.
                                Ответить
        • Кстати, зачем кому-то учить VBS, если WSH понимает JScript?
          А, зная JScript, можно плавно перейти на веб.
          Ответить

    Добавить комментарий