Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-80266
Clift
2004-02-04 13:33
2004.02.25
Просто так


14-80296
vopros
2004-02-03 11:44
2004.02.25
Я не понимаю Локомотив. Зачем брать Сычева было?


14-80179
Palladin
2004-01-31 20:33
2004.02.25
Enum фирм использующих Delphi как основной инструмент разработки


14-80295
kaif
2004-02-02 22:45
2004.02.25
Вопрос модераторам


1-79696
Grinder
2004-02-12 18:44
2004.02.25
кто скажет грамотный алгоритм





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский