Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1279183953
TKN
2010-07-15 12:52
2012.01.15
QuickReport - вывести в файл


9-1188822716
ПисательПлоскихИгр
2007-09-03 16:31
2012.01.15
Zero3D


15-1317129600
OW
2011-09-27 17:20
2012.01.15
Никто случайно Lotus к Oracle не подключал? или к MSSQL


15-1317372179
oxffff
2011-09-30 12:42
2012.01.15
Вопрос по MDX запросам


2-1317934451
Евгений07
2011-10-07 00:54
2012.01.15
MySql через интернет и Дельфи 6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский