Главная страница
    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.45 MB
Время: 0.03 c
1-79902
Dr.Karter
2004-02-09 14:38
2004.02.25
Копирование папки


14-80183
Начинающий веб-дизайнер
2004-01-30 11:06
2004.02.25
Вопрос в службу поддержки программы.


1-79910
Alexxxx
2004-02-09 17:38
2004.02.25
Delphi & XML


7-80318
Borys
2003-12-05 03:28
2004.02.25
Эквивалент WindowProc (C++) в Delphi?


9-79529
Jenaxx
2003-08-09 12:19
2004.02.25
Я скачал из Samples исходник Quest это типа рпг какой то а она...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский