Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2024, 23:43   #1
t232006
Пользователь
 
Регистрация: 30.03.2024
Сообщений: 15
По умолчанию Отловить событие загрузки файла в TImage

Здравствуйте, уважаемые программисты!
У меня такой простой вопрос: создаю компонент на основе TImage. Хочу, чтоб при нажатии в инспекторе на свойство Picture картинка помещалась не на весь компонент, а только в какую-то его часть (ну или сохранялась в каком-то внутреннем битмапе. Может быть, кто-нибудь знает, как отловить событие загрузки файла в TImage? Пробовал изучить исходник TImage, даже создал его копию - так и не пойму, откуда берется это окошко при нажатии на свойство Picture и как перехватить загружаемую картинку. Рассматриваю вариант со сравнением двух битмапов: исходного и после запуска. Если отличаются - значит загрузили картинку. Но может кто-нибудь знает более простой путь?
t232006 вне форума Ответить с цитированием
Старый 31.03.2024, 08:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Обрабатывать OnChange у Picture
p51x вне форума Ответить с цитированием
Старый 31.03.2024, 10:09   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Смысл отлавливать это событие, если Вы загружаете картинку кодом, т.е. строкой или командой и знаете когда это произойдет. TBitmap - это отдельный объект и хранить его надо отдельно. Разберитесь со свойствами классов.
Cuprum5 вне форума Ответить с цитированием
Старый 31.03.2024, 12:53   #4
t232006
Пользователь
 
Регистрация: 30.03.2024
Сообщений: 15
По умолчанию

нет, я загружаю эту картинку не кодом, а по нажатию на кнопку "..." Picture.
Да, событие OnChange, но оно срабатывает вообще для любого изменения фона компонента. Вообще, как оказалось, <компонент>.Canvas и <компонент>.Picture.Bitmap.Canvas - это одно и то же. То есть, Image не хранит загруженную картинку где-то в своих анналах, а сразу шлепает ее на канвас. Стало быть, нужно ее отловить до того, как она шлепнулась туда.
Изображения
Тип файла: jpg Безымянный.jpg (7.8 Кб, 22 просмотров)
t232006 вне форума Ответить с цитированием
Старый 31.03.2024, 12:56   #5
t232006
Пользователь
 
Регистрация: 30.03.2024
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
TBitmap - это отдельный объект и хранить его надо отдельно.
Кто это сказал? Почему я не имею права хранить его в компоненте? Хочу - храню битмап, хочу - вообще какой-нибудь медиаплеер внутрь засуну.
t232006 вне форума Ответить с цитированием
Старый 31.03.2024, 16:24   #6
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

А какой смысл отлавливать событие на стадии проектирования(Design-Time)? События обычно отлавливаются на стадии работы программы(Run- Time).
Cuprum5 вне форума Ответить с цитированием
Старый 31.03.2024, 16:31   #7
t232006
Пользователь
 
Регистрация: 30.03.2024
Сообщений: 15
По умолчанию

Смысл в том, что как только приложение запустилось, то картинка уже на канвасе. А как это произошло? Какой процесс за это отвечает? Хотелось бы получить эту картинку до того, как она там оказалась и перерисовать так, как мне надо. При этом хотелось бы, чтобы она перерисовалась еще на стадии проектирования. То есть, программист только добавил картинку, а она уже в нужном месте, а не на весь канвас.
t232006 вне форума Ответить с цитированием
Старый 31.03.2024, 17:01   #8
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Заранее подготовить картинку и загрузить в TImage. Заранее поставить разрешение, отступы и цвета те, которые Вам надо.
Cuprum5 вне форума Ответить с цитированием
Старый 31.03.2024, 17:15   #9
t232006
Пользователь
 
Регистрация: 30.03.2024
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Заранее подготовить картинку и загрузить в TImage. Заранее поставить разрешение, отступы и цвета те, которые Вам надо.
То есть, вы хотите сказать, что мне нужно загружать не полноценную картинку, а картинку содержащую часть картинки, чтобы содержательная часть оказалась на месте? Ну это скорее жест отчаяния, чем решение. А как же автоматизация? А что скажут люди? Тогда уж действовать так, как я указал вначале (копировать картинку и перерисовывать фон)
t232006 вне форума Ответить с цитированием
Старый 01.04.2024, 00:59   #10
t232006
Пользователь
 
Регистрация: 30.03.2024
Сообщений: 15
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Обрабатывать OnChange у Picture
Да, пожалуй, вы правы. Если отловить событие 3 раза, то на третьем будет эта картинка (2 другие события, скорее всего, установка размеров).
t232006 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить событие нажатия клавиши Esc? dsapa Microsoft Office Excel 14 03.12.2016 14:27
Отловить уровень загрузки страницы Awesomium sergeevpetro C# (си шарп) 1 21.07.2015 11:12
WM_QueryEndSession отловить событие volod3000 Win Api 3 29.01.2015 20:23
как отловить событие hint? max89 Win Api 0 23.07.2010 19:08
Как отловить событие wm_paste? Romanych007 Помощь студентам 1 10.07.2010 20:42