|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Отловить событие загрузки файла в TImage
Люди добрые, помогите, уже весь день убил на решение простой задачи!
Есть компонент на основе TImage. Я хочу, чтобы на этапе разработки в инспекторе по нажатию на пункт Picture выбранная картинка отобразилась не на весь компонент, а только в некоторой его части. Ну или сохранить ее в свойстве, скажем FPicture (что эквивалентно). Как отловить событие загрузки файла? Я смотрел, как это реализовано в родителе - TImage. Там все просто: Код:
... private FPicture: TPicture; procedure SetPicture (value: TPicture); ... published property Picture: TPicture read FPicture write SetPicture; ... procedure SetPicture (value: TPicture); begin FPicture.Assign(Value); end; |
#2
|
|||
|
|||
Во первых, приведенный тобой код - это не загрузка, а просто назначение св-ва.
Во вторых, тут тебе скорее надо смотреть на отрисовку компоненты в DesignTime и перекрывать именно ее. |
#3
|
|||
|
|||
Второй день уже смотрю и всё никак понять не могу, на каком этапе TImage загружает рисунок. На данный момент понял, что на этапе OnCreate рисунка еще нет. Но каким магическим образом он там появляется - так и не допер пока.
|
#4
|
|||
|
|||
После долгих мучений нашел путь: отловить событие Picture.OnChange. Картинка будет на третьем вызове (первые два, скорее всего, на установку размеров)
|
#5
|
|||
|
|||
Вообще, я бы смотрел обработчик сообщения WM_PAINT.
Ну или просто перекрывать TImage.Paint. Т.е. просто перекрыть саму отрисовку вместо того, что бы отлавливать что-то там. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
T232006 (04.04.2024)
|
#6
|
|||
|
|||
Пошел другим путем: выбрал в качестве родителя TGraphicControl. Тогда и отлавливать ничего не надо. Оказалось, это из-за особенностей TImage нельзя перехватить картинку, т.к. она рисуется на канвасе (вылетает ошибка чтения какого-то там файла). В TGraphicControl этого нет
|