Форум: "Компоненты";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизИконка, Сообщения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.062 c