albaricoque
Una característica importante de la interfaz de Windows es la visualización de íconos coloridos. Los íconos no solo embellecen el escritorio de Windows, sino que también facilitan la operación intuitiva, brindando gran comodidad a los usuarios. El estilo de Windows es una buena referencia a la hora de diseñar interfaces de programas.
Delphi generalmente proporciona dos métodos para configurar íconos, uno es especificar el ícono de la aplicación en las Opciones de proyecto y el otro es proporcionar el atributo Icono en la página de propiedades del Inspector de objetos. Si desea diseñar un menú emergente tan hermoso como el menú Inicio de Windows, debe escribir el código usted mismo.
Sabemos que la mayoría de las aplicaciones de Windows tienen íconos. Siempre que saque los íconos del programa, ajuste el tamaño del ícono y los agregue al menú emergente, se completa un hermoso menú.
Primero, use ExtractAssociatedIcon para obtener el ícono de un determinado programa. Sin embargo, el tamaño del ícono varía y es posible que no se agregue directamente al menú. Al mismo tiempo, Delphi no proporciona la función de ajustar el tamaño del ícono. El archivo de icono debe convertirse en un archivo de mapa de bits. Luego ajuste el tamaño del archivo de mapa de bits y finalmente reemplace los elementos del menú con el archivo de mapa de bits. Su código fuente es el siguiente:
tipo
TForm1 = clase(TForm)
Menú principal1: TMenú principal;
Archivo1: TMenuItem;
/****Elementos en la barra de menú****/
Abrir1: TMenuItem;
/****elementos en el archivo de menú****/
procedimiento FormCreate(Remitente: TObject);
procedimiento FormShow(Remitente: TObject);
privado
{declaración de parámetros locales}
público
{declaración de parámetros globales}
Icn, Txt, MnuItm: TBitmap;
fin;
procedimiento TForm2.FormCreate(Remitente: TObject);
var R: TRect;
HIcn: HIcon;
Ic: TIcon;
Índice: Palabra;
Nombre de archivo: PChar;
comenzar
/**Obtener un icono de un programa**/
Ic:=TIcon.Crear;
Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*nombre de archivo y ruta*/, Índice);
/** Crear mapa de bits**/
Texto:=TBitmap.Create;
con texto hacer
comenzar
Ancho:=Canvas.TextWidth('Prueba');
Altura:=Canvas.TextHeight('Tes');
Canvas.TextOut(0,0,'Prueba');
fin;
/**Copia el icono al mapa de bits creado arriba y ajusta su tamaño**/
Icn:=TBitmap.Create;
con Icn hacer
comenzar
Ancho:=32;
Altura:=32;
Pincel.Color:=clBtnFace;
Lienzo.Draw(0,0,Ic);
fin;
/** Crear el archivo de mapa de bits final**/
MnuItm:=TBitmap.Create;
con MnuItm hacer
comenzar
Ancho:=Texto.Ancho+18;
Altura:=18;
con lienzo hacer
comenzar
Pincel.Color:=clBtnFace;
Pluma.Color:=clBtnFace;
Estilo.de.pincel:=bsSolid;
Rectángulo(0,0,Ancho,Alto);
ModoCopiar:=cmSrcAnd;
StretchDraw(Rect(0,0,16,16),Icn);
ModoCopiar:=cmSrcAnd;
Draw(16,8-(Txt.Height div 2),Txt);
fin;
fin;
fin;
procedimiento TForm2.FormShow(Remitente: TObject);
var
Información del artículo: TMenuItemInfo;
hBmp1:TManejar;
comenzar
HBmp1:=MnuItm.Handle;
con ItemInfo hacer
comenzar
cbSize:= TamañoDe(ItemInfo);
fMáscara:= MIIM_TYPE;
fTipo:= MFT_BITMAP;
dwTypeData:= PChar(MakeLong( hBmp1, 0 ));
fin;
/** Reemplazar elemento de menú Open1 con mapa de bits **/
SetMenuItemInfo( GetSubMenu( MainMenu1.Handle, File1.MenuIndex ),
Open1.MenuIndex, verdadero, ItemInfo);
fin;
El programa anterior ha sido depurado en entornos Windows98 y Delphi 4.0.