Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Вниз

WindowProc для TToolButton   Найти похожие ветки 

 
Doid   (2003-09-12 14:22) [0]

Можно каким-нибудь способом установить функцию обработки событий на объект класса TToolButton?


 
mrcat   (2003-09-12 14:28) [1]

например, в OnCreate родителя сделать следующее:

procedure TfrmDoid.FormCreate(Sender: TObject);
begin
FOldToolButton := ToolButton.WindowProc;
ToolButton.WindowProc := NewToolButtonWindowProc;
end;

procedure TfrmDoid.NewToolButtonWindowProc(var Message: TMessage);
begin
if Assigned(FOldToolButton) then FOldToolButton(Message);
end;


---
{ Private declarations }
FOldToolButton: TWndMethod;
procedure NewToolButtonWindowProc(var Message: TMessage);


 
Doid   (2003-09-12 15:25) [2]

А если обработчик сообщения - простая функция(не лежит ни в каких классах) и она лежит в DLL?


 
mrcat   (2003-09-12 15:32) [3]

procedure TfrmDoid.NewToolButtonWindowProc(var Message: TMessage);
begin

if Assigned(FOldToolButton) then FOldToolButton(Message);
Функция_которая_лежит_в_DLL(Параметры);
end;


 
Doid   (2003-09-15 09:41) [4]

Честно говоря у меня проблема с BCB6 :). Просто здесь форум по Delphi. Вот я и решил спросить как это делается в Delphi. Дело в том, что в Builder при объявлении прототипа функции-обработчика участвует ключевое слово __closure, с которым объявить простую функцию-обработчик у меня не получилось. Если функция-обработчик является членом класса формы - проблем нет. Но если она является простой функцией (не принадлежит классу формы), то тут возникают проблемы. Видимо проблем с таким объявлением в Delphi нет. Тут возможны два варианта:
1. Найти способ как все-таки объявляется с этим ключевым словом прототип функции-обработчика.
2. Воспользоваться функцией SetWindowLong с параметром nIndex = GWL_WNDPROC (Данный вариант буду пробовать в самом ближайшем будущем).


 
NAlexey   (2003-09-15 09:50) [5]

>Doid ©
Скорее всего 2й вариант. Подменяй ей(кнопке) WndProc и обрабатывай как надо.


 
Doid   (2003-09-15 11:37) [6]

В процессе реализации возник вопрос: Как вытащить Handle у ToolButton`а? Смотрел иерархию классов: ToolBar наследуется от TWinControl(у этого класса как раз свойство Handle), а ToolButton - от TGraphicControl(у него что-то я не обнаружил хендлоподобного свойства :( ). Можно попробовать вешать обработчик на ToolBar, но как тогда узнать какой из ToolButton`ов был нажат?


 
dima_shapkin   (2003-09-15 11:56) [7]

TTollButton как бы просто рисунок на канве и никакое отношение к окну не имеет. Все свойства и события создаются программистами VCL.


 
nikkie   (2003-09-15 12:23) [8]

>Если функция-обработчик является членом класса формы - проблем нет. Но если она является простой функцией (не принадлежит классу формы), то тут возникают проблемы. Видимо проблем с таким объявлением в Delphi нет.
В дельфи точно такие же проблемы. Сделай членом класса. Однако, dima_shapkin уже сказал, Handle у TToolButton нет, поскольку это не окно. И хотя у него есть WindowProc, пронаследованный от TComponent, что он будет ловить, я не знаю.


 
Doid   (2003-09-15 16:04) [9]

В общем, проблему я решил следующим образом: создал в DLL-ке форму (показываться она не будет никогда). Кинул на нее тулбар с кнопками. Поместил ImageList с картинками( таким образом, я получил хранилище визуальных компонентов, которые будут добавляться в приложение). А в функции MountToolBar сделал следующую вещь:

...
DWORD MountToolBar(void* _AppToolBarContainer)
{
TWinControl* locAppToolBarContainer;

locAppToolBarContainer = static_cast<TWinControl*>(_AppToolBarContainer);
try
{
locAppToolBarContainer->InsertControl(fmTaskRess->tlbrTasking);
...

Обработчики событий в DLL вызываются из приложения корректно.
Всем спасибо!



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

Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
1-82222
Armaniak
2003-09-12 09:00
2003.09.25
Не выделяется по умолчанию фокус на Итеме TRadioGroup


14-82465
Dilezzz
2003-09-07 15:55
2003.09.25
Какой-то этот сайт непрофессиональный


1-82260
Layner
2003-09-15 08:26
2003.09.25
Знатоки, помогите с компонентом. Пишу в первый раз, пример с Edit


8-82346
super_alex
2003-05-26 13:42
2003.09.25
Мигает TImage? Что делать?


1-82307
ikivio
2003-09-13 21:01
2003.09.25
Проблемы с SW_RESTORE.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский