как сохранить извлеченную иконку в delphi - PullRequest
1 голос
/ 20 марта 2010

Я пытаюсь сделать иконку экстрактором

Мне удалось получить иконку для image1.picture.icon, она выглядит так же, как оригинальная иконка файла, но когда я пытаюсь сохранить (iamge1.picture.icon.savetofile (c: \ imahe.ico))

это не экономия как есть, это экономия с меньшим количеством цветов и выглядит уродливо

Может кто-нибудь, пожалуйста, скажите мне, что я делаю не так?

вот мой код

procedure TForm1.Button1Click(Sender: TObject); 
begin 
 OpenDialog1.Filter:='All files |*.*'; 
 OpenDialog1.Title:='Please select file'; 
 if OpenDialog1.Execute then 
 Edit1.Text:=OpenDialog1.FileName; 
end;

procedure TForm1.Button3Click(Sender: TObject); 
var   
szFileName: string;   
Icon:       TIcon;   
SHInfo: TSHFileInfo; 
begin

  szFileName := Edit1.Text;
  if FileExists(Edit1.Text) then   
  begin
      Icon := TIcon.Create;
      SHGetFileInfo(PChar(szFileName), 0, SHInfo, SizeOf(SHInfo), SHGFI_ICON);
      Icon.Handle := SHInfo.hIcon;
      Image1.Picture.Icon := Icon;
      end;  
end;

procedure TForm1.Button2Click(Sender: TObject);  
begin  
  if SaveDialog1.Execute then  
   begin   
   Image1.Picture.Icon.SaveToFile(SaveDialog1.FileName+'.ico'); 
   ShowMessage('done');  
   end;  
end;

1 Ответ

1 голос
/ 20 марта 2010

функция SHGetFileInfo имеет несколько флагов для получения значков разных размеров.

const
  SHIL_LARGE     = $00;  //The image size is normally 32x32 pixels. However, if the Use large icons option is selected from the Effects section of the Appearance tab in Display Properties, the image is 48x48 pixels.
  SHIL_SMALL     = $01;  //These images are the Shell standard small icon size of 16x16, but the size can be customized by the user.
  SHIL_EXTRALARGE= $02;  //These images are the Shell standard extra-large icon size. This is typically 48x48, but the size can be customized by the user.
  SHIL_SYSSMALL  = $03;  //These images are the size specified by GetSystemMetrics called with SM_CXSMICON and GetSystemMetrics called with SM_CYSMICON.
  SHIL_JUMBO     = $04;  //Windows Vista and later. The image is normally 256x256 pixels.

Вы можете использовать эти флаги таким образом

SHGetFileInfo(PChar(szFileName), 0, SHInfo, SizeOf(SHInfo), SHGFI_ICON OR  SHIL_LARGE );

для получения дополнительной информации вы можете проверить ответ на этот вопрос.

Можно ли получить значки 48x48 или 64x64 в оболочке Vista

...