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

Вниз

получение иконки не работает   Найти похожие ветки 

 
Мыш ©   (2004-05-09 01:59) [0]

Вот сделал процедурку, да что -то в ней не так. Если пробовать заполучить иконку на image, все ок. Но если сделать цикл, в котором загружать в один и тот же image на форме иконки для разных файлов - нифига не работает. И еще вопрос: мелкие иконки, которые мы получаем в процедуре ShGetFileInfo они откуда берутся? Преобразованием больших или это отдельная песня?
Вот она, сцука:

procedure GetIcon(Bitmap: Tbitmap; FileName: string; FillColor:TColor; LargeIcon:boolean);
var
fi: TSHFileInfo;
SHGFI_IconSize:word;
IconSize:integer;
TmpImg:TImage;
begin
TmpImg:=TImage.Create(nil);
if LargeIcon then
       begin
       IconSize:=32;
       SHGFI_IconSize:=SHGFI_ICON;
       end
       else
       begin
       IconSize:=16;
       SHGFI_IconSize:=SHGFI_SmallICON;
       end;
TmpImg.Width:=IconSize;
TmpImg.Height:=IconSize;

ShGetFileInfo(pchar(filename), 0, fi, SizeOf(fi),
   SHGFI_IconSize or SHGFI_SYSICONINDEX or SHGFI_TYPENAME);
TmpImg.Picture.Icon.Handle:=(fi.hIcon);

bitmap.Canvas.Pen.Color:=FillColor;
bitmap.Canvas.brush.Color:=FillColor;
bitmap.Canvas.Rectangle(0,0,IconSize,IconSize);

bitmap.Canvas.Draw(0,0,TmpImg.Picture.Icon);
TmpImg.Free;
end;

Вот такой вызов работает:
GetIcon(imgicon.Picture.Bitmap,путь,clwhite,true);

а вот так нет:
i:=0;
while i<linkstorage.LinkList.Count do
       begin
       plink:=linkstorage.LinkList[i];
       GetIcon(image5.Picture.Bitmap,plink^.FilePath (путь),clwhite,true);
       sleep(50)   ;
       application.ProcessMessages;
       inc(i);
       end;


 
TUser ©   (2004-05-09 05:55) [1]


> TmpImg:=TImage.Create(nil);

Не по сабжу, конечно, но  на мой взгляд создавать временные TImage каждые 50 мс - это уж слишком. TImage - он для показывания картинок, а не для хранения в памяти. А так есть TBitMap, TIcon и пр.


 
Cobalt ©   (2004-05-09 11:12) [2]

Мыш ©  
а как должно работать (по твоему)?


 
Мыш ©   (2004-05-09 14:33) [3]

TUser, согласен, надо будет переделать. Но это же не влияет на работоспособность.
>а как должно работать (по твоему)?
На image5 должны по очереди смениться все иконки для файлов, пути которых хранятся в списке linkstorage.LinkList


 
DeadMeat ©   (2004-05-09 17:32) [4]

> Мыш
А ты попробуй в начале очищать BITMAP, чем-нибудь вроде FillRect или PatBlt


 
мыш ©   (2004-05-09 19:06) [5]

пробовал, не помогает.


 
Мыш ©   (2004-05-10 05:37) [6]

может кто у себя процедурку попробует?


 
Bez   (2004-05-11 14:13) [7]

А сразу в Bitmap нельзя иконки загружать? Не пробывал так?



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

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

Наверх




Память: 0.48 MB
Время: 0.024 c
3-1085388083
NewUser
2004-05-24 12:41
2004.06.13
Система безопасности в IB6


14-1085421821
Piter
2004-05-24 22:03
2004.06.13
Доступ в FIDO


3-1085111806
Илья
2004-05-21 07:56
2004.06.13
работа с кпк


14-1085167911
European
2004-05-21 23:31
2004.06.13
Учебник по VHDL


8-1080807007
Videobaton
2004-04-01 12:10
2004.06.13
Работа с видеокртой