IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Probleme de composant inclus dans un autre.


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Par d�faut [r�solu] Probleme de composant inclus dans un autre.
    Suite aux conseils lors d'une question pr�c�dente, j'inclus un TScrollBar dans mon Composant TTrameList de la mani�re suivante :

    section private de la classe tu composant:

    Constructeur du composant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    	Psb=new TScrollBar(Owner);
    	Psb->Parent=this;
    	Psb->Kind = sbVertical;
    	Psb->Align = alRight;
    	Psb->OnChange=SBChange;
    Voil� le probl�me : sous l'EDI apr�s avoir plac� le composant il affiche le scrollbar sous-jacent (cool). Le probl�me c'est que si je lance l'executable il en affiche deux cote � cote.

    Si je regarde le DFM de ma form, il un ScrollBar apparait dans mon TTrameList. Comme j'en cree un dans le constructeur, ca en fait deux au total.

    Comment pr�venir cela ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
            object tl_trame: TTrameList
              Left = 0
              Top = 13
              Width = 413
              Height = 419
              Align = alClient
              TabOrder = 0
              TabStop = True
              Color = 12048843
              Description = True
              ColorIn = 15790335
              ColorOut = 16773360
              ColorUnk = 13172735
              Font.Charset = ANSI_CHARSET
              Font.Color = clBlack
              Font.Height = -12
              Font.Name = 'Lucida Console'
              Font.Style = []
              LineHeight = 24
              NumSel = -1
              object TScrollBar
                Left = 387
                Top = 0
                Width = 13
                Height = 419
                Align = alRight
                Kind = sbVertical
                Max = 0
                PageSize = 0
                TabOrder = 1
              end
            end
          end

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Par d�faut
    Bon j'ai cru �tre malin et contourner le probl�me en mettant ceci dans le constructeur :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    	if (ControlCount==0)
    		Psb=new TScrollBar(Owner);
    	else
    		Psb=(TScrollBar*)Controls[0];
    Manifestement ca ne marche pas... Les Objets du DFM doivent �tre cr��s apr�s

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Par d�faut
    Pas de grand gourou de Builder � la rescousse ?

  4. #4
    Membre Expert
    Avatar de Gilles Lou�se
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par d�faut
    Tr�s difficile � dire �tant donn� qu'on ne conna�t pas votre composant. Si le ScroolBar est cr�� � la conception, je ne vois pas comment vous pouvez montrer le code de son constructeur �tant donn� que c'est C++ Builder qui se charge d'�crire le code. Ou alors est-ce un ScoolBar cr�� dynamiquement. Il se peut que votre composant ait d�j� un ScroolBar actif, lequel n'est pas visible � la conception mais qui appara�t d�s que c'est n�cessaire. Par exemple mettez un TLabel quelconque sur la forme principale et mettez un ScroolBar horizontal en bas. En ex�cutant vous ne voyez qu'un ScrollBar, celui que vous avez cr�� mais si par exemple sur clic de la forme vous modifiez les coodonn�es du TLabel en sorte qu'il sorte de la forme, alors le ScroolBar de la forme appara�t et il y en a alors deux visibles, celui de la forme et celui cr�� par vous.

    � bient�t
    Gilles

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Par d�faut
    Merci beaucoup pour votre r�ponse.

    D�sol� j'avais post� mon composant dans un autre message.
    Le revoici :

    partie header. Le composant en question est TTrameList.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    enum TTrameDir {tdUnknown, tdIn, tdOut};
     
    // Options pour Paint
    #define topts_sel 1    // élément sélectionné
    #define topts_desc 2   // afficher description
     
    //---------------------------------------------------------------------------
    class TTrame
    {
    private:
    	TTrame *Pnext;
    	TTrame *Pprev;
    	TTrameDir Pdirection;
    	AnsiString Pdata;
    	AnsiString *Pdesc;
    	int Ptypetrame;
     //	TTimeStamp Temps;
    protected:
    public:
    	int Pnumtrame;
    	__fastcall TTrame::TTrame(AnsiString Trame,AnsiString *Desc,TTrameDir Direction);
    	bool __fastcall IsFiltered(unsigned char *filterlist);
    	void __fastcall Paint(TRect *rect,TCanvas *canvas, unsigned char opts);
    	TTrame * __fastcall Next(void);
    	TTrame * __fastcall Prev(void);
    	TTrame * __fastcall NextF(unsigned char *filterlist);
    	TTrame * __fastcall PrevF(unsigned char *filterlist);
    	TTrameDir __fastcall Direction(void);
    	void __fastcall Link(TTrame *prev,TTrame *next);
    	AnsiString  __fastcall TrameRead(void);
    };
     
    //---------------------------------------------------------------------------
    class PACKAGE TTrameList : public TCustomControl
    {
    private:
    	TTrame *Phead;
    	TTrame *Ptop;
    	TTrame *Ptail;
    	TTrame *Psel;
    	TScrollBar *Psb;
    	TFont *FFont;
    	TColor Pcolorin;
    	TColor Pcolorout;
    	TColor Pcolorunk;
    	int Pnblines;
    	int Plineheight;
    	bool Pfocus;
    	bool Pdescription;
    	bool Pfalseclick;
    	unsigned char Pfilter[125];
    protected:
    	DYNAMIC void __fastcall DoEnter(void);
    	DYNAMIC void __fastcall DoExit(void);
    	DYNAMIC void __fastcall Click(void);
    	DYNAMIC void __fastcall MouseDown(TMouseButton Button,Classes::TShiftState Shift, int X, int Y);
    	DYNAMIC void __fastcall MouseUp(TMouseButton Button,Classes::TShiftState Shift, int X, int Y);
    	DYNAMIC void __fastcall KeyDown(Word &Key, Classes::TShiftState Shift);
    	DYNAMIC void __fastcall KeyUp(Word &Key, Classes::TShiftState Shift);
    	bool __fastcall CanResize(int &NewWidth, int &NewHeight);
    	void __fastcall Paint(void);
    	void __fastcall SBChange( TObject *Sender );
    	void __fastcall UpdateSB(void);
    	void __fastcall AjustTop(void);
    	virtual void __fastcall SetDescription( bool value );
    	virtual void __fastcall SetLineHeight( int value );
    	virtual void __fastcall SetColorIn( TColor value );
    	virtual void __fastcall SetColorOut( TColor value );
    	virtual void __fastcall SetColorUnk( TColor value );
    	TTrame * __fastcall FindTrame(int Num);
    //	void __fastcall SetSB(TScrollBar *Value);
    	void __fastcall SetNumSel( int Num );
    	int __fastcall RNumSel(void);
    public:
    	__fastcall TTrameList(TComponent* Owner);
    	__fastcall ~TTrameList();
     
    	void __fastcall Append(AnsiString Trame,AnsiString *Desc,TTrameDir Direction);
    	void __fastcall Up(void);
    	void __fastcall Down(void);
    	void __fastcall PageUp(void);
    	void __fastcall PageDown(void);
    	void __fastcall SetPos(int pos);
    	void __fastcall Filter(AnsiString Trame);
    	void __fastcall UnFilter(AnsiString Trame);
    	void __fastcall Clear(void);
    	AnsiString  __fastcall TrameRead(int numtrame);
    	TTrameDir  __fastcall TrameDir(int numtrame);
     
    	void __fastcall Change(void);
    __published:
    	__property Align;
    	__property Anchors;
    	__property Constraints;
    	__property TabOrder;
    	__property TabStop;
    	__property Color;
    	__property bool Description = { read=Pdescription,  write=SetDescription, default = false };
    	__property TColor ColorIn = { read=Pcolorin,  write=SetColorIn, default = 0x00FFF0F0 };
    	__property TColor ColorOut= { read=Pcolorout, write=SetColorOut,default = 0x00F0F0FF };
    	__property TColor ColorUnk= { read=Pcolorunk, write=SetColorUnk,default = 0x00FFFFF0 };
    	__property Font;
    	__property int LineHeight = { read=Plineheight, write=SetLineHeight, default=8 };
    	__property int NumSel = {read = RNumSel, write=SetNumSel};
    //	__property TScrollBar *ScrollBar =  {read=Psb, write=SetSB};
     
     
    	__property OnClick;
    	__property OnKeyUp;
    	__property OnKeyPress;
    	__property OnKeyDown;
    	__property OnEnter;
    	__property OnExit;
    };
    Voil� le constructeur du composant.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    __fastcall TTrameList::TTrameList(TComponent* Owner)
    	: TCustomControl(Owner)
    {
    	// chercher si qq chose a voir dans controlstyle
    	TabStop = true;
    	Phead = NULL;
    	Ptail = NULL;
    	Ptop = NULL;
    	Pfocus = false;
    	DoubleBuffered = true;
    	SetLineHeight(16);
    //	if (ControlCount==0)
    		Psb=new TScrollBar(Owner);
    //	else
    //		Psb=(TScrollBar*)Controls[0];
    	Psb->Parent=this;
    	Psb->Kind = sbVertical;
    	Psb->Align = alRight;
    	Psb->OnChange=SBChange;
    }
    Quand je fais cela, Si je pose un TTrameList sur ma form, J'ai un scroll bar. Ensuite, � chaque fois que je fais (bouton droit sur la form) "view as text" suivi de "view as form", un nouveau scroll bar apparait.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Par d�faut
    P.S. Je n'ai pas post� toute l'impl�mentation du composant pour ne pas surcharger, s'il y a besoin d'autres partie du code je peux les poster pas de probl�me.

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    A mon avis �a se situe au niveau de la destruction de l'objet.

    Rajouter dans le destructeur de l'objet, la destruction du TScrollBar.
    En effet, le propri�taire est ici owner qui est vraissemblablement une
    fiche, donc ici la destruction de l'objet n'entraine pas la destruction du Psb
    et � supposer qu'il retrouve un parent... qui n'est qu'une adresse ????
    Il faudrait en savoir plus sur BCB lui-m�me... !

    Ou bien modifier l'appel au constructeur du Psb en lui affectant
    this (l'objet) comme propri�taire et non pas owner (la fiche).
    La destruction du Psp sera alors directement li�e � celle de l'objet.

    A plus !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Par d�faut
    Rajouter dans le destructeur de l'objet, la destruction du TScrollBar.
    Aucun changement apr�s essai.

    Ou bien modifier l'appel au constructeur du Psb en lui affectant
    this (l'objet)
    En revanche, ceci r�gle bien mon probl�me. Mon TScrollBar n'apparait plus dans le DFM

    Cool, merci.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Polygone inclus dans un autre
    Par Mic75 dans le forum D�veloppement 2D, 3D et Jeux
    R�ponses: 5
    Dernier message: 17/11/2007, 20h41
  2. Probleme avec deux div dans une autre
    Par orphen dans le forum Mise en page CSS
    R�ponses: 3
    Dernier message: 05/11/2007, 15h10
  3. Bind variable incluse dans une autre bind variable
    Par kinder_pingui dans le forum SQL
    R�ponses: 3
    Dernier message: 28/11/2006, 10h35
  4. Comment trouver des structures incluses dans d'autres
    Par Vulcanos dans le forum Langage SQL
    R�ponses: 2
    Dernier message: 13/10/2006, 23h59
  5. Probleme appel de fct dans une autre classe
    Par crakotte_finance dans le forum C++
    R�ponses: 6
    Dernier message: 09/10/2006, 21h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo