| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Уменьшение кода.Компоненты с похожими именами. |
| Автор: SkyAngel 13.2.2009, 00:11 |
| В общем такая проблема: по воле судьбы мне необходимо 15 компонентов TImage. По сути их задачи практичеки похожи. Точнее обработчик почти один и тот же. В общем названия каждого компоненты - ImageIDXX ( где XX - номер Timage. При числах от 1 до 9 пишеться 01-09). В коде есть момент, где каждому компоненту необходимо присвоить свою картинку, в зависимости от условий. Картинки могут повторяться. Мне очень хотелось бы организовать цикл с оператором "For". Однако вся проблема в том, что я не знаю как обратиться к компоненту с другим именем в цикле. То есть логично должно выглядеть так: For i:= 1 to 15 do begin Image+i.picture.loadFromFile:=x; end; Мне необходим рабочий вариант, потому что каждому TImage необходимо придать не одно значение... И 45 строк кода, почти идентичным мне не нравяться... |
| Автор: Poseidon 13.2.2009, 00:27 |
| Используй свойство tag. В цикле проверяй это свой свойство. Твои XX - это и будет tag. |
| Автор: SkyAngel 13.2.2009, 00:55 | ||
Пример из просторов Интернета:
Однако я не разобрался - как мне обратиться к этому объекту? TEdit(Components[i]) - это непосредственно имя компонента? или как? |
| Автор: Poseidon 13.2.2009, 01:29 | ||
Чего ты пристал к имени? Указываешь каждому компоненту свой tag по порядку. Затем циклом проходишься по всем компонентам и ищешь нужный тебе. Вот допустим у тебя 15 TImage. Тебе нужно первые 5 скрыть. Делаешь:
|
| Автор: StingWINg 13.2.2009, 10:03 | ||
Я бы посоветовал задать массив TImage`й. Как они создаются в программе? Динамически или на форму вытаскиваешь?
А дальше как обращатся с массивом, думаю известно. |
| Автор: THandle 13.2.2009, 10:48 |
| StingWINg, зачем какой то массив? Можно либо с тегами, как показал Poseidon, или же можно поиграться и через имя с помощью FindComponent. |
| Автор: JSinx 13.2.2009, 11:00 | ||
Как вариант, если часто нужно обращаться к этим картинкам,то это будет работать быстрее, чем перебирать все компоненты приложения. |
| Автор: THandle 13.2.2009, 12:43 |
| Тогда лучше массива использовать TList. Можно и в случае с динамическим созданием использовать и с просто накиданными на форму TImag'ами |
| Автор: SkyAngel 13.2.2009, 16:02 | ||
Да, так и есть. Мне дейстивтельно надо к ним часто обращаться. А поподробнее про функцию FindComponent? Какое значение она отдаёт? Какова сигнатура? Маленький примерчик, если не сложно =) |
| Автор: THandle 13.2.2009, 16:36 |
| SkyAngel, поиск рулит: http://forum.vingrad.ru/act-Search/CODE/show/searchid-95abac04666d7dbc67808e2a5422c5f5/search_in-posts/result_type/topics/flag/search/highlite/findcomponent/index.html Буквально вчера: http://forum.vingrad.ru/index.php?showtopic=247357&view=findpost&p=1784111 Если часто, то я бы сначала заполнял бы(в OnCreate например) некий TList этими TImage'ми, а потом с ним работал, наверное |
| Автор: SkyAngel 13.2.2009, 16:39 |
| По сути написал - и параллельно нашёл всё что надо. Большое спасибо. Вот это действительно то, что мне надо было! |
| Автор: SkyAngel 13.2.2009, 17:07 |
| Чтобы не создавать новую тему - может кто-нибудь ответит - как создать маленькую кнопочку типа TbitBtn в заголовке страниц TPageControl? Очень необходимо маленькая кнопочка "Обновить" =) |
| Автор: THandle 13.2.2009, 19:13 |
| SkyAngel, в правилах вроде бы ясно написано... но... повторюсь: Модератор: Пожалуйста, один топик - один вопрос. Создай новую тему, незачем смешивать вопросы. Будущему поколению неудобно будет искать. |