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...

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};
};
avec dans le constructeur :

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;
}
Et, pour afficher ou cacher la liste, je faire Autolist->Show() ou Hide() et hop !

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...

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();
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...

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