![]() |
|
|
![]()
|
|
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Всем привет!
Вот кусок кода:
Проблема в том, что при первой отрисовке ico->Width=32 не зависимо от реального размера иконки и, естественно, при появлении окна иконка отображается не на своём месте. При последующих отрисовках - размер правильный. В чём может быть проблема? Спасибо. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Rrader |
|
||||||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 13 Всего: 191 |
artsb, это связано со спецификой класса TIcon
Вот код получения ширины:
GetSystemMetrics(SM_CXICON) возвращает 32 (по умолчанию). При создании TIcon поле FImage инициализируется нулями, т.е. FSize->X == 0; FSize->Y == 0; Соответственно возращается 32. При вызове Canvas->Draw() в данном случае вызывается метод TIcon->Draw() и происходит следующее: вызывается функция (ACanvas - это Canvas формы в данном случае):
При обращении к свойству Handle запрашивается дескриптор иконки:
В процедуре HandleNeeded() вызывается функция ReadIcon. Она довольно объёмная, в ней сначала тоже происходит вызов GetSystemMetrics(SM_CXICON), но потом значение берется из массива указателей на структуру TIconRec. Там проводятся предварительные расчеты (в функции BetterSize), и мы получаем 16х16 Это сообщение отредактировал(а) Rrader - 23.6.2008, 07:43 |
||||||
|
|||||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Rrader, спасибо!
Но, вообще, странно, ведь я после создания объекта TIcon загружаю в него иконку. Размер не изменяется? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 13 Всего: 191 |
Нет. Не сразу
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Спасибо.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |