Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];

Вниз

Установка иконки программы   Найти похожие ветки 

 
Yuri Btr ©   (2005-09-09 17:07) [0]

Ув. мастера, я вызываю примерно 2 раза в сек. функцию смены иконки приложения (наподобие как в The Bat! при непрочитанных сообщениях), в ней написано:

ImageList1.GetIcon(tempIconIndex,Application.Icon);
ImageList1.GetIcon(0,MainForm.Icon);

ну и затем tempIconIndex меняется на следующий в списке.
Так вот все работает, но MemProof показывает что есть ошибки именно при выполнении приведенных двух строк, как раз по ошибке
на строку.
На первой строке - "DestroyIcon - Неверный дескриптор"
На второй строке - "Atempt to free unexisting resource"
или "Unknown Win32 Error"
Вопрос, как можно без этих ошибок установить приложению и главной форме иконку в RunTime?
Заранее благодарен


 
Eraser ©   (2005-09-09 17:52) [1]

Yuri Btr ©   (09.09.05 17:07)

Смотрим реализацию метода GetIcon:
procedure TCustomImageList.GetIcon(Index: Integer; Image: TIcon);
begin
 GetIcon(Index, Image, DrawingStyle, ImageType);
end;

далее вызывется

procedure TCustomImageList.GetIcon(Index: Integer; Image: TIcon;
 ADrawingStyle: TDrawingStyle; AImageType: TImageType);
begin
 if (Image <> nil) and HandleAllocated then
   Image.Handle := ImageList_GetIcon(Handle, Index,
     DrawingStyles[ADrawingStyle] or Images[AImageType]);
end;


Обрати внимение на if (Image <> nil)...

соответственно скорее всего проблемы с tempIconIndex,Application.Icon. Необходимо сначала создать объект-иконку.


 
Yuri Btr ©   (2005-09-09 18:04) [2]

to Eraser ©
т. е. нужно сначала создать в процедуре
tempIcon:TIcon, затем засунуть этот tempIcon в GetIcon,
и присвоить получившуюся иконку Application.Icon через Assign
затем освободить tempIcon, так ?


 
Eraser ©   (2005-09-09 18:15) [3]

Yuri Btr ©   (09.09.05 18:04) [2]

Угу.


 
Yuri Btr ©   (2005-09-09 18:20) [4]

Не помогает, теперь ругается на Assign

var
tempIcon:TIcon;
begin
try
 tempIcon:=TIcon.Create;
 IL2.GetIcon(tempIconIndex,tempIcon);
 Application.Icon.Assign(tempIcon);
finally
 tempIcon.Free;
end;
end;


 
Yuri Btr ©   (2005-09-09 18:38) [5]

Привожу дословно ...

в     Application.Icon.Assign(tempIcon);
есть  FImage.Release;
в нем FreeHandle;
в нем строчка
if FHandle <> 0 then DestroyIcon(FHandle);
выдает ошибку на DestroyIcon(FHandle),
говорит "Unknown Win32 Error"

При трассировке, получается что первое присвоение проходит без ошибки, так как в FImage.Release при проверке if FRefCount = 0
значение FRefCount = 1, и идет присвоение иконки без использования FreeHandle, но все последующие вызовы проходят "нормально", при Assigne у них FRefCount = 0 и соответственно проходит далее DestroyIcon, с последующей ошибкой...

Я так понимаю, что где то ещё используется иконка Application.Icon - ведь FRefCount - это счетчик обращений?


 
Eraser ©   (2005-09-09 23:05) [6]

Yuri Btr ©   (09.09.05 18:20) [4]

Assign должен работать!
Что за ошибку пишет?



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

Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
1-1125900752
kMax
2005-09-05 10:12
2005.10.02
Скопировать файл с заменой


1-1126107297
Виктор_В.С
2005-09-07 19:34
2005.10.02
Очистить String от символов конец строки


1-1126332121
Геннадий
2005-09-10 10:02
2005.10.02
Отладка модуля проекта, входящего в группу проектов


1-1126274051
Maverick
2005-09-09 17:54
2005.10.02
шифрование данных


1-1126129760
312Kbps
2005-09-08 01:49
2005.10.02
SetWallpaper - помогите вставить картинку !!!





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