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

Вниз

Корявая загрузка XP-шных иконок.   Найти похожие ветки 

 
Митяй2   (2004-02-10 19:55) [0]

Мастера, подскажите. Как сделать, чтобы XP-шные иконки загружались (прорисовывались)
правильно. Есть следующая функция.


function LoadIconByPathToIcon(Path: string;num_icon:integer): integer;
var IconLarge,IconSmall:HIcon;
LIcon:TIcon;
begin
LIcon:=TIcon.Create;
result:=-1;
try
ExtractIconEx(PChar(Path), num_icon,IconLarge,IconSmall,1);
// LIcon.Handle:=IconLarge;
LIcon.Handle:=IconSmall;

// добавляем иконку и возвращаем её номер в списке.
result:=Form1.ImageList1.AddIcon(LIcon);
finally
LIcon.Free;
end;
end;


А по щелчку на кнопке, загружаем иконку и прорисовываю на канве формы.


procedure TForm1.Button1Click(Sender: TObject);
var icon:TIcon;
begin
// Загружаем иконку.
LoadIconByPathToIcon("D:\WINDOWS\SYSTEM32\calc.exe",0);
icon:=TIcon.Create;
// Получаем иконку.
ImageList1.GetIcon(0,icon);
// Прорисовываем.
Form1.Canvas.Draw(50,50,icon);
icon.Free;
end;


И вокруг иконки получается черный ореол.
Если конечно, у ImageList1 свойство BcColor поставить равным цвету формы, то всё нормально. НО! А если мне нужно отобразить 1000 иконок и цвет формы может меняться, то каждый раз их заново записывать в ImageList1! Нет это не то.

Подскажите как быть с XP-шными иконками, может есть какая-нибудь другая функция вместо ExtractIconEx, например ExtractIconExExExExExExExExExEx :-))

Очень благодарен за помощь. Дмитрий.


 
Семен Сорокин ©   (2004-02-10 20:05) [1]

может TIcon.Transparent := true поможет перед в ставкой в ImageList.


 
Митяй2   (2004-02-10 20:09) [2]

Нет, тут дело в новом стиле иконок XP


 
Митяй2   (2004-02-10 22:14) [3]

Поставил на форму CheckListBox1

Прорисовываю её сам (У CheckListBox1 свойство Style=lbOwnerDrawVariable):


procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with Control as TCheckListBox, Canvas do
Begin
FillRect(Rect); // Залили фон.
Form1.ImageList1.Draw(Canvas,Rect.Left+20,Rect.Top+1,0); // Вывели иконку, которую
// предварительно загрузили, щелкнув по кнопке.
TextOut(Rect.Left+40,Rect.Top,Items[index]); // И текст написали.
End;

end;


Иконка прорисовывается не нормально, смотрите здесь:

http://rus.altnet.ru/icon.png

А здесь исходник на Delphi 7.0 (всего 4 Kb):

http://rus.altnet.ru/icon.zip

Как решить проблему? Подскажите...



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

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

Наверх




Память: 0.47 MB
Время: 0.037 c
1-79827
first_aid
2004-02-11 09:22
2004.02.25
TListView, OnCusnomDrawSubItem, границы области рисования?


1-79880
Тфьу
2004-02-10 11:29
2004.02.25
Как создать свою кнопку в тулбаре виндоуса (Не трее, а тулбаре!)


3-79542
GSVSerg
2004-02-03 11:55
2004.02.25
Новая запись в НД


1-79766
Excel
2004-02-11 10:18
2004.02.25
Как программно скрыть столбцы в Excel ?


3-79610
Zilog
2004-02-01 17:52
2004.02.25
Создание алиаса и таблицы