Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TImageList.GetIcon глючит... Как поправить или чем заменить??? 
V
    Опции темы
aktuba
  Дата 2.11.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Такая проблема: в программе происходит проверка каталога на наличие иконок и добавление этих иконок в TImageList:

Код

  i := 1;
  if FindFirst(path + '*.ico', faAnyFile, SearchRec) = 0 then
    repeat
      Inc(i);
      lIcon := TIcon.Create;
      try
       lIcon.LoadFromFile(path + SearchRec.Name);
        AList.AddIcon(lIcon);
      finally
       lIcon.Free;
      end;
    until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);


после этого происходит отрисовка иконок из TImageList в TDrawGrid:

Код

il.Draw(dr.Canvas, Rect.Left + 3, Rect.Top + 3, IndexIcon, dr.Enabled);


далее, мне необходимо сохранить выбранную иконку в файл. делаю следующее:

Код

...
ilVT.GetIcon(lData^.IconIndex, lIcon);
SaveVTNode(lData^, lIcon, lMemStream);
...

procedure SaveVTNode(AData: TDataNode; AIcon: TIcon; AStream: TMemoryStream);
var
  Writer: TWriter;
  size, Index: Integer;
begin
  ...
  // Сохранение своих данных в поток
  ...
  SaveIcon(AIcon, AStream);
end;

...

procedure SaveIcon(AIcon: TIcon; AStream: TMemoryStream);
var
  size: Integer;
begin
  if Assigned(AIcon) then
    begin
      size := 1;
      AStream.Write(size, SizeOf(size));
    AIcon.SaveToStream(AStream);
    end else
     begin
       size := 0;
        AStream.Write(size, SizeOf(size));
      end;
end;


ИКОНКА СОХРАНЯЕТСЯ НЕ ПРАВИЛЬНО!!! Испорчены палитра и прозрачность...
Опытным путем проверенно, что виновата функция TImageList.GetIcon. Проверял так:

Код

lIcon.LoadFromFile(path + SearchRec.Name);
t := AList.AddIcon(lIcon);
AList.GetIcon(t, lIcon);
lIcon.SaveToFile(lFileName);


Уже так иконка сохраняется неправильно.

Как это исправить или что можно использовать вместо TImageList?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Dynamic
Дата 2.11.2006, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Цитата(aktuba @  2.11.2006,  01:04 Найти цитируемый пост)
Такая проблема: в программе происходит проверка каталога на наличие иконок и добавление этих иконок в TImageList:


Цитата(aktuba @  2.11.2006,  01:04 Найти цитируемый пост)
далее, мне необходимо сохранить выбранную иконку в файл

дык, запоминай имя файла и просто копируй его

Цитата(aktuba @  2.11.2006,  01:04 Найти цитируемый пост)
Как это исправить или что можно использовать вместо TImageList? 


исправить вряд ли, а вместо него можно обычный TList + TBitmap


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
aktuba
Дата 2.11.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Нет, копировать имя не подходит, т.к. в случае удаления иконки из каталога иконка пропадет и из программы. Именно поэтому я сохраняю иконку в файл со своими данными. А TList+TBitmap - немного хлопотный путь. Нашел следующее решение: перед помещением иконки в TImageList преобразую иконку в TBitmap, а уже TBitmap помещаю в TImageList. Таким образом решил проблему с палитрой, но появилась проблема с прозрачностью...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Sansa
Дата 2.11.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



Возможно, тебе подойдет библиотека Graphics Ex. Умеет читать и записывать большое количество типов файлов, в том числе и с поддержкой прозрачности
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.