Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Иконка, Сообщения   Найти похожие ветки 

 
Maxim   (2004-07-18 18:21) [0]

Мастера, сдрасте!
1.  Как изменить иконку создаваемой компоненты? А то одна и та-же мракобесина не нравится !!! :)
2. Есть невизуальная компонента. Как отловить события ее владельца(TForm). Ну, скажем на перерисовку.

Заранее -  Спасибо.


 
OSokin   (2004-07-18 20:23) [1]

1. Если есть Resource Workshop или Restorator, или еще какая-нибудь подобная программа, то переименую .dcr файл компоненты в файл ресурсов (.res) и там все увидишь.
2. FindWindow + GetWindowMessage» Юрий Зотов:» 1. Если файл dcr уже есть, то его можно и не переименовывать. Проблема как раз в том, что его нет - откуда ему взяться, если его никто не создавал?

2. FindWindow имеет параметрами класс окна и заголовок окна. Если таких окон (форм) создано несколько, то она вернет первое найденное. Как быть если нужно не первое?

3. GetWindowMessage я так и не нашел. Искал в справке по Delphi, в исходниках VCL, в справке по API и в MSDN. Других источников я не знаю и буду признателен, если Вы подскажете, где Вам удалось найти эту замечательную функцию.


 
Юрий Зотов ©   (2004-07-18 23:40) [2]

> Maxim   (18.07.04 18:21)  

1. С помощью ImageEditor (входит в комплект Delphi) создайте файл ресурсов (.dcr или .res), а в этом файле создайте нужную иконку размером 24х24. Назовите иконку именем класса Вашего компонента, но строго БОЛЬШИМИ буквами. Далее подцепите этот файл директивой $R и перекомпилируйте пакет.

Но будет лучше, если Вы разобьете Ваш пакет на два - runtime и designtime. В первом надо оставить ТОЛЬКО сами компоненты, а во второй нужно вынести ВСЮ регистрацию и ВСЕ редакторы свойств и компонентов (если они есть). Прицеплять ресурсы иконок тоже нужно ко второму пакету. Первый пакет просто компилируете и указаваете его в requires второго пакета, а второй пакет уже инсталлируете в Delphi.

2. Есть три варианта.

а). Указать в свойстве WindowProc формы-владельца свою процедуру (естественно, запомнив старую и вызывая ее, когда требуется). Но этот способ небезопасен, поэтому ОЧЕНЬ его не рекомендую.

б). Заместить оконную процедуру формы своей можно и через связку MakeObjectInstance + SetWindowLong. Как это делается - посмотрите в исходниках VCL (а также в исходниках пакета FormRgn, который можно скачать на Королевстве).

в). Модуль компонента может поставить локальный хук, который отловит все поступающие в программу сообщения. Фильтровать их можно по хэндлам окон-адресатов, а для этого в том же модуле можно завести список форм-владельцев. При своем создании компонент либо добавляет в него TForm(Owner).Handle (если его в списке еще нет), либо только инкрементирует его счетчик (если он там уже есть). При уничтожении декрементирует счетчик и если он стал равным нулю, убирает хэндл из списка. Пожалуй этот способ я бы и рекомендовал.


 
OSokin ©   (2004-07-28 18:52) [3]

Юрий, я про это (в смысле про 1) и говорил, только можно сделать не только ImageEditor"ом, а еще например Resource Workshop"ом или еще чем нибудь



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.042 c
1-1119609462
JTAG
2005-06-24 14:37
2005.07.18
Вычистить остатки компонента из программы как?


14-1118770266
ArMellon
2005-06-14 21:31
2005.07.18
Какие песни Арии вам больше всего нравятся?


8-1111349902
qwertyuiop
2005-03-20 23:18
2005.07.18
DirectDraw.pas чего-то не компилируется в Delhi7


1-1119952704
SergZ
2005-06-28 13:58
2005.07.18
DevExpress


14-1119877554
Axis_of_Evil
2005-06-27 17:05
2005.07.18
Outsourcing