| 
| 
 | Вопрос # 3 063/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Скажите, пожалуйста, почему у меня некоторые иконки  сохраняются, но при этом  теряют свой цвет и не совпадают с оригиналами?
 И как можно это исправить?
 Заранее благодарен !
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ShellAPI, StdCtrls, ExtCtrls, ExtDlgs; type  TForm1 = class(TForm)    Button1: TButton;    Button2: TButton;    Image1: TImage;    SavePictureDialog1: TSavePictureDialog;    Edit1: TEdit;    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1; implementation function GetLongPathName(lpszLongPath: PChar; lpszShortPath: PChar; cchBuffer: DWORD): DWORD; stdcall; external kernel32 name 'GetLongPathNameA';{$R *.dfm} function GetFileIcon(filename: String; small: Boolean = False ): HICON;var  info: SHFILEINFO;  flags: Cardinal;begin  flags := SHGFI_ICON;  ZeroMemory(Addr(info), SizeOf(info));   SHGetFileInfo(PAnsiChar(filename), 0, info, SizeOf(info), flags);  GetFileIcon := info.hIcon;end;procedure TForm1.Button1Click(Sender: TObject);begin Edit1.SetFocus ;image1.Picture.Icon.Handle := GetFileIcon(PChar(Edit1.Text)); if Edit1.GetTextLen = 0 thenbeginMessageBeep(40000); exit ;end;image1.Picture.Icon.Handle := GetFileIcon(PChar(Edit1.Text));end; procedure TForm1.Button2Click(Sender: TObject);varFileName: String;beginif SavePictureDialog1.Execute = True thenbegin  tryFileName := SavePictureDialog1.FileName;Form1.Image1.Picture.SaveToFile(FileName);  finallyend; end;  end;end. 
|  |   Вопрос задал: Kyran29 (статус: Посетитель)Вопрос отправлен: 3 августа 2009, 23:00
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, Kyran29!ico формат очень интересный. грубо говоря, это массив иконок разных размеров.
 Указанный выше код сохраняет только одну иконку с всей пачки и преобразовывает его формат, совместимый с "диспееем".
 Во вторых, нужно помнить, что тот же проводник, при отображении иконки выбирает удну с доступных, иногда по ведомымим ему одному алгоритмам.
 Поэтому, лучше использовать класс TIcon напрямую. что то в виде
 
 var ico:TICon;
 
ico := TIcon.Create(nil);
Ico.Handle := GetFileIcon(PChar(Edit1.Text));
ico.SaveToFile('имя');
ico.free;и во вторых, лучше поискать хороший редактор иконок.
 Если иконку хочеться отображать на форме, то лучше загрузить её туда паралельно.
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 3 августа 2009, 23:10
 Оценка за ответ: 1
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |