Главная страница
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.024 c
14-80172
Mihey
2004-01-31 22:55
2004.02.25
Вопрос на засыпку


1-79718
Aligator
2004-02-12 17:12
2004.02.25
Организация запуска программы по рассписанию (напр. раз в месяц)


1-79869
WG
2004-02-10 14:50
2004.02.25
Как спрятать приложение в трэй (к часам ?)


11-79685
Dimaxx
2003-06-03 00:06
2004.02.25
Как использовать битмапы у пунктов в MainMenu?


1-79745
jen
2004-02-12 11:28
2004.02.25
Опять проблема со СТРОКАМИ, чтение