Scroll в/у Custom component

7 отговора 128 прегледа
#1

Scroll в/у Custom component

Използвам един готов компонент (TOVCLookOutBar), който има два бутона (със стрелка нагоре и надолу), имитиращи SCroll за потребителя. В конструктора на класа тези бутони се Create-ват и на OnClick event-а им се присвоява една процедура, която имитира скролирането. Проблема е, че са private.
Как мога аз да имитирам скролиране, т.е да "накарам Windiws-a да си мисли, че съм натиснал един от двата бутона"?? Незнам друг начин, пробвах с TOVCLookOutBar.Perform(WM_VSCROLL,SB_UP,0), но не стана..
Мерси на всички :)

Отговор
в отговор на VladoVasilev #2

Re: Scroll в/у Custom component

Щом като си има процедура, защо не я използваш. Ако е скрита, извади я на светло. Навремето правих един трик, при който се обръщах към private procedure като към public:


T1 = class(TObject)
private
procedure f1;
end;


T2 = class(T1)
public
procedure f1; overload;
end;


{ T1 }

procedure T1.f1;
begin
// ... some think source
end;

{ T2 }

procedure T2.f1;
begin
inherited;
end;

// ============
T2.Create.f1;


Така през обекта T2 извикваш процедурата f1

Никога не е късно да...
Отговор
в отговор на Eventer #3

Re: Scroll в/у Custom component

Това е много добра идея - мерси! Просто почти не съм пренаписвал компоненти (само за да видя как става) и въобще не ми хрумна...има ли нещо по-нестандартно при пренаписването (все пак това е Visual component)...?

Отговор
в отговор на VladoVasilev #4

Re: Scroll в/у Custom component

Но ти няма да го пренаписваш. Само ще го наследиш в нов празен обект и ще пипнеш метода, който те интересува. После ще използваш новия обект, който ще бъде всъщност наследения компонент.

Никога не е късно да...
Отговор
в отговор на Eventer #5

Re: Scroll в/у Custom component

Незнам дали аз бъркам, ама това си е визуален компонент и съответно трябва да направя нов, който наследява стария и да го инсталирам някъде във page-овете на Component palette-то, за да мога да го ползвам?

Отговор
в отговор на VladoVasilev #6

Re: Scroll в/у Custom component

Точно.

Никога не е късно да...
Отговор
в отговор на Eventer #7

Така няма да стане

Ако T1 и T2 са ти в различни модули, T2 не може да вижда private функцията на T1.

Отговор
в отговор на Formal #8

Re: Така няма да стане

Теоретично, знаеш ли, юе си прав. Сега ще погледна защо тръгна при мен...

Никога не е късно да...
Отговор