Téléchargé 1 fois
Vote des utilisateurs
0
0
Détails
Licence : Non renseignée
Mise en ligne le 18 juillet 2026
Langue : Anglais
Référencé dans
Navigation
Calcul de la taille (Height & With) d'un TPopupMenu de FireMonkey
Calcul de la taille (Height & With) d'un TPopupMenu de FireMonkey
Cette unité contient un "Class Helper for TPopupMenu" qui ajoute la propriété "Size" au composant "TPopupMenu" de FireMonkey.
Elle calcule les dimensions (Height & Width) qu'aura le popup menu à l'affichage.
Elle duplique une partie du code de l'unité FMX.Menu de Delphi car celui-ci se trouve dans la partie Implémentation et est donc innaccessible.
Le calcule duplique partie de la méthode TPopupMenu.Popup qui calcule ces valeurs
Elle calcule les dimensions (Height & Width) qu'aura le popup menu à l'affichage.
Elle duplique une partie du code de l'unité FMX.Menu de Delphi car celui-ci se trouve dans la partie Implémentation et est donc innaccessible.
Le calcule duplique partie de la méthode TPopupMenu.Popup qui calcule ces valeurs
Bonjour,
Comme plusieurs développeurs, je me suis heurté à l'absence de propriété et/ou de fonction donnant les dimensions (hauteur et largeur) d'un popup menu dans l’environnement FMX.
Aussi, j'ai crée un "class helper" pour les composants FMX.Menus.TPopupMenu qui présente la propriété "Size" recherchée
Je vous livre ici l'unité "uMenusHelper.pas" définissant cette classe. Le code reprend une partie du code en implémentation de l'unité FMX.Menus de Delphi car les classes nécessaires ne sont pas accessibles autrement
Comme plusieurs développeurs, je me suis heurté à l'absence de propriété et/ou de fonction donnant les dimensions (hauteur et largeur) d'un popup menu dans l’environnement FMX.
Aussi, j'ai crée un "class helper" pour les composants FMX.Menus.TPopupMenu qui présente la propriété "Size" recherchée
Je vous livre ici l'unité "uMenusHelper.pas" définissant cette classe. Le code reprend une partie du code en implémentation de l'unité FMX.Menus de Delphi car les classes nécessaires ne sont pas accessibles autrement
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function CalcPopupMenuSize(Popup: TPopupMenu; const Canvas: TCanvas): TSizeF; var Item: TMenuItem; MaxWidth, TotalHeight, ItemHeight, TextWidth: Single; begin MaxWidth := 0; TotalHeight := 0; // Hauteur standard dun item selon le style FMX ItemHeight := Popup.GetDefaultMenuItemHeight; for Item in Popup.Items do begin // Mesure du texte TextWidth := Canvas.TextWidth(Item.Text); // Ajout des marges internes du style TextWidth := TextWidth + 20; // padding approximatif if TextWidth > MaxWidth then MaxWidth := TextWidth; TotalHeight := TotalHeight + ItemHeight; end; Result := TSizeF.Create(MaxWidth, TotalHeight); end; |
| Code : | Sélectionner tout |
1 2 3 4 5 6 | var Size: TSizeF; begin Size := CalcPopupMenuSize(PopupMenu1, Form1.Canvas); ShowMessage(Format('Width: %.0f - Height: %.0f', [Size.Width, Size.Height])); end; |
@xegregory J'ai essayé ce genre de code (et d'autres à base de TTextLayout) mais n'arrive pas à avoir de bons résultats.
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | function TForm1.GetPopupMenuSize(PopupMenu: TPopupMenu; out Width, Height: Single): Boolean; var i: Integer; TextSize: TSizeF; TextLayout: TTextLayout; MaxWidth: Single; TotalHeight: Single; begin Result := PopupMenu.ItemsCount > 0; if not Result then Exit; TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try MaxWidth := 0; TotalHeight := 0; for i := 0 to PopupMenu.ItemsCount - 1 do begin TextLayout.Font.Assign(PopupMenu1.Items[i].TextSettings.Font); TextLayout.Text := PopupMenu1.Items[i].Text; MaxWidth := Max(MaxWidth, TextLayout.Width + 60); totalheight:=totalheight+PopupMenu1.Items[i].Height; end; finally TextLayout.Free; end; width:=maxwidth; height:=totalheight; end; |
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.