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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сравнить две переменные типа TIcon 
:(
    Опции темы
artem1987
Дата 30.8.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



есть ли возможность сравнивать - переменные типа TIcon?
хэндлы естественно у них разные!
--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Тьма
Дата 30.8.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 4



первое, что пришло в голову: попробуй сделать Icon.SaveToStream(SomeStream) для первой и для второй (естественно в разные Стримы) и сравнить их.

ИМХО это тебе поможет http://forum.vingrad.ru/index.php?showtopic=109140

Это сообщение отредактировал(а) Тьма - 30.8.2006, 17:52


--------------------
Vir magni ingenii                 
PM MAIL ICQ   Вверх
Alexeis
Дата 30.8.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

Репутация: 55
Всего: 459



Код

var
  f1, f2 : tMemoryStream;
begin
  f1 := tMemoryStream.create;
  f2 := tMemoryStream.create;
  incon1.savetostream(f1);
  incon2.savetostream(f2);
  if CompareMem(f1.memory, f2.memory)
  then
   ..........
  f1.free;
  f2.free;
end;


Добавлено @ 17:54 
Цитата(Тьма @  30.8.2006,  17:52 Найти цитируемый пост)
первое, что пришло в голову
 Ага и мне тоже smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
artem1987
Дата 30.8.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



наверное то что мне нужно но возникает другая задача
я вот получаю иконки из регистра ,прог ассоциированых с типом файла и те иконки что в винде исп для незнакомых типов хочу заменить на свои короче надо как то определить что это именно та иконка а потом наверное ост с ней сравнивать вышеуказаным методом...
только как?
--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Alexeis
Дата 30.8.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

Репутация: 55
Всего: 459



Цитата(artem1987 @  30.8.2006,  18:16 Найти цитируемый пост)
только как?

Так это еще поще, в реестре обычно указывается путь к иконке и ее номер. Значит нужно просто проверять пути, если путь к иконке не указан совсем и не указана программа для открытия, значит брать себе расширение.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
artem1987
Дата 30.8.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



я получаю переменную типа HIcon где там искать?
--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Alexeis
Дата 30.8.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

Репутация: 55
Всего: 459



Цитата(artem1987 @  30.8.2006,  18:38 Найти цитируемый пост)
я получаю переменную типа HIcon где там искать? 

Откуда??!!


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
artem1987
Дата 31.8.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



отсюда
Код

function GetAssociatedIcon(const Extension: string; ASmall: Boolean): HIcon;
var
   Info: TSHFileInfo;
   Flags: Cardinal;
begin
   if ASmall then
     Flags := SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES
   else
     Flags := SHGFI_ICON or SHGFI_LARGEICON or SHGFI_USEFILEATTRIBUTES;

   SHGetFileInfo(PChar(Extension), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo),
Flags);
   Result := Info.hIcon;
end;

--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Snowy
Дата 31.8.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Вот, набросал код, но нужно проверить на других машинах.
На моей машине дефолтная икона под номером 3.
Код

function DefaultIcon: HIcon;
var
  h: THandle;
  FileInfo : TSHFileInfo;
begin
  h := SHGetFileInfo('', 0, FileInfo, Sizeof(FileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  result := ImageList_GetIcon(h, 3, ILD_TRANSPARENT); // 3-я икона - дефолтная 'NoIcon'
end;


Добавлено @ 10:47 
P.S. Не сравнивать по хэндлу! Хэндл, полученный по вышеприведённому коду будет отличаться!
PM MAIL   Вверх
artem1987
Дата 31.8.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



'', 0, FileInfo, Sizeof(FileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON-->это параметры для иконки unknown file?
напиши по коменту на обе строки пожалуста
а с хэндлом понятно,в этом и есть его фишка...наверное.
--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Snowy
Дата 31.8.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Нет, эти параметры для получения системного ImageLista.
Потом берём из него икону с индексом 3.
PM MAIL   Вверх
artem1987
Дата 31.8.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



получается в имадж листе должна лежать структура типа TIcon где 
TIcon.Handle : HIcon . не так?причем по моему коду получаем хэндл иконки для каждого приходящего экстенжон но перед эти надо создать структуру типа TIcon
Код

xIcon:=TIcon.Create;

потом присвоить туда хэндл нужной нам для работы иконки
Код

xIcon.Handle:=GetAssociatedIcon(..extension..,true);

а потом уже xIcon можно пихать в любой imagelist  чтоб потом по индексу использовать, например в VT
поправь, если я глючю.
а че тогда с NOIcon?и ImageList_GetIcon?
--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Snowy
Дата 31.8.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Не путай виндовый ImageList и дельфийский.
Также иконку виндовую и дельфийский TIcon.
Для работы с иконой на уровне дельфи мы и создаём объект TIcon.
xIcon.Handle:=GetAssociatedIcon(..extension..,true);
Это по сути хитрый ход, который грузит системную икону в дельфийский класс.

Цитата(artem1987 @  31.8.2006,  12:43 Найти цитируемый пост)
а че тогда с NOIcon?и ImageList_GetIcon?
NoIcon - это я её так назвал, потому что это дефолтная икона для файлов, не имеющих не своей, ни ассоциированной иконы.
А ImageList_GetIcon - это апишная функция для получения хэндла иконы из системного имаджлиста.
Опять же повторюсь - системный имаджлист и системная икона - не то же самое, что дельфийские аналоги.

Добавлено @ 12:56 
Цитата(artem1987 @  31.8.2006,  12:43 Найти цитируемый пост)
получается в имадж листе должна лежать структура типа TIcon где 
TIcon - это дельфийский класс. Он не может использоваться виндой.
У винды работа построена на хэндлах, а не на классах.
Пусть тебя не обманывает строка xIcon.Handle:=GetAssociatedIcon
Это явный пример инкапсуляции.
На самом деле, физически нет никакого присваивания. Реально происходит загрузка иконки, а не запоминание её хэндла.
PM MAIL   Вверх
artem1987
Дата 31.8.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

NoIcon - это я её так назвал, потому что это дефолтная икона для файлов, не имеющих не своей, ни ассоциированной иконы.

это я понял ,  я уже 'шустрый', имел в виду другое как мне е| сравнивать с моими делфийскими или HIcon можно сравнивать?
Цитата

А ImageList_GetIcon - это апишная функция для получения хэндла иконы из системного имаджлиста.

ааа... у меня не работает, думал твоя , че приподключить надо не подскажешь?
--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Snowy
Дата 31.8.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Как сравнивать - тебе уже показали.
А не работает,вероятно потому, что не подключены CommCtrl или ShellAPI.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

FAQ раздела лежит здесь!


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

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


 




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


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

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