1. C++ / Говнокод #3494

    +157

    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
    TForm1 *Form1;
    //----------------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //- Буква А ---------------------------------------------------------------------
    void __fastcall TForm1::Label1Click(TObject *Sender)
    {
      Image1->Picture->LoadFromFile("PICTURE/1.bmp");
     PlaySound("SOUND/1.wav",0,SND_ASYNC);
    }
    //--Буква Б-----------------------------------------------------------------------
    void __fastcall TForm1::Label2Click(TObject *Sender)
    {
      Image1->Picture->LoadFromFile("PICTURE/2.bmp");
     PlaySound("SOUND/2.wav",0,SND_ASYNC);
    }
    //--Буква В-------------------------------------------------------------------------
    void __fastcall TForm1::Label3Click(TObject *Sender)
    {
     Image1->Picture->LoadFromFile("PICTURE/3.bmp");
     PlaySound("SOUND/3.wav",0,SND_ASYNC);
    }
    ....
    
    и т.д.
    
    
    //--Буква Я-------------------------------------------------------------------------
    void __fastcall TForm1::Label33Click(TObject *Sender)
    {
     Image1->Picture->LoadFromFile("PICTURE/33.bmp");
     PlaySound("SOUND/33.wav",0,SND_ASYNC);
    }
    //---------------------------------------------------------------------------

    Пример из обучающей статьи по с++, где от а до я выресовываются буквы.

    Запостил: pyshpysh, 16 Июня 2010

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

    • дэльфи-стайл!
      Ответить
    • Чего еще ожидать от билдера.
      Ответить
      • Да вот нихера. Там просто обезьянок-программистов и обезьянок-писателей-учебников много.
        Ответить
    • грустно это все.. и уныло..
      Ответить
    • - Скажи А.
      - А-ааа
      - теперь Б
      - Бэээ
      напомнило калькулятор с логикой для цифр в подобном стиле
      Ответить
    • Побоюсь показаться капитаном, на самом деле "правильная" обработка множества компонентов в билдере (не претендую на оптимальность) не сводится к тупому копипасту.
      У большинства событий есть Sender, оный нам и пригодится.
      Пишем процiдурку в духе
      void __fastcall TForm1::LabelClick(TObject *Sender)
      {
       AnsiString num = ( ( TLabel * ) Sender )->Name.SubString ( 6, 3 );
       Image1->Picture->LoadFromFile("PICTURE/" + num + ".bmp");
       PlaySound("SOUND/" + num + ".wav",0,SND_ASYNC);
      }

      После чего всем лейблам присваиваем один обработчик. Никакой копипасты. Я в своё время в институте так пятнашки писал, и на спор с одним кренделем крестики-нолики. Он был уверен, что на джаве это будет записано короче, у меня вышло вместе с логикой десяток строк.

      При этом, я не совсем уверен, что это оптимальный метод. Можно сделать лучше, например, раздать компонентам теги целочисленные.
      Инструмент - просто инструмент, голова важнее.
      Ответить
      • примерно так это и делается, но
        AnsiString num = ( ( TLabel * ) Sender )->Name.SubString ( 6, 3 );
        вот это коряво. обычно используют тег компонента. при желании можно и компонент дописать, добавив ему новые свойства
        Ответить
        • Это понятно, что можно использовать теги. Но как простой наивный обработчик вполне катит.
          Имя содержит столько же полезной информации, как и любые другие свойства, естественно, обрабатывать сложнее.
          Теги - да, ещё один вариант, но их ещё нужно расставить и не попутать. Имя даётся "бесплатно" и гарантированно уникально.
          Ответить
          • Не знаю, что там в БМПах, но подозреваю, что можно вместо них тупо использовать
            Image1->Canvas->TextOut(0, 0, ((TLabel*)Sender)->Caption);
            33 лабела можно в ран-тайме создать при загрузке формы, и теги в том же цикле расставить.
            Ответить
            • А если шрифта нет подходящего в системе ?
              Плюс, может быть, там картинки как в азбуке для каждой буквы.
              Ответить
              • "картинки как в азбуке для каждой буквы"
                В общем да, скорее всего так и есть... Иначе вместо Image обошлись бы простым Label :)
                Ответить
    • Хех. Я когда раньше сидел на визалбейсике шестом, тоже не знал, откуда вылазят все эти OnClick... как будто по волщесбству

      видимо для автора то что делает билдер эт отоже магия.. главнео что метод сгенерирован и ладно..
      Ответить
    • Где здесь С++\CLI?
      Ответить

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