Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизКорявая загрузка 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c