Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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
3-1117799125
Iova
2005-06-03 15:45
2005.07.18
Как получить список реквизитов справочника


1-1120138056
Андрей Жук
2005-06-30 17:27
2005.07.18
Соединение ячеек в Excel


1-1120069504
romariosp
2005-06-29 22:25
2005.07.18
Размер бинарника


9-1112986098
Костя
2005-04-08 22:48
2005.07.18
Пожалуста! Я туплю!


14-1119949293
Ega23
2005-06-28 13:01
2005.07.18
Помогите с терминологией!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский