Главная страница
    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.003 c
8-1221912190
Elz
2008-09-20 16:03
2012.01.15
Помогите найти ошибку в коде


2-1318095947
Pcrepair
2011-10-08 21:45
2012.01.15
Ctrl+A и Ctrl+C в компоненте TWebBrowser


2-1317964121
igorium
2011-10-07 09:08
2012.01.15
Сохранение в файл большого количества картинок и данных


15-1316837540
SQLEX
2011-09-24 08:12
2012.01.15
идиотека..


15-1316494673
xayam
2011-09-20 08:57
2012.01.15
АНТИВИРУСЫ НА ВОЙНЕ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский