Преобразование иконок в Gliph-ы
Вот небольшой пример того, как можно загрузить иконку, содержащуюся в файле EXE,
в Glyph у SpeedButton, и как очистить этот самый Glyph.
Огорчен, но комментарии в исходном коде на испанском языке.
unit Procs;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, StdCtrls, Buttons, ExtCtrls, ShellAPI;
procedure LlenaBoton(boton: TSpeedButton; Programa: string);
procedure LimpiaBoton(boton: TSpeedButton);
var
{Botones de programas}
Pic: TPicture;
Fname: string;
TempFile: array[0..255] of Char;
Icon: TIcon;
implementation
uses ttotro;
procedure LlenaBoton(boton: TSpeedButton; Programa: string);
var
NumFiles, NameLength: integer;
nIconsInFile: word;
rBoton: TRect;
oBitmap: TBitmap;
oBitmap2: TBitmap;
NombreBitmap: string;
begin
try
screen.cursor := crHourglass;
{Extrae el Icono}
Icon := TIcon.Create;
StrPCopy(TempFile, Programa);
Icon.Handle := ExtractIcon(HInstance, TempFile, 0);
{Crea una instancia de TPicture}
Pic := TPicture.Create;
{Asigna el icon.handle a la propiedad Pic.icon}
Pic.Icon := Icon;
{Configura el tamano del bitmap como el del icono y el del segundo
bitmap con el tamano del boton}
oBitmap := TBitMap.create;
oBitmap2 := TBitMap.create;
oBitmap2.Width := Icon.Width;
oBitmap2.Height := Icon.Height;
oBitmap.Width := boton.Width - 4;
oBitmap.Height := boton.Height - 4;
{ Dibuja el icono en el bitmap }
oBitmap2.Canvas.Draw(0, 0, Pic.Graphic);
rBoton.left := 1;
rBoton.Top := 1;
rBoton.right := boton.Width - 6;
rBoton.Bottom := boton.Height - 6;
oBitmap.Canvas.StretchDraw(rBoton, oBitmap2);
Boton.Hint := Programa;
NombreBitmap := Copy(programa, 1, Length(programa) - 3) + 'BMP';
{Salva el bitmap en un fichero}
if not FileExists(NombreBitmap) then
begin
oBitmap.SaveToFile(ExtractFilePath(Application.ExeName) +
ExtractFileName(NombreBitmap));
Boton.Glyph := oBitmap;
end
else
{Carga el BMP en el boton}
Boton.Glyph.LoadFromFile(ExtractFilePath(Application.ExeName) +
ExtractFileName(NombreBitmap));
finally
Icon.Free;
oBitmap.Free;
oBitmap2.Free;
screen.cursor := crDefault;
end; {main begin}
end; {llenaboton}
procedure LimpiaBoton(boton: TSpeedButton);
var
oBitmap: TBitmap;
rBoton: TRect;
begin
try
{Configuara el tamano del bitmap como el del icono y el del segundo
bitmap con el tamano del boton}
oBitmap := TBitMap.create;
oBitmap.Width := boton.Width - 4;
oBitmap.Height := boton.Height - 4;
Boton.Glyph := oBitmap;
finally
oBitmap.Free;
end; {main begin}
end; {limpiaboton}
end.
|
|