Bonjour,
je cherche a cree un component de type TPanel contenant de base une barre d'outil et d'autres components
mon probleme est d'acceder en designe à la barre d'outil notament en edition a son menu ajouter bouton et par la suite au bouton lui meme
voilà mon code de depart:
.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class PACKAGE TPan_Viewer : public TPanel
{
private:
TToolBar *ToolBar1;
TButton* Bout1;
protected:
public:
void __fastcall OnClickButton(TObject *Sender);
__fastcall TPan_Viewer(TComponent* Owner);
__published:
__property TButton* Button={read=Bout1,write=Bout1};
__property TToolBar *ToolBar={read=ToolBar1,write=ToolBar1};
// __property TCadViewer* CadViewer={read=CadViewer1,write=CadViewer1};
// __property TViewerStrato* ViewerStrato={read=ViewerStrato1,write=ViewerStrato1};
}; |
avec dans le constructeur
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| __fastcall TPan_Viewer::TPan_Viewer(TComponent* Owner)
: TPanel(Owner)
{
//pour que le composant accepte des controles
ControlStyle = ControlStyle << csAcceptsControls ;
Bout1= new TButton(this);
//LaForm->InsertComponent(Bout1);
Bout1->Parent=this;
Bout1->SetSubComponent(true);
Bout1->OnClick = OnClickButton;
Bout1->Name="TButton1";
Bout1->Top=2;
Bout1->Height=25;
ToolBar1= new TToolBar(this);
ToolBar1->Parent=this;
ToolBar1->Name="TToolBar1";
//permet d'acceder aux evenements depuis l'inspecteur d'objet
ToolBar1->SetSubComponent(true);
ToolBar1->Align=alRight;
} |
et pour l'enregistrement du component
1 2 3 4 5 6 7 8
| namespace Panel_viewer
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TPan_Viewer)};
RegisterComponents("CIRTES", classes, 0);
}
} |
ma premiere solution est de changer le constructeur de la tool bar en lui passant le owner (donc la fiche sur laquelle on pose le component) en parametre
ToolBar1= new TToolBar(Owner);
celà fonctionne bien tout est accessible soit directement par selection en conception ou par l'inspectueur d'objet en tant que sous objet de mon panel
seulement si je n'ai pas renommer la toolbar avec un autre nom (une fois le composant posé) j'ai un plantage à l'execution
-> Comment eviter celà?
une deuxieme solution est de creer une classe de type TComponentedit
1 2 3 4 5 6
| class PACKAGE TPan_ViewerEditor : public TComponentEditor
{
virtual void __fastcall ExecuteVerb(int Index);
virtual AnsiString __fastcall GetVerb(int Index);
virtual int __fastcall GetVerbCount(void);
}; |
de rajouter dans le register
1 2
| RegisterComponentEditor(__classid(TPan_Viewer),
__classid(TPan_ViewerEditor)); |
et de redefinir
1 2 3 4 5
| int __fastcall TPan_ViewerEditor::GetVerbCount(void)
{
//avec quelque chose comme:
//return TToolBarEdit::GetVerbCount();
} |
et
1 2 3 4 5
| void __fastcall TPan_ViewerEditor::ExecuteVerb(int Index)
{
//avec quelque chose comme:
//return TToolBarEdit::ExecuteVerb(Index);
} |
pour returner les fonctions d'edition de la toolbar
je ne connais pas la classe derivant de TComponentEdit associé a TToolBar et je ne sais pas comment faire pour y acceder voir meme si c'est possible?
de plus celà me permettrait d'ajouter un bouton à la toolbar par l'intermediaire de l'inspecteur d'objet mais apres Comment Faire pour acceder au bouton?
Si quelqu'un a une idée?
Partager