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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2015, 12:26   #1
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
Вопрос Наследник TImage: Как узнать что произошёл LoadFromFile?

Добрый день, всем хороших выходных!

Делаю наследника от TImage.
Можно ли как-то перехватывать вызов TImage.Picture.LoadFromFile(); ? Не соображу как. Мне необходимо делать дополнительные действия после того как оно отработает.
Конечно есть варианты сделать чуть иначе, но хотелось бы узнать возможно ли именно в таком виде.
ResourceSpace вне форума Ответить с цитированием
Старый 04.07.2015, 12:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Это придется и Picture переопределять. ИМХО по другому никак.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2015, 12:37   #3
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Вот и я думал-думал полночи... Действие должно относиться только к TImage (связано с его полями, методами и событиями).
Ну допустим сделаю наследника и от TPicture - а как тогда обратно в TImage передавать что TPicture перезагрузилось?
ResourceSpace вне форума Ответить с цитированием
Старый 04.07.2015, 12:51   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Этого я не знаю, но как вариант - посмотреть в генофонде Делфи как там сделано, и почитать Тексейру и Пачеко, кажется у них была тема о переопределении классов и подклассов. Возможно будет достаточно написать
Код:
type
 TPicture=class(TPicture)
  public
   Procedure LoadFromFile(); override;
 end;
 TImage=class(TImage)
  published
   Picture:TPicture;
 end;
...
Procedure TPicture.LoadFromFile;
begin
 ...
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2015, 14:45   #5
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

А всё равно не понимаю - как классу TImage узнать о вызове внутри TPicture?
ResourceSpace вне форума Ответить с цитированием
Старый 04.07.2015, 15:19   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Дак в нем есть такое свойство. Не он будет узнавать, ты опишешь фактически новый TImage с новым TPicture. Такой себе кибернетический класс, с имплантом. Твоим имплантом. А в программе тело импланта этого опиши.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2015, 15:43   #7
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

гм... Я давно не брался за Делфи, с тех пор как работу нашёл на другом языке... Но это
Код:
Type
      TPicture = Class(Graphics.TPicture)
      Public
            Constructor Create(); OverRide;
            Procedure LoadFromFile(Const Filename: String); OverRide;
            Procedure LoadFromStream(Stream: TStream); OverRide;
            Procedure LoadFromClipboardFormat(AFormat: Word; AData: THandle; APalette: HPALETTE); OverRide;
      End;
меня слегка удивило:
Код:
[Error] Unit1.pas(11): Cannot override a static method
[Error] Unit1.pas(12): Cannot override a static method
[Error] Unit1.pas(13): Cannot override a static method
[Error] Unit1.pas(14): Cannot override a static method
Не натыкался на такой фокус...
ResourceSpace вне форума Ответить с цитированием
Старый 04.07.2015, 15:55   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну в данном случае я не оч. хороший советчик. Всетки поищи у Тексейры как такое правильно делать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2015, 13:07   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Как звучит оригинал задания?
Зачем тебе понадобился потомок TImage? Очень сильно пахнет xyz-ом.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.07.2015, 15:20   #10
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Нет никакого "задания", просто возникла необходимость:
Кто-то или что-то вызывает TImage.Picture.LoadFromFile(); - и после того как это отработает должно автоматом выполняться TImage.AfterLoadFromFile();
Разумеется потомка, не править же исходники VCL?
ResourceSpace вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать, что страница с JS (AJAX)? Lindemann66 Qt и кроссплатформенное программирование С/С++ 1 27.10.2011 11:27
Как узнать, что Button нажата? shumsheec Общие вопросы Delphi 2 29.06.2011 12:35
как узнать цвет пикселя в TImage , если там не bmp а jpg Dima_Dima Общие вопросы Delphi 0 31.05.2010 14:12
Как узнать что в содержимое буфера обмена добавилось что либо? zotox Общие вопросы Delphi 2 15.09.2009 12:07
DLL!!!Как узнать что PUSH-ит!!! Kuznecov Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 10.02.2009 22:04