Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

LoadIcon и Windows Vista


Pavel__ ©   (2006-09-17 01:44:00) 

Здравствуйте. Использую функцию LoadIcon для загрузки стандартных изображений системы, код выглядит так:

Image.Picture.Icon.Handle := LoadIcon(0, IDI_WARNING);

При этом загружаются изображения в стиле XP, что нежелательно. Сталкивался ли кто-нибудь с подобным? Есть ли иные методы загрузки, корректно работающие в системах от 98 до Vista? Заранее благодарен.


Pavel__   (2006-09-18 19:09:00) [1]

2 guav

Спасибо, только что увидел:

IDI_WARNING = IDI_EXCLAMATION;
...
IDI_EXCLAMATION = MakeIntResource( 32515);
...
OIC_WARNING = OIC_BANG;
...
OIC_BANG = 32515;


Видимо, все-таки дело в недоработанности системы...


guav   (2006-09-18 17:45:00) [2]

> Пытаюсь использовать так:
>
> Image.Picture.Icon.Handle :=
> LoadImage(0, MAKEINTRESOURCE(OIC_WARNING), IMAGE_ICON, 0,
> 0, LR_DEFAULTSIZE);
>
> Ничего не рисуется. Можно ли примерчик рабочий привести?
> Спасибо.


LoadImage(0, MAKEINTRESOURCE(OIC_WARNING), IMAGE_ICON, 0,
0, LR_DEFAULTSIZE or LR_SHARED);
Там ещё другие флаги есть, можно их попробовать, но вряд ли поможет..

можно попробовать посмотреть ресурсы висты и поискать там нужные картинки и ненужные картинки. и тогда можно быдет явно грузить нужные.
или может манифест какой-то нужен, как с темами ХР.


Pavel__   (2006-09-18 14:57:00) [3]

Все еще актуально..


Pavel__   (2006-09-17 18:00:00) [4]

2 Eraser

> действительно, MessageBox - не то, попробуйте MessageDlg

Там используется все тот же LoadIcon с IDI_*-константами.

2 guav

Пытаюсь использовать так:

Image.Picture.Icon.Handle :=
LoadImage(0, MAKEINTRESOURCE(OIC_WARNING), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);


Ничего не рисуется. Можно ли примерчик рабочий привести? Спасибо.


Eraser   (2006-09-17 17:36:00) [5]

> [4] Pavel__   (17.09.06 16:49)

действительно, MessageBox - не то, попробуйте MessageDlg.


guav   (2006-09-17 17:07:00) [6]

может, LoadImage, там флагов больше ?


Pavel__   (2006-09-17 16:49:00) [7]

Надеюсь, уважаемый Eraser хотел лишь проверить мою память:

function TApplication.MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;
...
try
 Result := Windows.MessageBox(TaskActiveWindow, Text, Caption, Flags);
finally


Windows.pas:

function MessageBox; external user32 name 'MessageBoxA';


Eraser   (2006-09-17 16:16:00) [8]

> Application.MessageBox показывает

а что показывает Windows.MessageBox?


Pavel__   (2006-09-17 15:04:00) [9]


> Нежелательно другое, системные иконки должны соответсвовать
> стилю. Но кто тебя заставляет загружать системные иконки,
>  раз ты такой противник системы?

Вот именно. В Vista они должны соответствовать стилю Vista а не XP.

Приведу пример:
Application.MessageBox показывает в Vista те самые изображения, что не удивительно — насколько я помню эта функция — часть системы, а не VCL.

Тот код, который я приводил в первом посте, показывает все так, как должно быть по замыслу разработчиков системы вплоть до Vista. Т.е в win98 изображения выглядят как в win98, в winXP — как winXP. А вот с Vista — проблемы. Может все дело в недоработанности системы?

Прошу прощения за сумбурность.


Anatoly Podgoretsky   (2006-09-17 10:43:00) [10]

Нежелательно другое, системные иконки должны соответсвовать стилю. Но кто тебя заставляет загружать системные иконки, раз ты такой противник системы?


Наверх

Титульная страница Поиск, карта сайта Написать письмо