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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> иконка многостраничная в TForm.Icon, иконка многостраничная в TForm.Icon 
V
    Опции темы
pseud
Дата 18.5.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



Предисловие:
Приложение многооконное (не MDI). Каждая дочерняя форма (немодальная) отображается с кнопкой на таскбаре Windows. Кому интересно - это делается так:
Код

procedure TBaseEntityForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  Params.WndParent := GetDesktopWindow;
end;

Соответственно к каждой такой форме можно достучаться и через Alt+Tab.

Проблема
1. Иконки окон в винде (те что в заголовке окна) - размера 16x16.
    Иконки в окне Alt+Tab - размера 32x32.
2. Можно в свойство TForm.Icon пихануть иконку 16x16. Тогда:
   - в заголовке окна красивая 16x16 иконка
   - в окне Alt+Tab - некрасиво растянутая она же до 32x32.
3. Можно в свойство TForm.Icon пихануть иконку 32x32. Тогда:
   - в окне Alt+Tab - красивая 32x32 икнока.
   - в заголовке окна - некрасиво сжатая она же до 16x16.

Попытка решения
Создаю многостраничную иконку, которая содержит 2 иконки: 16x16 и 32x32.
Подсовываю ее в TForm.Icon
Результат - как с иконкой 16x16.

Кстати
В MS Office Outlook 2003 это работает стабильно. Т.е. все окна используют таскбар, в заголовке отображают маленькую иконку, а в Alt+Tab - 32x32 разукрашку.

Посоветуйте
Посоветуйте плиз, как запихать в форму многостраничную икону и чтоб она стабильно отдавала в заголовок 16х16, а в Alt+Tab - 32х32.
.
PM MAIL   Вверх
drkot
Дата 18.5.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Не совсем понятно, что значит многостраничная (в моем понимании это иконка для анимации)

А так делаеш все правильно, свозможно формат иконок не соответствует требованиям винды. Вот она и подбирает ту которая лучше всего подходит.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
pseud
Дата 18.5.2007, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



многостраничная - значит в ней несколько форматов
32x32 (32 бита)
24x24 (32 бита)
16x16 (32 бита)
32x32 (256 цветов)
24x24 (256 цветов)
16x16 (256 цветов)
и т.д.

вобщем 
от 16x16 (16 цветов)
до 256х256 (32 бита)




--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Alexeis
Дата 18.5.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(pseud @  18.5.2007,  15:02 Найти цитируемый пост)
Подсовываю ее в TForm.Icon

  Думаю это вилы :( . На самом деле иконка в файле и памяти это разные вещи. В файле она может быть многостраничной, но при загрузке в память TIcon конвертирует одну из иконок файла в стандартный для винды формат. Короче попросту говоря из нее создаются 2 битмапа совместимых с устройством вывода, для современных видюх и стандартных настроек это обычно размер 32х32 32 бита на цвет. Делается это для оптимизации вывода графики. Если явно указать что нужна 16 х 16 то создаст 16 х 16 32 бита на цвет, но только одну. Виндозный объект HICOH чьей надстройкой является TIcon это только одна иконка.
   MS Office Outlook 2003 по всей видимости создает 2е иконки, одну назначает главному окну, другую заголовку, другого решения я не вижу.

Это сообщение отредактировал(а) Alexeis - 18.5.2007, 18:20


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

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

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


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



Цитата

Alexeis
MS Office Outlook 2003 по всей видимости создает 2е иконки, одну назначает главному окну, другую заголовку, другого решения я не вижу.


Если б было так просто...
Да. Я могу подсунуть приложению одну икону, а любому окну другую - это не поможет.
А в Оффисе каждый объект (напр., Контакт) создает отдельное окно (и это именно дочернее окно приложения), имеющее:
1. Кнопку на таскбаре винды
2. 16х16 (НЕуменшенную 32х32) в заголовке икону
3. 32х32 (НЕувеличенную 16х16) икону в окне Alt+Tab.

... и это НЕ главное окно, которое действительно в заголовке может иметь свою 16х16 икону, а в Alt+Tab - отображает 32х32 икноу приложения.

PM MAIL   Вверх
Alexeis
Дата 21.5.2007, 12:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата

Class Icons
A class icon is a picture that the system uses to represent a window of a particular class. An application can have two class icons — one large and one small. The system displays a window's large class icon in the task-switch window that appears when the user presses ALT+TAB, and in the large icon views of the task bar and explorer. The small class icon appears in a window's title bar and in the small icon views of the task bar and explorer. 

To assign a large and small icon to a window class, specify the handles of the icons in the hIcon and hIconSm members of the WNDCLASSEX structure. The icon dimensions must conform to required dimensions for large and small class icons. For a large class icon, you can determine the required dimensions by specifying the SM_CXICON and SM_CYICON values in a call to the GetSystemMetrics function. For a small class icon, specify the SM_CXSMICON and SM_CYSMICON values. For information, see Icons. 





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

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

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


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



Я уж не ожидал, что проблема решится. Ан нет!

Спасибо Alexeis, что обратился к хелпу и нашел этот чудный пост (см.выше).

Благодаря этому посту и небольшому изучению исходников вот результат (для интересующихся):
Код

  { 
  для примера:
  допустим, у вас на форме есть две картинки (imgIconSmall, imgIconBig), в которых открыты иконки (*.ico)
  в первой - икнка 16х16, во второй - соответсвенно 32х32
  думаю, этот код можно писать в любом месте (в переопределенном методе CreateWnd, в OnCreate, в OnShow)
  необходимо подключить (если не подключены) модули Messages и Windows
  }

  SendMessage({ВашаФорма.}Handle, WM_SETICON, ICON_SMALL, imgIconSmall.Icon.Handle);
  SendMessage({ВашаФорма.}Handle, WM_SETICON, ICON_BIG, imgIconBig.Icon.Handle);


Насколько красиво и просто. 

Спасибо всем, кто поучаствовал в обсуждении и особенно - Alexeis.
.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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