0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
|
|||||||||||
1 | |||||||||||
Как узнать имя созданного TImage?30.01.2013, 15:29. Показов 2631. Ответов 23
Метки нет (Все метки)
По клику на Image1 - создаю динамически компонент типа TImage. Сколько раз на Image1 кликаю, столько раз создается новый компонент TImage.
Вопрос в том, как мне к ним обращаться? Попытался так вывести имя только что созданного компонента
Насколько я знаю при создании объекта имя ему присваивается автоматически, а тут имени нет(( Вот код:
0
|
30.01.2013, 15:29 | |
Ответы с готовыми решениями:
23
Как узнать имя RT_GROUP_ICON? Как узнать имя компьютера? Как узнать имя домена или рабочую группу компьютера! Как узнать имя компонента над которым находиться курсор |
angstrom
|
|
30.01.2013, 15:35 | 3 |
Автоматически создаётся в Design-Time. Здесь нужно присвоить самому.
|
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
|
||||||
30.01.2013, 15:39 [ТС] | 4 | |||||
Так я же не просто его пустым вывожу)
Добавлено через 1 минуту Абсолютно верно, но меня всецело устраивает то, что он сам его создает (более того мне это и необходимо). Вот какое имя он ему дал в Design-Time?
0
|
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
|
|
30.01.2013, 15:53 [ТС] | 6 |
Ой да точно
Ну а в в runtime какое имя ему было дано? Добавлено через 1 минуту По каждому клику у меня на форме появляется картинка, это же новосозданные компоненты, с какими-то там именами...
0
|
30.01.2013, 16:10 | 7 |
Я ж говорю - пустое. Ты и сам в этом уже убедился.
Если ты создаешь контрол в design-time, у него имя, к примеру, Image1, у тебя в коде создается Image1: TImage, в твоем случае Img - тот же самый TImage. Без имён они Сейчас я тебя научу плохому, шалун. Складывай свои TImage куда-то, откуда потом сможешь до них дотянуться. Например, в TList<TImage>. Лежит в Generics.Collections. Под каждый такой Timage выделяется память. Не забудь удалить их, когда они станут не нужны.
0
|
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
|
|
30.01.2013, 16:23 [ТС] | 8 |
Ок, правда я так и не понимаю как объект на форме, уже после старта программы, может быть без имени...
Проблема усугубляется тем, что не известно конечное кол-во картинок, которые будут созданы. Это понятно Но они удаляться уже не будут (за редким исключением только), их координаты будут записаны в Ini-файл и они будут всегда на форме, только иногда перемещаться(редко)
0
|
angstrom
|
|
30.01.2013, 17:37 | 9 |
То что создаётся в Run-Time обязан удалить сам программист. Имя придумать не сложно. Заведи глобальную переменную типа Integer, присвой ей 1. При создании TImage присваивай новое имя (какой придумаешь для своих TImage) плюс значение переменной (не забудь преобразовать в String), увеличь переменную на 1. И так пока не надоест.
|
30.01.2013, 17:39 | 10 |
Имя не нужно. Ссылка на объект есть - всё, больше ничего не надо.
Это нормально, списки так и работают. Добавлено через 1 минуту
0
|
angstrom
|
30.01.2013, 17:42
#11
|
|
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
|
|
30.01.2013, 17:53 [ТС] | 12 |
Все, теперь понял - спасибо)
Пока еще не знаю, что мне это даст (использование TList) - но попробую разобраться... Этот способ мне не подходит. Так как приложение после закрытия должно хранить в себе созданные объекты. После открытия его снова все элементы должны быть сохранены. И будут добавляться новые. Хотя конечно можно это обыграть... Я кстати так уже сегодня делал, но что-то не так было. Надо поковыряться все таки.
0
|
angstrom
|
|
30.01.2013, 18:15 | 13 |
После закрытия, приложение ничего не может хранить, так как выгружается из памяти. Другое дело, что можно перед закрытием сохранять во внешний файл информацию о всех созданных контролах и после последующего запуска автоматически их создать.
|
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
|
|
30.01.2013, 18:26 [ТС] | 14 |
0
|
30.01.2013, 19:36 | 15 |
0
|
Пишу на Delphi...иногда
|
|
30.01.2013, 22:30 | 16 |
зачем глобальные переменные, зачем создавать лист?
все уже давно есть - свойство Components у Owner'a Image конструктор TImage имеет вид: Create(AOwner:TComponent); в этот AOwner.Components и складываются создаваемые компоненты зачем заводить переменную типа integer? у Image есть свойство Tag, все делается достаточно просто: создаем картинку (Image), ее метке (Tag) присваиваем уникальный номер, потом пробегаемся по списку компонентов Owner'a и проверяем метку найденного компонента - получаем экземпляр класса TImage, делаем все, что хочется...как-то так
0
|
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
|
|
30.01.2013, 23:19 [ТС] | 17 |
Так тоже самое и получится. В первый раз когда я буду создавать картинку, то мне нужно присвоить Tag присвоить стартовое значение. Потом, при создании следующего просто наращивать имя. Как на мой взгляд, то с переменной все же удобнее и привычнее будет работать через Name компонента.
Ну так я сейчас так и делаю, складываю все картинки на форме.
0
|
31.01.2013, 07:14 | 18 |
Спасибо, кэп.
Кэп также говорит, что в этом Components будут вообще все компоненты формы, не только динамически созданные TImage. Незачем усложнять. По списку можно пробегать, ничего не проверяя.
0
|
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
|
|
31.01.2013, 10:02 [ТС] | 19 |
То есть...
И еще, может кто знает как сделать так, чтобы у TImage было свойство Caption. Я нашел на этом форуме ссылочку Как добавить свойство Caption в компонент, который основан на TImage? но не понял как реализовать.
0
|
31.01.2013, 10:26 | 20 |
А то и есть. Если у тебя в списке заведомо, с самого начала, нужные Timage - зачем еще что-то проверять.
Сделай наследника.
0
|
31.01.2013, 10:26 | |
31.01.2013, 10:26 | |
Помогаю со студенческими работами здесь
20
Мерцание компонента Timage и перемещение Timage при нажатии Делфи, АДО, как узнать имя открытого файла базы данных? Как определить, что поле - внешний ключ, и узнать имя связанной с ним таблицы? Узнать имя файла, загруженного в компонент TImage Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |