Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Преобразование иконок в Gliph-ы


Автор: Poseidon 19.5.2005, 01:44
Вот небольшой пример того, как можно загрузить иконку, содержащуюся в файле 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. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)