Ownerdrawn menús
Cambiar la propiedad ownerdraw de la TMainMenu a True, entonces para cada
TMenuItem desea costumbre de sacar lío con OnDrawItem y
OnMeasureItem. Siguiendo un ejemplo libremente convertido de una de MSDN
ejemplo :
TForm1 = class(TForm)
& nbsp & nbsp MainMenu1: TMainMenu
& nbsp & nbsp N1: TMenuItem // Archivo
& nbsp & nbsp N2: TMenuItem // File -> Regular
& nbsp & nbsp N3: TMenuItem // File -> Negrita
& nbsp & nbsp N4: TMenuItem // File -> Cursiva
& nbsp & nbsp N5: TMenuItem // File -> Subrayado
& nbsp & nbsp procedimiento N1DrawItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp & nbsp & nbsp ARect: TRect Seleccionado: Boolean)
& nbsp & nbsp procedimiento N1MeasureItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp & nbsp & nbsp var Ancho, Altura: Entero)
...
procedure TForm1.N1DrawItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp ARect: TRect Seleccionado: Boolean)
var
& nbsp & nbsp clrPrevText: TColor
& nbsp & nbsp clrPrevBkgnd: TColor
begin
& nbsp & nbsp caso (Remitente como TMenuItem).MenuIndex de
& nbsp & nbsp & nbsp & nbsp 1: ACanvas.Fuente.Estilo := [fsBold]
& nbsp & nbsp & nbsp & nbsp 2: ACanvas.Fuente.Estilo := [fsItalic]
& nbsp & nbsp & nbsp & nbsp 3: ACanvas.Fuente.Estilo := [fsUnderline]
& nbsp & nbsp final
& nbsp & nbsp // Guardar los colores frontal y de fondo.
& nbsp & nbsp clrPrevText := ACanvas.Fuente.Color
& nbsp & nbsp clrPrevBkgnd := ACanvas.Cepillo.Color
& nbsp & nbsp // el primer plano y colores de fondo.
& nbsp & nbsp si se Selecciona, a continuación,
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp ACanvas.Fuente.Color := clHighlightText
& nbsp & nbsp & nbsp & nbsp ACanvas.Cepillo.Color := clHighlight
& nbsp & nbsp final
& nbsp & nbsp else
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp ACanvas.Fuente.Color := clMenuText
& nbsp & nbsp & nbsp & nbsp ACanvas.Cepillo.Color := clMenu
& nbsp & nbsp final
& nbsp & nbsp // Determinar el lugar donde dibujar y dejar espacio para una marca de verificación.
& nbsp & nbsp ExtTextOut(ACanvas.Manejar, ARect.A la izquierda
& nbsp & nbsp & nbsp & nbsp GetSystemMetrics(SM_CXMENUCHECK), ARect.Top 1,
& nbsp & nbsp & nbsp & nbsp ETO_OPAQUE, @ARect, PChar((Remitente como TMenuItem).Pie de foto),
& nbsp & nbsp & nbsp & nbsp Longitud((Remitente como TMenuItem).Pie de foto), nil)
& nbsp & nbsp // Restaurar la fuente original y los colores.
& nbsp & nbsp ACanvas.Fuente.Color := clrPrevText
& nbsp & nbsp ACanvas.Cepillo.Color := clrPrevBkgnd
& nbsp & nbsp ACanvas.Fuente.Estilo := []
fin
procedure TForm1.N1MeasureItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp var Ancho, Altura: Entero)
var
& nbsp & nbsp Tamaño: TSize
begin
& nbsp & nbsp GetTextExtentPoint32(ACanvas.Asa,
& nbsp & nbsp & nbsp & nbsp PChar((Remitente como TMenuItem).Pie de foto),
& nbsp & nbsp & nbsp & nbsp Longitud((Remitente como TMenuItem).Pie de foto), Tamaño)
& nbsp & nbsp Ancho := tamaño de la.cx 2 * GetSystemMetrics(SM_CXMENUCHECK)
& nbsp & nbsp Altura := tamaño de la.cy 5
fin
Ownerdrawn menu
Ownerdrawn menu : Multi-millones de consejos para hacer su vida mas facil.
Ownerdrawn menus
Cambiar la propiedad ownerdraw de la TMainMenu a True, entonces para cada
TMenuItem desea costumbre de sacar lio con OnDrawItem y
OnMeasureItem. Siguiendo un ejemplo libremente convertido de una de MSDN
ejemplo :
TForm1 = class(TForm)
& nbsp & nbsp MainMenu1: TMainMenu
& nbsp & nbsp N1: TMenuItem // Archivo
& nbsp & nbsp N2: TMenuItem // File -> Regular
& nbsp & nbsp N3: TMenuItem // File -> Negrita
& nbsp & nbsp N4: TMenuItem // File -> Cursiva
& nbsp & nbsp N5: TMenuItem // File -> Subrayado
& nbsp & nbsp procedimiento N1DrawItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp & nbsp & nbsp ARect: TRect Seleccionado: Boolean)
& nbsp & nbsp procedimiento N1MeasureItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp & nbsp & nbsp var Ancho, Altura: Entero)
...
procedure TForm1.N1DrawItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp ARect: TRect Seleccionado: Boolean)
var
& nbsp & nbsp clrPrevText: TColor
& nbsp & nbsp clrPrevBkgnd: TColor
begin
& nbsp & nbsp caso (Remitente como TMenuItem).MenuIndex de
& nbsp & nbsp & nbsp & nbsp 1: ACanvas.Fuente.Estilo := [fsBold]
& nbsp & nbsp & nbsp & nbsp 2: ACanvas.Fuente.Estilo := [fsItalic]
& nbsp & nbsp & nbsp & nbsp 3: ACanvas.Fuente.Estilo := [fsUnderline]
& nbsp & nbsp final
& nbsp & nbsp // Guardar los colores frontal y de fondo.
& nbsp & nbsp clrPrevText := ACanvas.Fuente.Color
& nbsp & nbsp clrPrevBkgnd := ACanvas.Cepillo.Color
& nbsp & nbsp // el primer plano y colores de fondo.
& nbsp & nbsp si se Selecciona, a continuacion,
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp ACanvas.Fuente.Color := clHighlightText
& nbsp & nbsp & nbsp & nbsp ACanvas.Cepillo.Color := clHighlight
& nbsp & nbsp final
& nbsp & nbsp else
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp ACanvas.Fuente.Color := clMenuText
& nbsp & nbsp & nbsp & nbsp ACanvas.Cepillo.Color := clMenu
& nbsp & nbsp final
& nbsp & nbsp // Determinar el lugar donde dibujar y dejar espacio para una marca de verificacion.
& nbsp & nbsp ExtTextOut(ACanvas.Manejar, ARect.A la izquierda
& nbsp & nbsp & nbsp & nbsp GetSystemMetrics(SM_CXMENUCHECK), ARect.Top 1,
& nbsp & nbsp & nbsp & nbsp ETO_OPAQUE, @ARect, PChar((Remitente como TMenuItem).Pie de foto),
& nbsp & nbsp & nbsp & nbsp Longitud((Remitente como TMenuItem).Pie de foto), nil)
& nbsp & nbsp // Restaurar la fuente original y los colores.
& nbsp & nbsp ACanvas.Fuente.Color := clrPrevText
& nbsp & nbsp ACanvas.Cepillo.Color := clrPrevBkgnd
& nbsp & nbsp ACanvas.Fuente.Estilo := []
fin
procedure TForm1.N1MeasureItem(Sender: TObject ACanvas: TCanvas
& nbsp & nbsp var Ancho, Altura: Entero)
var
& nbsp & nbsp Tamaño: TSize
begin
& nbsp & nbsp GetTextExtentPoint32(ACanvas.Asa,
& nbsp & nbsp & nbsp & nbsp PChar((Remitente como TMenuItem).Pie de foto),
& nbsp & nbsp & nbsp & nbsp Longitud((Remitente como TMenuItem).Pie de foto), Tamaño)
& nbsp & nbsp Ancho := tamaño de la.cx 2 * GetSystemMetrics(SM_CXMENUCHECK)
& nbsp & nbsp Altura := tamaño de la.cy 5
fin