2 votes

Delphi Custom popup/dropdown, comment ?

Je souhaite créer un menu déroulant/popup personnalisé avec une ombre joliment placée en dessous. Le problème est qu'il ne s'agit pas d'un menu standard et que j'ai besoin de mettre des composants sur le popup/dropdown. Le problème est que ce n'est pas un menu standard et que j'ai besoin de mettre des composants sur le popup/dropdown. Je veux qu'il se comporte comme un menu popup normal, le problème est de savoir par où commencer. Des solutions ? Des références ?

4voto

Robert Love Points 8299

Vous pouvez utiliser TPopupMenu et fournir un dessin personnalisé. Pour ce faire, il suffit de définir

PopupMenu1.OwnerDraw := True;

Ensuite, il faut coder le OnMeasureItem() o OnAdvancedDrawItem() Événement pour déterminer la taille dont vous avez besoin pour la peinture personnalisée. Codez ensuite l'événement OnDrawItem() Event pour peindre la toile comme souhaité.

4voto

Warren P Points 23750

Il semble que vous souhaitiez un formulaire qui ressemble à un menu contextuel, mais qui contienne des composants.

Il est plus facile d'avoir un composant qui a un événement OnMouseDown, comme le TPanel montré dans cet exemple, et de faire apparaître un second formulaire qui contient les contrôles que vous vouliez faire apparaître :

procedure TForm3.JvPanel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbRight then
        FDown := true
  else
        FDown := false;
end;

procedure TForm3.JvPanel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  pt:TPoint;
begin
  if Button=mbRight then begin
        FDown := true;
        pt.X := jvPanel1.Left;
        pt.Y := jvPanel1.Top+jvPanel1.Height;

        pt := ClientToScreen(pt);
        Form4.Position := poDesigned;
        Form4.BorderStyle := bsNone;
        Form4.Left := pt.X;
        Form4.Top := pt.Y;
        Form4.Show;
  end;

end;

Cela permet au formulaire de s'afficher et de se positionner de manière à ressembler à une fenêtre contextuelle. Le deuxième formulaire qui se cache est également facile à réaliser :

procedure TForm4.FormDeactivate(Sender: TObject);
begin
 Hide;
end;

-1voto

willw Points 1026

Pour ce que cela vaut, le problème de l'ombre portée de la fenêtre contextuelle a été résolu. dans cette question .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X