Ownerdrawn menus
Changer le ownerdraw propriété de la TMainMenu à True, alors pour chaque
TMenuItem vous voulez dessiner personnalisé mess avec OnDrawItem et
OnMeasureItem. À la suite d'un exemple convertir librement à partir d'un MSDN
exemple :
TForm1 = class(TForm)
& nbsp & nbsp MainMenu1: TMainMenu
& nbsp & nbsp N1: TMenuItem // Fichier
& nbsp & nbsp N2: TMenuItem // Fichier >
& nbsp & nbsp N3: TMenuItem // Fichier -> Gras
& nbsp & nbsp N4: TMenuItem // Fichier -> Italique
& nbsp & nbsp N5: TMenuItem // Fichier -> Underline
& nbsp & nbsp procédure N1DrawItem(Sender: TObject ACanvas: TCanvas
& ! & ! & ! & nbsp ARect: TRect Sélectionné: Boolean)
& nbsp & nbsp procédure N1MeasureItem(Sender: TObject ACanvas: TCanvas
& ! & ! & ! & nbsp var Largeur, Hauteur: Integer)
...
procedure TForm1.N1DrawItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp ARect: TRect Sélectionné: Boolean)
var
& nbsp & nbsp clrPrevText: TColor
& nbsp & nbsp clrPrevBkgnd: TColor
begin
& nbsp & nbsp cas (Expéditeur TMenuItem).MenuIndex de
& ! & ! & ! & nbsp 1: ACanvas.La police.Style := [fsBold]
& ! & ! & ! & nbsp 2: ACanvas.La police.Style := [fsItalic]
& ! & ! & ! & nbsp 3: ACanvas.La police.Style := [fsUnderline]
& nbsp & nbsp fin
& nbsp & nbsp // Économie de premier plan et d'arrière-plan de couleurs.
& nbsp & nbsp clrPrevText := ACanvas.La police.De couleur
& nbsp & nbsp clrPrevBkgnd := ACanvas.La brosse.De couleur
& nbsp & nbsp // Définir les couleurs d'arrière-plan.
& nbsp & nbsp si cette option est Sélectionnée, puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp ACanvas.La police.Couleur := clHighlightText
& ! & ! & ! & nbsp ACanvas.La brosse.Couleur := clHighlight
& nbsp & nbsp fin
& nbsp & nbsp else
& nbsp & nbsp commencer
& ! & ! & ! & nbsp ACanvas.La police.Couleur := clMenuText
& ! & ! & ! & nbsp ACanvas.La brosse.Couleur := clMenu
& nbsp & nbsp fin
& nbsp & nbsp // Déterminer où tracer et laisser de l'espace pour une case à cocher.
& nbsp & nbsp ExtTextOut(ACanvas.Poignée, ARect.Gauche
& ! & ! & ! & nbsp GetSystemMetrics(SM_CXMENUCHECK), ARect.Top 1,
& ! & ! & ! & nbsp ETO_OPAQUE, @ARect, PChar((Expéditeur TMenuItem).La légende),
& ! & ! & ! & nbsp Longueur((Expéditeur TMenuItem).La légende), nil)
& nbsp & nbsp // de Rétablir l'original de la police et les couleurs.
& nbsp & nbsp ACanvas.La police.Couleur := clrPrevText
& nbsp & nbsp ACanvas.La brosse.Couleur := clrPrevBkgnd
& nbsp & nbsp ACanvas.La police.Style := []
fin
procedure TForm1.N1MeasureItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp var Largeur, Hauteur: Entier)
var
& nbsp & nbsp Taille: TSize
begin
& nbsp & nbsp GetTextExtentPoint32(ACanvas.Poignée,
& ! & ! & ! & nbsp PChar((Expéditeur TMenuItem).La légende),
& ! & ! & ! & nbsp Longueur((Expéditeur TMenuItem).La légende), Taille)
& nbsp & nbsp Largeur := taille.cx 2 * GetSystemMetrics(SM_CXMENUCHECK)
& nbsp & nbsp Taille := taille.cy 5
fin
Ownerdrawn menu
Ownerdrawn menu : Plusieurs milliers de conseils pour vous faciliter la vie.
Ownerdrawn menus
Changer le ownerdraw propriete de la TMainMenu a True, alors pour chaque
TMenuItem vous voulez dessiner personnalise mess avec OnDrawItem et
OnMeasureItem. A la suite d'un exemple convertir librement a partir d'un MSDN
exemple :
TForm1 = class(TForm)
& nbsp & nbsp MainMenu1: TMainMenu
& nbsp & nbsp N1: TMenuItem // Fichier
& nbsp & nbsp N2: TMenuItem // Fichier >
& nbsp & nbsp N3: TMenuItem // Fichier -> Gras
& nbsp & nbsp N4: TMenuItem // Fichier -> Italique
& nbsp & nbsp N5: TMenuItem // Fichier -> Underline
& nbsp & nbsp procedure N1DrawItem(Sender: TObject ACanvas: TCanvas
& ! & ! & ! & nbsp ARect: TRect Selectionne: Boolean)
& nbsp & nbsp procedure N1MeasureItem(Sender: TObject ACanvas: TCanvas
& ! & ! & ! & nbsp var Largeur, Hauteur: Integer)
...
procedure TForm1.N1DrawItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp ARect: TRect Selectionne: Boolean)
var
& nbsp & nbsp clrPrevText: TColor
& nbsp & nbsp clrPrevBkgnd: TColor
begin
& nbsp & nbsp cas (Expediteur TMenuItem).MenuIndex de
& ! & ! & ! & nbsp 1: ACanvas.La police.Style := [fsBold]
& ! & ! & ! & nbsp 2: ACanvas.La police.Style := [fsItalic]
& ! & ! & ! & nbsp 3: ACanvas.La police.Style := [fsUnderline]
& nbsp & nbsp fin
& nbsp & nbsp // Economie de premier plan et d'arriere-plan de couleurs.
& nbsp & nbsp clrPrevText := ACanvas.La police.De couleur
& nbsp & nbsp clrPrevBkgnd := ACanvas.La brosse.De couleur
& nbsp & nbsp // Definir les couleurs d'arriere-plan.
& nbsp & nbsp si cette option est Selectionnee, puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp ACanvas.La police.Couleur := clHighlightText
& ! & ! & ! & nbsp ACanvas.La brosse.Couleur := clHighlight
& nbsp & nbsp fin
& nbsp & nbsp else
& nbsp & nbsp commencer
& ! & ! & ! & nbsp ACanvas.La police.Couleur := clMenuText
& ! & ! & ! & nbsp ACanvas.La brosse.Couleur := clMenu
& nbsp & nbsp fin
& nbsp & nbsp // Determiner ou tracer et laisser de l'espace pour une case a cocher.
& nbsp & nbsp ExtTextOut(ACanvas.Poignee, ARect.Gauche
& ! & ! & ! & nbsp GetSystemMetrics(SM_CXMENUCHECK), ARect.Top 1,
& ! & ! & ! & nbsp ETO_OPAQUE, @ARect, PChar((Expediteur TMenuItem).La legende),
& ! & ! & ! & nbsp Longueur((Expediteur TMenuItem).La legende), nil)
& nbsp & nbsp // de Retablir l'original de la police et les couleurs.
& nbsp & nbsp ACanvas.La police.Couleur := clrPrevText
& nbsp & nbsp ACanvas.La brosse.Couleur := clrPrevBkgnd
& nbsp & nbsp ACanvas.La police.Style := []
fin
procedure TForm1.N1MeasureItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp var Largeur, Hauteur: Entier)
var
& nbsp & nbsp Taille: TSize
begin
& nbsp & nbsp GetTextExtentPoint32(ACanvas.Poignee,
& ! & ! & ! & nbsp PChar((Expediteur TMenuItem).La legende),
& ! & ! & ! & nbsp Longueur((Expediteur TMenuItem).La legende), Taille)
& nbsp & nbsp Largeur := taille.cx 2 * GetSystemMetrics(SM_CXMENUCHECK)
& nbsp & nbsp Taille := taille.cy 5
fin