unit  Procs;
interface
uses
 SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,  Controls,
 Forms, StdCtrls, Buttons, ExtCtrls, ShellAPI;
 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.