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 ?
Réponses
Trop de publicités?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é.
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;
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 .