Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
1

Как узнать имя созданного TImage?

30.01.2013, 15:29. Показов 2631. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
По клику на Image1 - создаю динамически компонент типа TImage. Сколько раз на Image1 кликаю, столько раз создается новый компонент TImage.
Вопрос в том, как мне к ним обращаться? Попытался так вывести имя только что созданного компонента
Delphi
1
Showmessage(img.Name);
так сообщение пустое выдается.
Насколько я знаю при создании объекта имя ему присваивается автоматически, а тут имени нет((
Вот код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{$R *.dfm}
 
 
procedure TForm1._MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if button<>mbLeft then move:=false //если нажали не левой кнопкой, то перемещать не будем!
else begin
move:=true;
x0:=x; //запоминаем начальные координаты
y0:=y; //запоминаем начальные координаты
end;
end;
 
procedure TForm1._MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if move then begin
(Sender As TImage).Left:=(Sender As TImage).Left+x-x0;
(Sender As TImage).Top:=(Sender As TImage).Top+y-y0
end;
end;
 
procedure TForm1._MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
move:=false;
end;
 
 
procedure TForm1.Imag1Click(Sender: TObject);
 
begin
  Img := TImage.Create(Form1);
  Img.Parent := Form1;
  Img.Picture.LoadFromFile('refregirator.jpg');
  Showmessage(img.Name);
  Img.OnMouseDown :=_MouseDown;
  Img.OnMouseMove :=_MouseMove;
  Img.OnMouseUp :=_MouseUp;
end;
 
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2013, 15:29
Ответы с готовыми решениями:

Как узнать имя RT_GROUP_ICON?
Здравствуйте. Пытаюсь извлечь иконку из exe-файла. В общем-то получается, но имя ресурса...

Как узнать имя компьютера?
Подскажите, как узнать имя компьютера, на котором запущена программа Delphi? На VBA это выглядит...

Как узнать имя домена или рабочую группу компьютера!
Как програмно(WinAPI) узнать имя рабочей группы или домен компьютера!Заранее спасибо!

Как узнать имя компонента над которым находиться курсор
Доброго всем времени суток!!! Подскажите пожалуйста, способы определения имени компонента...

23
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
30.01.2013, 15:34 2
Так оно и есть пустое. Через Img и обращайся.
0
angstrom
30.01.2013, 15:35 3
Автоматически создаётся в Design-Time. Здесь нужно присвоить самому.
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
30.01.2013, 15:39  [ТС] 4
Цитата Сообщение от dondublon Посмотреть сообщение
Так оно и есть пустое. Через Img и обращайся.
Так я же не просто его пустым вывожу)
Delphi
1
Showmessage(img.Name);
Я создаю новый компонент типа TImage на форме. У него должно быть какое-то имя?

Добавлено через 1 минуту
Цитата Сообщение от angstrom Посмотреть сообщение
Автоматически создаётся в Design-Time. Здесь нужно присвоить самому.
Абсолютно верно, но меня всецело устраивает то, что он сам его создает (более того мне это и необходимо).
Вот какое имя он ему дал в Design-Time?
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
30.01.2013, 15:44 5
Цитата Сообщение от stasagent Посмотреть сообщение
У него должно быть какое-то имя?
Не-а. Зачем?


Цитата Сообщение от stasagent Посмотреть сообщение
Вот какое имя он ему дал в Design-Time?
Насколько я понял, в derign-time его еще нет, он появляется только в runtime.
0
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
30.01.2013, 15:53  [ТС] 6
Цитата Сообщение от dondublon Посмотреть сообщение
Насколько я понял, в derign-time его еще нет, он появляется только в runtime.
Ой да точно
Ну а в в runtime какое имя ему было дано?

Добавлено через 1 минуту
По каждому клику у меня на форме появляется картинка, это же новосозданные компоненты, с какими-то там именами...
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
30.01.2013, 16:10 7
Цитата Сообщение от stasagent Посмотреть сообщение
Ну а в в runtime какое имя ему было дано?
Я ж говорю - пустое. Ты и сам в этом уже убедился.
Если ты создаешь контрол в design-time, у него имя, к примеру, Image1, у тебя в коде создается Image1: TImage, в твоем случае Img - тот же самый TImage.

Цитата Сообщение от stasagent Посмотреть сообщение
По каждому клику у меня на форме появляется картинка, это же новосозданные компоненты, с какими-то там именами...
Без имён они

Сейчас я тебя научу плохому, шалун.
Складывай свои TImage куда-то, откуда потом сможешь до них дотянуться. Например, в TList<TImage>. Лежит в Generics.Collections.

Под каждый такой Timage выделяется память. Не забудь удалить их, когда они станут не нужны.
0
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
30.01.2013, 16:23  [ТС] 8
Цитата Сообщение от dondublon Посмотреть сообщение
Я ж говорю - пустое. Ты и сам в этом уже убедился.
Если ты создаешь контрол в design-time, у него имя, к примеру, Image1, у тебя в коде создается Image1: TImage, в твоем случае Img - тот же самый TImage.
Ок, правда я так и не понимаю как объект на форме, уже после старта программы, может быть без имени...

Цитата Сообщение от dondublon Посмотреть сообщение
Складывай свои TImage куда-то, откуда потом сможешь до них дотянуться. Например, в TList<TImage>. Лежит в Generics.Collections.
Проблема усугубляется тем, что не известно конечное кол-во картинок, которые будут созданы.
Цитата Сообщение от dondublon Посмотреть сообщение
Под каждый такой Timage выделяется память. Не забудь удалить их, когда они станут не нужны.
Это понятно Но они удаляться уже не будут (за редким исключением только), их координаты будут записаны в Ini-файл и они будут всегда на форме, только иногда перемещаться(редко)
0
angstrom
30.01.2013, 17:37 9
То что создаётся в Run-Time обязан удалить сам программист. Имя придумать не сложно. Заведи глобальную переменную типа Integer, присвой ей 1. При создании TImage присваивай новое имя (какой придумаешь для своих TImage) плюс значение переменной (не забудь преобразовать в String), увеличь переменную на 1. И так пока не надоест.
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
30.01.2013, 17:39 10
Цитата Сообщение от stasagent Посмотреть сообщение
Ок, правда я так и не понимаю как объект на форме, уже после старта программы, может быть без имени...
Имя не нужно. Ссылка на объект есть - всё, больше ничего не надо.

Цитата Сообщение от stasagent Посмотреть сообщение
Проблема усугубляется тем, что не известно конечное кол-во картинок, которые будут созданы.
Это нормально, списки так и работают.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от angstrom Посмотреть сообщение
Заведи глобальную переменную типа Integer, присвой ей 1.
Когда я слышу "глобальная переменная", моя рука тянется к пистолету.

0
angstrom
30.01.2013, 17:42
  #11

Не по теме:

Цитата Сообщение от dondublon Посмотреть сообщение
Когда я слышу "глобальная переменная", моя рука тянется к пистолету.
Кто мешает?

0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
30.01.2013, 17:53  [ТС] 12
Цитата Сообщение от dondublon Посмотреть сообщение
Имя не нужно. Ссылка на объект есть - всё, больше ничего не надо.
Все, теперь понял - спасибо)
Цитата Сообщение от dondublon Посмотреть сообщение
Это нормально, списки так и работают.
Пока еще не знаю, что мне это даст (использование TList) - но попробую разобраться...

Цитата Сообщение от angstrom Посмотреть сообщение
То что создаётся в Run-Time обязан удалить сам программист. Имя придумать не сложно. Заведи глобальную переменную типа Integer, присвой ей 1. При создании TImage присваивай новое имя (какой придумаешь для своих TImage) плюс значение переменной (не забудь преобразовать в String), увеличь переменную на 1. И так пока не надоест.
Этот способ мне не подходит. Так как приложение после закрытия должно хранить в себе созданные объекты. После открытия его снова все элементы должны быть сохранены. И будут добавляться новые. Хотя конечно можно это обыграть...
Я кстати так уже сегодня делал, но что-то не так было. Надо поковыряться все таки.
0
angstrom
30.01.2013, 18:15 13
Цитата Сообщение от stasagent Посмотреть сообщение
...Так как приложение после закрытия должно хранить в себе созданные объекты....
После закрытия, приложение ничего не может хранить, так как выгружается из памяти. Другое дело, что можно перед закрытием сохранять во внешний файл информацию о всех созданных контролах и после последующего запуска автоматически их создать.
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
30.01.2013, 18:26  [ТС] 14
Цитата Сообщение от angstrom Посмотреть сообщение
После закрытия, приложение ничего не может хранить, так как выгружается из памяти. Другое дело, что можно перед закрытием сохранять во внешний файл информацию о всех созданных контролах и после последующего запуска автоматически их создать.
Логично Я уже написал это ранее)
Все равно спасибо за информацию!
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
30.01.2013, 19:36 15
Цитата Сообщение от angstrom Посмотреть сообщение
Кто мешает?
Немного о глобальных переменных
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
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
Цитата Сообщение от cotseec Посмотреть сообщение
зачем заводить переменную типа integer? у Image есть свойство Tag, все делается достаточно просто: создаем картинку (Image), ее метке (Tag) присваиваем уникальный номер, потом пробегаемся по списку компонентов Owner'a и проверяем метку найденного компонента - получаем экземпляр класса TImage, делаем все, что хочется...как-то так
Так тоже самое и получится. В первый раз когда я буду создавать картинку, то мне нужно присвоить Tag присвоить стартовое значение. Потом, при создании следующего просто наращивать имя. Как на мой взгляд, то с переменной все же удобнее и привычнее будет работать через Name компонента.

Цитата Сообщение от cotseec Посмотреть сообщение
все уже давно есть - свойство Components у Owner'a Image
конструктор TImage имеет вид: Create(AOwner:TComponent); в этот AOwner.Components и складываются создаваемые компоненты
Ну так я сейчас так и делаю, складываю все картинки на форме.
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
31.01.2013, 07:14 18
Цитата Сообщение от cotseec Посмотреть сообщение
зачем создавать лист?
все уже давно есть - свойство Components у Owner'a Image
Спасибо, кэп.
Кэп также говорит, что в этом Components будут вообще все компоненты формы, не только динамически созданные TImage.
Цитата Сообщение от cotseec Посмотреть сообщение
потом пробегаемся по списку компонентов Owner'a и проверяем метку найденного компонента
Незачем усложнять. По списку можно пробегать, ничего не проверяя.
0
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 22
31.01.2013, 10:02  [ТС] 19
Цитата Сообщение от dondublon Посмотреть сообщение
Незачем усложнять. По списку можно пробегать, ничего не проверяя.
То есть...
И еще, может кто знает как сделать так, чтобы у TImage было свойство Caption. Я нашел на этом форуме ссылочку Как добавить свойство Caption в компонент, который основан на TImage? но не понял как реализовать.
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,134
Записей в блоге: 6
31.01.2013, 10:26 20
Цитата Сообщение от stasagent Посмотреть сообщение
То есть...
А то и есть. Если у тебя в списке заведомо, с самого начала, нужные Timage - зачем еще что-то проверять.

Цитата Сообщение от stasagent Посмотреть сообщение
чтобы у TImage было свойство Caption
Сделай наследника.
0
31.01.2013, 10:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2013, 10:26
Помогаю со студенческими работами здесь

Мерцание компонента Timage и перемещение Timage при нажатии
Здравствуйте! Помогите убрать мерцание компонента Timage при изменении размера. Нашел в...

Делфи, АДО, как узнать имя открытого файла базы данных?
Добрый день, ночь, утро, вечер и т.д. Я работаю с АДО и базой данных .mdb. Возникла проблемка -...

Как определить, что поле - внешний ключ, и узнать имя связанной с ним таблицы?
Здравствуйте! Идет перебор полей в ADOQuery: for i=0 to ADOQuery1.FieldCount-1 do // ...как...

Узнать имя файла, загруженного в компонент TImage
Есть компонент TImage. В него считывается фото из камеры. Как узнать имя файла фото?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru