Главная страница
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.027 c
14-1119356757
Empleado
2005-06-21 16:25
2005.07.18
Art


3-1118295250
Ярослав
2005-06-09 09:34
2005.07.18
Работа с базой MS SQL из DLL


14-1119816163
P.N.P.
2005-06-27 00:02
2005.07.18
Запись данных на CD


6-1113128131
Stalker01
2005-04-10 14:15
2005.07.18
Трафик при отправке почты


6-1113233727
Diesel
2005-04-11 19:35
2005.07.18
Подмена сокета при сборки пакета.