Пишу компонент - потомок от TTaskbar: Код | class PACKAGE TProgressTaskBar : public TTaskbar { protected: private: TWinControl *Control; int __fastcall GetMax(void); void __fastcall SetMax(int Val); int __fastcall GetPosition(void); void __fastcall SetPosition(int Val); public: __fastcall TProgressTaskBar(TComponent* Owner); __fastcall ~TProgressTaskBar(void); __published: __property int Max = {read=GetMax,write=SetMax}; __property int Position = {read=GetPosition,write=SetPosition}; }; //------------------------------------------------------------------------------ static inline void ValidCtrCheck(TProgressTaskBar *) { new TProgressTaskBar(NULL); } //------------------------------------------------------------------------------ int __fastcall TProgressTaskBar::GetMax(void) { return ProgressMaxValue; } //------------------------------------------------------------------------------ void __fastcall TProgressTaskBar::SetMax(int Val) { ProgressMaxValue = Val; } //------------------------------------------------------------------------------ int __fastcall TProgressTaskBar::GetPosition(void) { return ProgressValue; } //------------------------------------------------------------------------------ void __fastcall TProgressTaskBar::SetPosition(int Val) { ProgressValue = Val; } //------------------------------------------------------------------------------ __fastcall TProgressTaskBar::TProgressTaskBar(TComponent* Owner):TTaskbar(Owner) { Control = NULL; if(Owner) { Control = dynamic_cast<TWinControl *>(Owner); if(Control) { Control->InsertComponent(this); } } ProgressState = TTaskBarProgressState(TBPF_NORMAL); } //------------------------------------------------------------------------------ __fastcall TProgressTaskBar::~TProgressTaskBar(void) { if(Control) { Control->RemoveComponent(this); Control = NULL; } } //------------------------------------------------------------------------------ namespace Progresstaskbar { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TProgressTaskBar)}; RegisterComponents(L"Samples", classes, 0); } } //------------------------------------------------------------------------------
|
Далее, в теле программы создаю: Код | TProgressTaskBar *ProgressTaskBar = new TProgressTaskBar(this); ProgressTaskBar->Max = 100;
|
Потом, в цикле наращиваю ProgressTaskBar->Position++; Результат нулевой - ничего не происходит с иконкой приложения. Если вместо этого на форму бросить компонент TTaskbar и то же самое проделать с ним: Код | TaskBar->ProgressMaxValue = 100; TaskBar->ProgressState = TTaskBarProgressState(TBPF_NORMAL); TaskBar->ProgressValue++;
|
то всё OK ! В конце концов выяснилось, что при создании формы для компонента TaskBar вызываются: Perform(RM_TaskBarButtonCreated, 0, 0), TaskBar.RegisterTab(LHandle), чего не происходит с моим TProgressTaskBar *ProgressTaskBar = new TProgressTaskBar(this); вопрос: как создавать экземпляр потомка ?
|