Bonjour,
Je suis en train de d�finir un composant utilisateur qui ressemble un peu � un TComboBox, et est compos� de 2 parties :
1- un TEdit, toujours visible
2- un TListBox, qui est affich� en dessous sous certaines conditions.
Je fais descendre le composant de TEdit, et lui associe un TListBox... Ca donne donc un truc comme ca...
avec dans le constructeur :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8 class PACKAGE TMLLookup : public TEdit { private: TListBox *FAutolist; __published: __property TListBox *AutoList = {read=FAutolist,write=FAutolist}; };
Et, pour afficher ou cacher la liste, je faire Autolist->Show() ou Hide() et hop !
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 __fastcall TMLLookup::TMLLookup(TComponent* Owner) : TEdit(Owner) { AutoList=new TListBox(this); AutoList->Parent=this; AutoList->Visible=false; AutoList->Width=Width; AutoList->Top=Height; }
Oui mais voila, quand je veux afficher le TListBox, comme il doit apparaitre en dessous du TEdit, il est en dehors de la zone d'affichage de son Parent (le TEdit), et donc, il n'est pas visible...
Une solution naive serait de tout faire d�pendre d'un TPanel qui aurait la bonne taille. Mais du coup, il faudrait r�server la place d'affichage de la ListBox, m�me quand elle est invisible. Ca gaspille pas mal de place sur l'�cran.
J'ai trouv� une bidouille : lors de l'affichage de la TListBox, je modifie son Parent au vol, et l'affecte au Parent de son parent...
Et je la remet � sa place quand on la cache. Mais ce n'est pas tr�s �l�gant, et si le parent n'a pas la place d'afficher l'Autolist, je suis ramen� au probl�me pr�c�dent...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 AutoList->Parent=Parent; AutoList->Left=Left; AutoList->Width=Width; AutoList->Top=Top+Height; AutoList->Show();
Y a-t-il une fa�on propre de permettre � un sous composant de s'afficher en dehors de la zone d'affichage de son parent?
Francois
Partager