Bonjour,

Pour les besoins d'un projet je dois recreer 'manuellement' une combobox.
et j'ai quelques problemes a mettre ca au point.

En m'inspirant de TDbLookupComboBox, j'arrive a gerer une liste qui apparait lorsque qu'on appuie sur la fleche.

Mon probleme est que lorsque l'on clique sur la liste deroulée, la fenetre principale perd le focus (barre de titre grisée) et le recupere une fois que j'ai relaché le bouton (la liste se ferme).

J'ai recopié à partir du DbLookUp:

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
 
procedure TPopupList.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    Style := WS_POPUP{ or WS_CLIPCHILDREN};
    ExStyle := WS_EX_TOOLWINDOW;
    WindowClass.Style := {WindowClass.Style or} CS_SAVEBITS;
  end;
end;
 
procedure TPopupList.WMMouseActivate(var Msg: TMessage);
begin
    Msg.Result := MA_NOACTIVATE;
end;
 
constructor TPopupList.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
 
  ControlStyle := ControlStyle + [csNoDesignVisible, csReplicatable];
  Visible := False;
end;
Le Hide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
  SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOZORDER or
    SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW);
  Visible := False;
Le Show
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
  SetWindowPos(Handle, HWND_TOP, Origin.X, Origin.Y, 0, 0,
    SWP_NOACTIVATE or SWP_SHOWWINDOW or SWP_NOSIZE);
  Visible := True;
Apparement c'est le meme code que pour le compo BD, mais le comportement n'est pas le meme lorsqu'on clique sur la liste dépliée

Quelqu'un a une idée de ce que j'ai oublié ? mal fait ? autre.. ?

Merci d'avance,