|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите, проблема с переопределением события
Есть
Код:
TDBLookupComboboxHide = class(TDBLookupComboboxEh) private { Private declarations } ... FOnDropDown:TNotifyEvent; FOnCloseUp:TCloseUpNotify; procedure MyDropDown(Sender: TObject); procedure MyCloseUp(Sender: TObject; Accept: Boolean); procedure btnClearClick(Sender: TObject;var Handled: Boolean); protected { Protected declarations } public { Public declarations } constructor Create(AOwner:TComponent);Override; published { Published declarations } ... end; .... procedure TDBLookupComboboxHide.btnClearClick(Sender: TObject;var Handled: Boolean); begin <--Сюда даже не заходит if Assigned(TDBLookupComboboxEh(TEditButtonControlEh(Sender).Parent)) then TDBLookupComboboxEh(TEditButtonControlEh(Sender).Parent).KeyValue:=Null; end; constructor TDBLookupComboboxHide.Create(AOwner:TComponent); begin inherited; ... FOnCloseUp:=Self.OnCloseUp; FOnDropDown:=Self.OnDropDown; Self.OnCloseUp:=MyCloseUp; Self.OnDropDown:=MyDropDown; With EditButtons.Add do begin Style:=ebsGlyphEh; Glyph.LoadFromResourceName(HInstance,'cmbCloseHide'); OnClick:=btnClearClick; <---Вот тут присвоение остановка по BreakPoint есть end; end; Это всё в пакете, компонент регистрируется нормально, события OnCloseUp и OnDropDown переопределяются нормально, а вот при создании дополнительной кнопки событие на ней не переопределяется, в btnClearClick по BreakPoint даже не переходит. Помогите понять в чём дело пожалуйста. Последний раз редактировалось Lost_Fish, 10.08.2012 в 07:06. |
#2
|
||||
|
||||
Ну хоть какие-то идеи, хотяб направление где искать
|
#3
|
||||
|
||||
Попробуйте процедуру Inherited выполнять в самом конце.
|
#4
|
||||
|
||||
Цитата:
Ксожалению я не пользуюсь TDBLookupComboboxEh, поэтому мне негде глянуть его исходники, но если ты просишь "хоть какие-то идеи", то попробуй избавиться от with, т.е. вместо: Код:
With EditButtons.Add do begin Style:=ebsGlyphEh; Glyph.LoadFromResourceName(HInstance,'cmbCloseHide'); OnClick:=btnClearClick; <---Вот тут присвоение остановка по BreakPoint есть end; Код:
переменная:=EditButtons.Add; переменная.Style:=ebsGlyphEh; переменная.Glyph.LoadFromResourceName(HInstance,'cmbCloseHide'); переменная.OnClick:=btnClearClick; <---Вот тут присвоение остановка по BreakPoint есть |
#5
|
||||
|
||||
Цитата:
Код:
procedure TForm1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); begin Msg.MinMaxInfo^.ptMinTrackSize := Point(235, 120); inherited end; Код:
procedure TForm1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); begin inherited; Msg.MinMaxInfo^.ptMinTrackSize := Point(235, 120) end; |
#6
|
||||
|
||||
Цитата:
|
#7
|
||||
|
||||
Цитата:
пробовал не помогает, событие у кнопки есть, определяется если на форме всё это делаешь ручками, пробовал через PostMessage вызывать процедуру которая делала присвоение FClearBtn.OnClick:=btnClearClick; тоже не помогает. Цитата:
Придерживаюсь правила в конструкторах Inherited вызывать в самом начале. Последний раз редактировалось Lost_Fish, 13.08.2012 в 11:22. |
#8
|
|||
|
|||
можно через rtti извратиться, я видел работающий пример, но там жесть, лучше не пытаться угадать а поискать пример, который точно работает
>woweook< |
#9
|
|||
|
|||
Что такое EditButtons и что получается после Add от него?
Ну и в дизайнере создай и посмотри, может там какое свойство доп. надо установить, что бы начало работать (можно еще по исходникам посмотреть). И есть ли у этой кнопки этот самый OnClick??? А то мож в итоге ты обработчик на форму навешиваешь... - попробуй написать без With и посмотреть, что тебе компилятор скажет. |
#10
|
||||
|
||||
Цитата:
В EhLib есть компонент TDBLookupComboBoxEh, список с возможностью добавлять кнопки такие же как для разворота списка, Add добавляет кнопку, в свойствах ничего интересного, событие OnClick есть на каждом экземпляре кнопки, и если ручками прописывать о6но работает. Цитата:
кнопка-то создается и картинка на нее из ресурса ставится пробовал через переменную, как локальную так и глобальную(переопределял позже создания вызывая переопределение через PostMessage), вобщем испробовав ряд ректальных ухищрений пришёл к выводу что действие буду прописывать в ручную. |