Форум: "Основная";
Текущий архив: 2012.01.15;
Скачать: [xml.tar.bz2];
ВнизЗначки кнопок стандартных диалоговых окон Найти похожие ветки
← →
Deltas © (2010-07-16 00:49) [0]На языке Delphi было написано тестовое приложение, где по нажатию кнопки создается диалоговое окно открытия файла с помощью вызова функции Win API GetOpenFileName().
Для сравнения было написано тестовое приложение на .NET, в котором тоже вызывается диалоговое окно открытия файла.
На картинке сверху изображено диалоговое окно, созданное в Delphi, снизу - на .NET.
http://pixs.ru/showimage/OpenDialog_1510377_818413.jpg
Значки кнопок в верхнем окне (Delphi) выглядят устаревшими. Кстати, значки выглядят новыми не только в приложениях на .NET, но и, например, в приложении "Блокнот" (Файл - Открыть).
Вопросы:
1. Почему присутствует это отличие в значках кнопок?
2. Как заменить старые значки кнопок новыми?
← →
~AQUARIUS~ © (2010-07-16 13:55) [1]Никогда не наблюдал подобного (пользовался Д7 и Д2010). Какая версия Дельфи?
← →
Deltas © (2010-07-16 14:34) [2]Версия Delphi 5. Но, видел снимки окон (screenshots) старших версий (скорее всего была Delphi 6), где есть аналогичная проблема.
Уже нашел ответы на свои вопросы. Все приложения по умолчанию используют библиотеку comctl32.dll версии 5.8. Для того, чтобы программы использовали новые стили Windows XP, нужно использовать библиотеку comctl32.dll версии 6.0. То есть, к приложению нужно подключить манифест Windows XP.
← →
Deltas © (2010-07-16 17:36) [3]Есть еще один вопрос по теме. Насколько безопасно и оправдано добавлять манифест в ресурсы исполняемого файла? Провел эксперимент, поместил в одну папку с delphi32.exe (Delphi 5) манифест Windows XP. Delphi успешно навернулась...
Access violation at address 0182CD43 in module "dphpro50.bpl". Read of address 00000004.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
name="CiaoSoftware.Ciao.Shell.Contacts"
processorArchitecture="x86"
version="5.1.0.0"
type="win32"/>
<description>Windows Shell</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
← →
Германн © (2010-07-16 17:40) [4]
> поместил в одну папку с delphi32.exe (Delphi 5) манифест
> Windows XP
А зачем в папку delphi32.exe?
← →
Deltas © (2010-07-16 17:46) [5]
> Германн © (16.07.10 17:40) [4]
Манифест должен лежать в одной папке с исполняемым файлом и называться <имя исполняемого файла>.manifest, в данном случае delphi32.exe.manifest. Это было сделано только для того, чтобы посмотреть, как поведет себя IDE, если ей подсунуть манифест.
← →
Amoeba_ (2010-07-16 17:48) [6]
> Провел эксперимент, поместил в одну папку с delphi32.exe
> (Delphi 5) манифест Windows XP. Delphi успешно навернулась.
С D5 для подключения манифеста используй это:
http://www.jrsoftware.org/files/misc/xptheme.zip
← →
Deltas © (2010-07-16 18:14) [7]
> Amoeba_ (16.07.10 17:48) [6]
Спасибо. Все посмотрел. Файл манифеста точно такой же. В части инициализации заметил интересную функцию
> initialization
> { This call is necessary; some apps won"t start without
> it. }
> InitCommonControls;
> end.
Однако, MSDN пишет по этому поводу вот что
> Under Comctl32.dll version 6.0 and later, InitCommonControls
> does nothing. Applications must explicitly register all
> common controls through InitCommonControlsEx.
А так как манифест приводит к использованию именно шестой версии comctl32.dll, то функция ничего не делает. Но все равно сообщение [6] дает наводку на использование InitCommonControlsEx(), возможно из-за отсутствия этого вызова Delphi и наворачивается.
← →
Deltas © (2010-07-17 01:42) [8]Провел еще один эксперимент. Поместил в одну папку с delphi32.exe (на этот раз уже Delphi 7) манифест Windows XP. IDE запустилась и работает, отображая все элементы управления в стиле Windows XP.
← →
Германн © (2010-07-17 02:21) [9]
> Deltas © (17.07.10 01:42) [8]
>
> Провел еще один эксперимент. Поместил в одну папку с delphi32.
> exe (на этот раз уже Delphi 7) манифест Windows XP. IDE
> запустилась и работает
Вчера тестировал свою программу на разных темах ХР, так однажды IDE (D2007) выдала таки AV и без всяких манифестов:Exception:
-----------------------------------------------------------------------------------------------------------
2.1 Date : Fri, 16 Jul 2010 18:46:38 +0400
2.2 Address : 7C9109F9
2.3 Module Name : ntdll.dll - (Системная библиотека NT)
2.4 Module Version: 5.1.2600.5512
2.5 Type : EAccessViolation
2.6 Message : Access violation at address 7C9109F9 in module "ntdll.dll". Read of address 0208014D.
.........
Call Stack Information:
-------------------------------------------------------------------------------------------
|Address |Module |Unit |Class |Procedure/Method |Line |
-------------------------------------------------------------------------------------------
|Running Thread: ID=2888; Priority=0; Class=; [Main] |
|-----------------------------------------------------------------------------------------|
|2013FE0B|vcl100.bpl|Controls.pas|TWinControl |MainWndProc |7079[9] |
|7C903247|ntdll.dll | | |RtlConvertUlongToLargeInteger| |
|201401AC|vcl100.bpl|Controls.pas|TWinControl |WndProc |7193[0] |
← →
Deltas © (2010-07-17 12:14) [10]
> Германн © (17.07.10 02:21) [9]
А сбой IDE стабильно появляется при таких установленных темах XP?
← →
Германн © (2010-07-17 14:40) [11]
> А сбой IDE стабильно появляется при таких установленных
> темах XP?
Пока заметил только раз. Но для статистики данных маловато.
← →
Германн © (2010-07-18 03:04) [12]На всякий случай.
Может это интересно, может нет.
5-ти из 6-ти случаев AV в IDE в CallStack второй строкой упоминалась RtlConvertUlongToLargeInteger.
← →
Deltas © (2010-07-18 14:01) [13]
> Германн © (18.07.10 03:04) [12]
В какой именно программе происходит исключение? В IDE Delphi 2007 или в Вашей программе, которая запущена в режиме отладки в IDE?
Если исключение в IDE Delphi 2007, то как Вы смогли просмотреть стек вызовов самой IDE? Разве это возможно?
← →
Германн © (2010-07-18 16:12) [14]
> Deltas © (18.07.10 14:01) [13]
>
>
> > Германн © (18.07.10 03:04) [12]
>
> В какой именно программе происходит исключение? В IDE Delphi
> 2007 или в Вашей программе, которая запущена в режиме отладки
> в IDE?
>
> Если исключение в IDE Delphi 2007, то как Вы смогли просмотреть
> стек вызовов самой IDE? Разве это возможно?
>
В IDE Delphi 2007.
Установленная EurekaLog контролирует IDE.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2012.01.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c