damasco
Uma das principais características da interface do Windows é a exibição de ícones coloridos. Os ícones não apenas embelezam a área de trabalho do Windows, mas também facilitam a operação intuitiva, trazendo grande comodidade aos usuários. O estilo do Windows é uma boa referência ao projetar interfaces de programas.
O Delphi geralmente fornece dois métodos para definir ícones, um é especificar o ícone do aplicativo nas opções do projeto e o outro é fornecer o atributo Icon na página de propriedades do Object Inspector. Se quiser criar um menu pop-up tão bonito quanto o menu Iniciar do Windows, você mesmo terá que escrever o código.
Sabemos que a maioria dos aplicativos do Windows possuem ícones próprios. Contanto que você retire os ícones do próprio programa, ajuste o tamanho do ícone e adicione-o ao menu pop-up, um lindo menu é concluído.
Primeiro, use ExtractAssociatedIcon para obter o ícone de um determinado programa. Porém, o tamanho do ícone varia e não pode ser adicionado diretamente ao menu. Ao mesmo tempo, o Delphi não oferece a função de ajustar o tamanho do ícone. O arquivo de ícone deve ser convertido em um arquivo bitmap. Em seguida, ajuste o tamanho do arquivo bitmap e, finalmente, substitua os itens de menu pelo arquivo bitmap. Seu código fonte é o seguinte:
tipo
TForm1 = classe(TForm)
MainMenu1: TMainMenu;
Arquivo1: TMenuItem;
/****Itens na barra de menu****/
Open1: TMenuItem;
/****itens no arquivo de menu****/
procedimento FormCreate(Remetente: TObject);
procedimento FormShow(Remetente: TObject);
privado
{declaração de parâmetro local}
público
{declaração de parâmetro global}
Icn, Txt, MnuItm: TBitmap;
fim;
procedimento TForm2.FormCreate(Remetente: TObject);
var R: TRect;
HIcn: HIcon;
IC: TIcon;
Índice: Palavra;
Nome do arquivo: PChar;
começar
/**Obter um ícone de um programa**/
Ic:=TIcon.Create;
Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*nome e caminho do arquivo*/, Índice);
/** Cria bitmap**/
Txt:=TBitmap.Create;
com Txt faça
começar
Largura:=Canvas.TextWidth('Teste');
Altura:=Canvas.TextHeight('Tes');
Canvas.TextOut(0,0,'Teste');
fim;
/**Copie o ícone para o bitmap criado acima e ajuste seu tamanho**/
Icn:=TBitmap.Create;
com Icn fazer
começar
Largura:=32;
Altura:=32;
Pincel.Color:=clBtnFace;
Tela.Draw(0,0,Ic);
fim;
/** Cria o arquivo bitmap final**/
MnuItm:=TBitmap.Create;
com MnuItm fazer
começar
Largura:=Texto.Largura+18;
Altura:=18;
com tela fazer
começar
Pincel.Color:=clBtnFace;
Pen.Color:=clBtnFace;
Brush.Style:=bsSolid;
Retângulo(0,0,Largura,Altura);
CopyMode:=cmSrcAnd;
StretchDraw(Rect(0,0,16,16),Icn);
CopyMode:=cmSrcAnd;
Desenhar(16,8-(Txt.Altura div 2),Txt);
fim;
fim;
fim;
procedimento TForm2.FormShow(Remetente: TObject);
var
ItemInfo: TMenuItemInfo;
hBmp1:THhandle;
começar
HBmp1:=MnuItm.Handle;
com ItemInfo fazer
começar
cbSize:= SizeOf(ItemInfo);
fMáscara:= MIIM_TYPE;
fTipo:= MFT_BITMAP;
dwTypeData:= PChar(MakeLong(hBmp1, 0 ));
fim;
/** Substitua o item de menu Open1 por bitmap **/
SetMenuItemInfo( GetSubMenu( MainMenu1.Handle, File1.MenuIndex ),
Open1.MenuIndex, true, ItemInfo );
fim;
O programa acima foi depurado em ambientes Windows98 e Delphi 4.0.