|
Вопрос # 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
- then
- begin
- MessageBeep(40000);
-
- exit ;
- end;
- image1.Picture.Icon.Handle := GetFileIcon(PChar(Edit1.Text));
- end;
-
- procedure TForm1.Button2Click(Sender: TObject);
- var
- FileName: String;
- begin
- if SavePictureDialog1.Execute = True then
- begin
- try
- FileName := SavePictureDialog1.FileName;
- Form1.Image1.Picture.SaveToFile(FileName);
- finally
- end;
- 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
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|