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

    +86

    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
    begin
       if CheckListBox1.checked[2] or CheckListBox1.checked[3]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Генераторы шумовых сигналов');
        if CheckListBox1.checked[2] or CheckListBox1.checked[3]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Низкочастотные генераторы сигналов');
       if CheckListBox1.checked[2] or CheckListBox1.checked[3]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Усилители мощности');
       if CheckListBox1.checked[2] or CheckListBox1.checked[3]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Акустические излучатели');
       if CheckListBox1.checked[2] or CheckListBox1.checked[3]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Измерители шума и вибраций (шумомеры)');
       if CheckListBox1.checked[0]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2] or CheckListBox3.checked[0]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Селективные микровольтметры, измерительные приемники (анализаторы спектра)');
       if CheckListBox1.checked[0] or CheckListBox1.checked[1] or CheckListBox1.checked[2] or CheckListBox1.checked[3]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[3]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Селективные нановольтметры');
       if CheckListBox1.checked[2] or CheckListBox1.checked[2]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Измерительные микрофоны');
       if CheckListBox1.checked[0] or CheckListBox1.checked[1]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[0]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Измерительные антенны');
       if CheckListBox1.checked[2] or CheckListBox1.checked[3]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2]
       then Form2.Memo1.Lines.Add('Вибродатчики (акселерометры)');
       if CheckListBox1.checked[0] or CheckListBox1.checked[1]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[0]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Измерительные пробники');
       if CheckListBox1.checked[2] or CheckListBox1.checked[3]
        or CheckListBox2.checked[0] or CheckListBox2.checked[1] or CheckListBox2.checked[2]
        or CheckListBox3.checked[1] or CheckListBox3.checked[2]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Полосовые октавные фильтры со среднегеометри- ческими частотами 250, 500, 1000, 2000, 4000 Гц');
       if CheckListBox1.checked[0] or CheckListBox1.checked[1]
        or CheckListBox3.checked[0]
        or CheckListBox5.checked[0] or CheckListBox5.checked[1] or CheckListBox5.checked[2]
       then Form2.Memo1.Lines.Add('Осциллографы');
     { if Checklistbox6.Checked[0] or CheckListBox3.checked[0]
        or CheckListBox4.checked[0]
      then Form2.Memo1.Lines.Add('Программные средства формирования и контроля полномочий доступа в AC'); }
     <font color="Red"> if CheckListBox2.checked[3] or CheckListBox2.checked[4]or CheckListBox2.checked[5]
        or CheckListBox3.checked[0] or CheckListBox4.checked[0]
       then Form2.Memo1.Lines.Add('Программные средства контроля целостности программ и программных комплексов');</font>

    Вот так живут Америка с Европой.
    http://www.delphisources.ru/forum/showthread.php?t=26142

    Запостил: brutushafens, 11 Мая 2014

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

    • cleaned
      Ответить
      • Ну тогда еще проверку добавить надо, что такой строки в memo еще нет.

        P.S. И с отключением галочки такая схема не прокатит.
        Ответить
        • cleaned
          Ответить
          • > Вообще, по-хорошему, для этого больше подходит ListBox или ListView.
            DbGrid :P

            Тут, имхо, надо или массив структурок или вообще базу данных. И когда галочку ставят/снимают - выбирать из них подходящие под критерии записи в список/грид/четам.

            Это же, я так понимаю, фильтр для чего-то типа инет-магазина?
            Ответить
          • > О чем речь?
            Ну там непонятно - удалять запись из выхлопа или нет. Придется перепроверять какие галки сейчас включены и т.п. А раз уж проверяем - проще сделать как в моем комменте выше.
            Ответить
      • >Delphi не удаляет их в процессе выполнения работы, поэтому как только они станут бесполезны, мы должны обязательно удалить их самостоятельно,чтобы не вызвать утечку памяти.
        На самом деле винда все равно удалит. Так что удалять в FormDestroy нужно только как проявление хорошего стиля, ну и для ReportMemoryLeaksOnShutdown.
        Ответить
        • > На самом деле винда все равно удалит.
          > Так что удалять в FormDestroy нужно только как проявление хорошего стиля
          Даже если эту форму оператор открывает 100500 раз в день? :)

          Памяти сейчас много, зачем ее освобождать. Да и пару раз в день перезапустить прогу никого не затруднит.
          Ответить
          • Именно так. Destroy не CLose, он выполняется не при закрытии формы, он выполняется при ее удалении.
            Возможно есть задачи где нужно именно удалять форму (например если мы генерируем ее на лету), но я сильно сомневаюсь что это тот случай.
            Ответить
            • Ну вот при миграции с form1: TForm1 на динамическое создание (например кому-то понадобятся 2 таких формы одновременно) все эти утечки и вылезут. Лучше уж сразу нормально писать, или выбрать язык с GC.
              Ответить
              • При динамическом создании не будет работать, т.к. list один на двоих, надо его полем формы сделать. В любом случае - два раза создали, а удаляем только при выходе, т.е. в OnDestroy делать все равно ничего не надо.
                Ответить
                • > т.к. list один на двоих
                  Упс :) Ну это походу опечатка, стертор не туда его вписал.
                  Ответить
                  • cleaned
                    Ответить
                    • >Это отчего же? Дать листу утечь?
                      Потому что если мы даже создаем две формы, удалять мы их сами не будем, поэтому OnDestroy вызовется при завершении приложения, когда винда все соберет.
                      Вот когда нам нужно много таких форм, какой-нибудь MDI, то да. Ну и FastMM (ReportMemoryLeaksOnShutdown) тоже аргумент.
                      Ответить
                      • cleaned
                        Ответить
                        • >Если дело дошло до "собирательства" винды, это уже утечка.
                          Утечка - это когда память занята, но никем не используется. В данном случае утечки формально нет - когда приложение открыто то память используется, когда закрыто - память уже не занята, ведь винда все почистила.
                          Поймите меня правильно - сам я за хороший стиль, за то чтоб удалять все в деструкторе и скажем занулять глобальные переменные.
                          Но считать это ошибкой не могу, потому что по сути эти действия бесполезны, мы просто приносим наше время в жертву хорошему стилю и удобству отладки\модификации в дальнейшем.
                          Ответить
        • cleaned
          Ответить
      • А вообще зачем эти объекты из одной строки, когда можно хранить только сами строки в list, а в checkbox.objects хранить номер в этом списке?
        Я бы сделал как в исходном говнокоде, т.е. одну процедуру которая проходится по всем и заполняет мемо. Разве что с циклами вместо копипасты ну и BeginUpdate чтобы не мигало. Но это если на скорую руку, а по-нормальному да, разделить модель и интерфейс, ну борманд уже написал.
        Ответить
        • > а в checkbox.objects хранить номер в этом списке
          Один чекбокс может включать много элементов в списке. Один элемент списка может включаться многими чекбоксами. Тут вообще отношение многие ко многим.
          Ответить
          • [madskills]
            Тогда если элементов не больше 32, можно в objects битовую маску хранить. А если меньше 255 - обернуть (set of TElement) в объект и тоже хранить. Но если их еще больше или их число может меняться
            [/madskills] Тогда в tmyclass сделать список включаемых, да.
            Ответить
            • Да проще таблички в базе, и не парить мозг ;)
              Ответить
              • Если в задаче не предполагается базы данных, то ради одной формы ее точно добавлять нет смысла.
                ---
                А в исходной теме автор вообще пишет
                Я знаю, что есть повторы, но, поверьте, того требует законодательство в сфере лицензирования, изменить ничего не могу. надо запрограммировать так, как изложено. но не может же быть в этом проблемы.
                Ответить
                • Лоллировал.
                  Ответить
                  • ░░░░░░░░░░░░░░▒▒▓▓█████████████████████▓░░░░░░░░░░
                    ░░░░░░░░░▓▓████▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒░▒░░░░░░▒██▒░░░░░░░░
                    ░░░░░░▓██▓▓▒▒░░░░░░░░░░░░░░░░░░░▒▒▒░░░░░▒██░░░░░░░
                    ░░░░▒██▒░░░░░▒▒▒▒▒░░░░░░░▓░░░░░▒▒▒▒▒▒▒░░░░██░░░░░░
                    ░░░░█▓░░░░▓░░░░░░▒░░░░░░▒░░░░░░░░░░▒▒▒▒░░░░██░░░░░
                    ░░░▒█░░░░░░░░░░░░░░░░░░░░░▒▓▓███▓▓▒░░░░░░░░░██░░░░
                    ░░██▒░░░▒░███████▒░░░░░░██▓▒▒███████▒░▒░░░░░░██▓░░
                    ▒█▓▒▒░░░░░░▒▒▓▓█████░░░░██▓█▓▒▒█▒░▒▓░░▒▓▓▓▓█▒░▒██░
                    ██░░▒██▓█▓░░░░░░░██░░░░░░░░░░░░▓█▓▓▒▓██▓▒▓░▒█▓░░▓█
                    ██░▒░▒░▒░███▓░░░▓█▒░░░░░░░░░░░░░░░░▒░░░▒██░░░█▒░░▓
                    ██▒░▒░░█▒░░░░░███░░░░░▒░▒▓██▒░░░░░░░▓██▒░██▓░█▓░░▒
                    ░██░▒░▓██░░░░░▓▓█▒░░░░▓▓▓░▓▓░░▒▓██▓█▓░░░▓█░░░█░░░█
                    ░░█▒░░█████▓▒░░░░▓█▓░░░░▒▓███▓▓▒░░░█▓▒███▒░░░░▒▓█▒
                    ░░▓█░░██░█░▒██▓▓▓█▓▓▓██▓▒▒░░█░░▒▓███▓▒▓█░░░░░░██░░
                    ░░▓█░░████░▒█░░░▒█░░░█▓░░░▒▓█████▓░█░▓█░░░░░▒█▓░░░
                    ░░▒█░░██████████████████████▓█░░░░░██▓░░░░░░█▓░░░░
                    ░░▓█░░▓██████████████▓██░░░░░█▒░▒██▒░░░░░░▒█▓░░░░░
                    ░░▓█░░░██▓░█░▒█░░█▒░░░▓█░░░░░████▓░░░░░░░██▒░░░░░░
                    ░░▓█░░░░▒▓▓██▓██▒██▒▓▒███▓██▓▓▒░░░▒▒▒▒▓██▓░░░░░░░░
                    ░░▓█░░░░░░░░░░░▒▒▒▒▒▒▒░░░░░░░░░▒░░▒▓██▓▒░░░░░░░░░░
                    ░░█▓░░▓░░░▒░░░░░░░░░░░░░▒▒▒▒░░░▒███▓▒░░░░░░░░░░░░░
                    ░░██░░░▒▒▒░▒▒▒▒▒▒▒▒▒▒▒░░░░░▒▓███▒░░░░░░░░░░░░░░░░░
                    ░░░██░░░░░░░░░░░░░░░░░░▒▓▓██▓▒░░░░░░░░░░░░░░░░░░░░
                    ░░░░▓█▓▒▒░░░░░░▒▒▓▓█▓█▓▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░
                    Ответить
    • Кстати, никто не заметил CheckListBox1.checked[2] or CheckListBox1.checked[2]?
      Ответить
    • ────────────────────▄▄▄▄
      ────────────────▄▄█▀▀──▀▀█▄
      ─────────────▄█▀▀─────────▀▀█▄
      ────────────▄█▀──▄▄▄▄▄▄──────▀█
      ────────────█───█▌────▀▀█▄─────█
      ────────────█──▄█────────▀▀▀█──█
      ────────────█──█──▀▀▀──▀▀▀▄─▐──█
      ────────────█──▌────────────▐──█
      ────────────█──▌─▄▀▀▄───────▐──█
      ───────────█▀▌█──▄▄▄───▄▀▀▄─▐──█
      ───────────▌─▀───█▄█▌─▄▄▄────█─█
      ───────────▌──────▀▀──█▄█▌────█
      ───────────█───────────▀▀─────▐
      ────────────█──────▌──────────█
      ────────────██────█──────────█
      ─────────────█──▄──█▄█─▄────█
      ─────────────█──▌─▄▄▄▄▄─█──█
      ─────────────█─────▄▄──▄▀─█
      ─────────────█▄──────────█
      ─────────────█▀█▄▄──▄▄▄▄▄█▄▄▄▄▄
      ───────────▄██▄──▀▀▀█─────────█
      ──────────██▄─█▄────█─────────█
      ───▄▄▄▄███──█▄─█▄───█─────────██▄▄▄
      ▄█▀▀────█────█──█▄──█▓▓▓▓▓▓▓▓▓█───▀▀▄
      █──────█─────█───████▓▓▓▓▓▓▓▓▓█────▀█
      █──────█─────█───█████▓▓▓▓▓▓▓█──────█
      █─────█──────█───███▀▀▀▀█▓▓▓█───────█
      █────█───────█───█───▄▄▄▄████───────█
      █────█───────█──▄▀───────────█──▄───█
      █────█───────█─▄▀─────█████▀▀▀─▄█───█
      █────█───────█▄▀────────█─█────█────█
      █────█───────█▀───────███─█────█────█
      █─────█────▄█▀──────────█─█────█────█
      █─────█──▄██▀────────▄▀██─█▄───█────█
      █────▄███▀─█───────▄█─▄█───█▄──█────█
      █─▄██▀──█──█─────▄███─█─────█──█────█
      ██▀────▄█───█▄▄▄█████─▀▀▀▀█▀▀──█────█
      █──────█────▄▀──█████─────█────▀█───█
      ───────█──▄█▀───█████─────█─────█───█
      ──────▄███▀─────▀███▀─────█─────█───█
      Ответить
    • МОИ ГЛАЗА!!! ААА что здесь происходит
      Ответить
    • vanished
      Ответить

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