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