Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.30;
Скачать: CL | DM;

Вниз

Иконка зарегистрированного Виндой файла   Найти похожие ветки 

 
DiHLoS ©   (2002-12-13 11:07) [0]

Получаю иконку 32х32, а нужно 16х16. Использую следующий код:


var
Ico: TIcon;
IconNum:Word;
...
Ico:=TIcon.Create;
Ico.Handle:=ExtractAssociatedIcon(Handle,
PChar("c:\windows\notepad.exe"){к примеру}, IconNum);
Canvas.Draw(Left, Top, Ico);
Ico.Free;


Что нужно изменить? Помогите, плиз.


 
DiHLoS ©   (2002-12-13 13:45) [1]

Сам задал вопрос, сам и ответил:)))
У меня получилось через BitMap :

procedure TForm1.Button1Click(Sender: TObject);
var
Ico : TIcon;
Bmp : TBitmap;
IconNum: Word;
begin
Ico := TIcon.Create;
Ico.Handle := ExtractAssociatedIcon(Handle,
PChar({путь к файлу}),IconNum);
Bmp := TBitmap.Create;
Bmp.Height := Ico.Height;
Bmp.Width := Ico.Width;
Bmp.Canvas.Draw(0, 0, Ico);
Form1.Canvas.StretchDraw(Rect(0,0,16,16),Bmp);
Bmp.Free;
Ico.Free;
end;


 
Игорь Шевченко ©   (2002-12-13 14:10) [2]

Вместо
Bmp := TBitmap.Create;
Bmp.Height := Ico.Height;
Bmp.Width := Ico.Width;
Bmp.Canvas.Draw(0, 0, Ico);

Можно
DrawIconEx(Form1.Canvas.Handle, 0, 0, Ico.Handle,
16,16, 0, 0, DI_NORMAL);


 
DiHLoS ©   (2002-12-13 17:25) [3]

Ну можно и так, конечно :))

А вообще была идея для любого файла показывать его иконку, но
ExtractAssociatedIcon дает иконку 32х32... я понимаю, ее можно уменьшить до 16х16, но в Винде же есть эти иконки!!! и они различаются (см. Проводник в режиме "список" и "крупные иконки")
Как доставать именно иконки 16х16 ?

Заранее спасибо!


 
Игорь Шевченко ©   (2002-12-13 17:47) [4]

DiHLoS © (13.12.02 17:25)

Проводник их так и рисует...Через DrawIconEx


 
DiHLoS ©   (2002-12-13 19:54) [5]

Ну не спорю, что он так рисует...

Как нарисовать, это другой вопрос в принципе.:-)
Как получить эту иконку 16х16 (оригинальную, а не уменьшая 32х32).
Попробуйте извлечь иконки, например, из WinWord.exe - их там немеряно: и 32х32 и 16х16...

Как получить желаемое?:-(


 
Song ©   (2002-12-13 20:25) [6]

Проводник рисует через DrawIconEx(), но иконку для рисования получает не с помощью ExtractAssociatedIcon(), а через ShGetFileInfo(). Также эту иконку можно получить вручную, через реестр.


 
Kirill45   (2002-12-14 04:02) [7]

Ну а попробуй так :

Ico := ExtractIconEx(PChar(имя твоего файла),-1,IcoL,IcoS,X);
// Ico - сколько иконок в файле

for X := 0 to Ico do
begin
My_Icon.Handle := ExtractIcon(hInstance, PChar(имя твоего файла),X);
ImageList1.AddIcon(My_Icon);
// ну а по Handle показываешь где тебе надо
end;
посмотри описание ExtractIconEx там можно выбрать 32/16


 
Song ©   (2002-12-14 11:03) [8]

2Kirill45 (14.12.02 04:02)
ExtractIconEx() это будет не та иконка.



Страницы: 1 вся ветка

Текущий архив: 2003.01.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
6-96930
mdaemon
2002-12-04 13:40
2003.01.30
Как зделать чтобы прога исполнялась в определённое время?


4-97105
feniks1
2002-12-14 17:39
2003.01.30
как быть без компонентов


1-96681
harismatik
2003-01-21 20:42
2003.01.30
Как запретить ресайз


14-96952
Anatoly Podgoretsky
2003-01-12 13:22
2003.01.30
Именинники 12 января


1-96646
denis24
2003-01-21 12:29
2003.01.30
анимированный *.gif