Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.08.2012, 06:52
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию Помогите, проблема с переопределением события

Есть

Код:
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  
Старый 10.08.2012, 14:15
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Ну хоть какие-то идеи, хотяб направление где искать
Ответить с цитированием
  #3  
Старый 10.08.2012, 14:53
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Попробуйте процедуру Inherited выполнять в самом конце.
Ответить с цитированием
  #4  
Старый 10.08.2012, 15:24
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Alegun
Попробуйте процедуру Inherited выполнять в самом конце.
Скорее всего вряд ли это поможет. Вот если бы наоборот inherited был в конце, то перенос его в начало могло дать результат.
Ксожалению я не пользуюсь 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 есть
Может у этой кнопки нет свойства OnClick (или оно сокрыто) и из-за with обработчик события btnClearClick присваивается вовсе не ей?
Ответить с цитированием
  #5  
Старый 10.08.2012, 16:06
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от poli-smen
Скорее всего вряд ли это поможет. Вот если бы наоборот inherited был в конце, то перенос его в начало могло дать результат...
Странно, а у меня например, процедура контроля изменения размеров формы вот так работает:
Код:
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  
Старый 10.08.2012, 16:22
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Alegun
Странно, а у меня например, процедура контроля изменения размеров формы вот так работает:
Код:
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;
Смотрел\проверял специально - инхирайтед в конце работает.
Странно. У меня и так и так работает...
Ответить с цитированием
  #7  
Старый 13.08.2012, 11:20
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от poli-smen
переменная:=EditButtons.Add;
переменная.Style:=ebsGlyphEh;
переменная.Glyph.LoadFromResourceName(HInstance,'c mbCloseHide');
переменная.OnClick:=btnClearClick;

пробовал не помогает, событие у кнопки есть, определяется если на форме всё это делаешь ручками, пробовал через PostMessage вызывать процедуру которая делала присвоение FClearBtn.OnClick:=btnClearClick; тоже не помогает.

Цитата:
Попробуйте процедуру Inherited выполнять в самом конце.

Придерживаюсь правила в конструкторах Inherited вызывать в самом начале.

Последний раз редактировалось Lost_Fish, 13.08.2012 в 11:22.
Ответить с цитированием
  #8  
Старый 13.08.2012, 14:07
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

можно через rtti извратиться, я видел работающий пример, но там жесть, лучше не пытаться угадать а поискать пример, который точно работает
__________________
>woweook<
Ответить с цитированием
  #9  
Старый 13.08.2012, 19:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Что такое EditButtons и что получается после Add от него?
Ну и в дизайнере создай и посмотри, может там какое свойство доп. надо установить, что бы начало работать (можно еще по исходникам посмотреть). И есть ли у этой кнопки этот самый OnClick??? А то мож в итоге ты обработчик на форму навешиваешь... - попробуй написать без With и посмотреть, что тебе компилятор скажет.
Ответить с цитированием
  #10  
Старый 14.08.2012, 07:25
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
Что такое EditButtons и что получается после Add от него?

В EhLib есть компонент TDBLookupComboBoxEh, список с возможностью добавлять кнопки такие же как для разворота списка, Add добавляет кнопку, в свойствах ничего интересного, событие OnClick есть на каждом экземпляре кнопки, и если ручками прописывать о6но работает.

Цитата:
Сообщение от lmikle
попробуй написать без With и посмотреть, что тебе компилятор скажет.

кнопка-то создается и картинка на нее из ресурса ставится

пробовал через переменную, как локальную так и глобальную(переопределял позже создания вызывая переопределение через PostMessage), вобщем испробовав ряд ректальных ухищрений пришёл к выводу что действие буду прописывать в ручную.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter