Find out how you can include the manifest into a Delphi project to allow your application to share the same look and feel of Windows XP.
   
More of this Feature
• Download Demo Project
Join the Discussion
"Post your questions, concerns, views and comments to this article..." Discuss!
Related Resources
• Working with resources • Win/Shell/API programming • Book: Delphi Developer's Guide to XML • About XML and Delphi

Article submitted by: Michael A. Allen

Why? Windows XP has a theme manager that changes the look and feel for most all of the standard windows controls. Microsoft claims that older versions of the comctl32.dll contained support code to maintain different platforms of the Windows OS. The introduction of "themes" in Windows XP was the rationale behind cleaning up the code contained within the comctl32.dll. Now they are maintaining two versions of the same control. The older (version 5.8) version which is backward compatible to all flavors of Windows (XP included) and the newer (Version 6) version which is compatible with XP alone (and any future windows platforms).

By default, all programs written under Windows XP will default to version 5.8, maintaining the same look and feel of the legacy windows applications. In order to enter 6.0 of the control, you must include in your application, a Manifest that the OS will read in order for the theme manager to take control of drawing the new look and feel for the Windows XP environment.

What? What exactly is the manifest, and how does this play into making my application use version 6.0 of the comctl32.dll library? The manifest is an XML document that must be included into the resource section of your executable. Typically this resource section is reserved for things like images, icons and mouse cursors. Even string tables can be included in this resource section. The XML document, when placed in the right spot within the resource section will allow Windows XP to decide which version of the comctl32.dll to use when binding.

How? To include this XML manifest into your application, you must first know the constants set forth by Microsoft. When entering a new resource into your executable, there is a group number and item number associated with the resource. The group number is typically labeled with a friendly name. For instance, if you use your resource explorer demo application that came shipped with Delphi (under {$delphi}\Demos) you will notice groups named "Strings", "Bitmaps", "Icons" or "Cursors" - these names are actually just friendly representations of a group number. The group number for "Manifests" is 24, as per the C headers distributed by Microsoft. The manifest item number to determine the version of the comctl32.dll library is 1 (also per the C headers distributed by Microsoft). This information becomes necessary when building our new resource (.RES file) to be linked in with our executables.

To create the .RES file that we need, we need to first create a .RC file that assigns our manifest XML document to the appropriate group number and line item number. In the ZIP file included with this document, you'll notice two files:

1) WindowsXP.RC and 2) WindowsXP.Manifest

The WindowsXP.RC contains our instructions to include the WindowsXP.Manifest (XML) document as line item 1 bound to group 24. The contents of the WindowsXP.RC looks like this:

1 24 "WindowsXP.Manifest"

The manifest itself, is an XML document that contains information about the application you are writing as well as information concerning the version of the comctl32.dll to use. It's contents will require a certain amount of customization to fit your application, but will look similar to this:

<?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>

Now that we have these two files in place, we need to use Delphi's resource compiler to compile the .RC file. Doing so will result in a WindowsXP.RES file that we can include in our applications. From the command line, type following (keep in mind, you should include the Delphi's BIN directory in our path for this to work)

C:\Project1> brcc32 WindowsXP.RC

After you have compiled the WindowsXP.RC file, you see a WindowsXP.RES file in the same directory. The final step to making your application Windows XP compatible is to include this resource in your application. The easiest way to do this, is to include either in your project file (.DPR) or your primary form, the following compiler directive:

{$R WindowsXP.RES}

You should probably place this immediately after the {$R *.DFM} compiler directive that is already in your application, directly after the implementation clause.

Once you have included your WindowsXP.RES file into your application, compile your application and run it. The Windows theme manager, to adapt the same look and feel of other applications written for Windows XP, now instantly converts your windows controls.

Warnings Microsoft warns all developers that they have in fact eliminated a lot of the support code in the comctl32.dll library, and that you should always test thoroughly to ensure all aspects of your controls work properly before distribution. It has been my experience that there are in fact some compatibility issues with Delphi. So far, the only discrepancy I have found was in the TListView component. If you use the TListView component with the view style of vsReport, you run into a problem using the TColumns property. During runtime, you will generate a kernel error if you attempt to use column headers with said view style.

If you need some more help on this subject, please post your comments to the Delphi Programming Forum.

In any case, download the demo project - and try it for yourself.

All graphics (if any) in this feature created by Zarko Gajic.

More Delphi
· Learn another routine every day - RTL Quick Reference. · Download free source code applications and components. · Talk about Delphi Programming, real time.  · Link to the Delphi Programming site from your Web pages. · Tutorials, articles, tech. tips by date: 2001|2000|1999|1998 or by TOPIC.
· NEXT ARTICLE: Perfect Gift: Delphi 6 and Kylix (almost) for FREE. For a limited time only, Borland Cross-Platform RAD is available to Visual Basic developers at the special price! Buy Delphi 6 professional at the half price and get Kylix Desktop and Delux Standard for FREE.

Windows XP Manifest in Delphi的更多相关文章

  1. MFC应用程序配置不正确解决方案(manifest对依赖的强文件名,WinSxs是windows XP以上版本提供的非托管并行缓存)

    [现象] 对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把此exe文件拷贝到别人电脑上时,便不能运行了,大致的错误提 ...

  2. windows XP系统内核文件分析(全)

    Windows XP个别 System32 文件 System32 文件夹下个别要移除的文件 我们就要删除另外600 个 system32 文件...我们要一次把它们全都解决掉. 以下是我所删除的 S ...

  3. 在vc6.0下编的对话框界面如果没做过其他处理,往往显的很生硬,怎么样才能使他有Windows XP的风格呢,其实也很简单,我们来看看下面两种方法。

    在vc6.0下编的对话框界面如果没做过其他处理,往往显的很生硬,怎么样才能使他有Windows XP的风格呢,其实也很简单,我们来看看下面两种方法.    方法一: 1.首先确认你在Windows   ...

  4. windows XP上实现python2.7.5和python3.4.3共存

    windows XP上实现python2.7.5和python3.4.3共存过程记录: 1. 首先安装python2.7.5和python3.4.3,两个版本安装顺序不分前后; 2. 检查系统环境变量 ...

  5. windows XP 神key

    微软内部泄露的XP的CD-KEY和无限次激活码!亲测!!! Windows XP专业版最新注册码HTXH6-2JJC4-CDB6C-X38B4-C3GF3RT4H2-8WYHG-QKK6K-WWHJ2 ...

  6. Windows XP系统下添加任务计划常出现问题解决办法

    Windows XP系统下添加任务计划常出现问题解决办法 计划任务就是让电脑在指定的时间内执行指定的动作(计划动作),这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的(通俗一些就是双击 ...

  7. win7下安装和使用Windows XP Mode

    如果想在电脑中安装多个操作系统有几种方法: 1.安装虚拟机,继而在虚拟机中安装操作系统.虚拟机个数就相当于电脑个数,常用的虚拟机软件有VMVare,VMVare功能齐全,但是安装文件较大. 2.如果你 ...

  8. 【转】如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件

    问题描述: 用VS2013写好一个程序,在本机上运行一切正常.但是如果直接把exe文件放到另一台机器上用,则会出现: Windows XP:不是一个正常的win32程序 Window 7:缺少msvc ...

  9. Linux与Windows xp操作系统启动过程

    Linux启动过程: 第一步,加载BIOS,当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备 ...

随机推荐

  1. How to fix Eclipse Tomcat startup timeout in 45 seconds?

    命题:怎么修复 Eclipse 里启动 Tomcat 时, 默认启动超时时间为 45 秒的问题? 在 Eclipse 的 J2EE 项目里启动 Tomcat 来调试 Servlet 之类的,断点以后, ...

  2. 网络抓包神器-Charles使用指南

    http://blog.csdn.net/liulanghk/article/details/46342205 目录 概述 安装 显示模式 PC端抓包 移动应用抓包 其他技能 charles使用问题汇 ...

  3. enum 关键字

    java.lang.Enum.java enum :枚举类型当你需要创建一个整型常量集,但是这些枚举值并不会必然地将其自身的取值限制在这个常量的范围之内,这种情况可以用枚举 package objec ...

  4. CF1064A 【Make a triangle!】

    要让这个三角形合法,只需满足三角形不等式 即$a+b>c$,设$c=max\left\{a,b,c\right\}$,上式转化为$c<a+b$ 如果已经满足,不需消耗代价 否则消耗$c-a ...

  5. C/C++ ASCII码表

    C: dec oct hex ch   dec oct hex ch   dec oct hex ch   dec oct hex ch 0 0 00 NUL (null) 32 40 20 (spa ...

  6. 整理OpenResty+Mysql+Tomcat+JFinal+Cannal+HUI

    阿里云运维主机 118.190.89.22 26611 1.CentOS6.9下安装OpenResty 2.CentOS6.9下安装MariaDB10.2.11 3.使用Intellij IDEA把J ...

  7. VirtualBox 安装 Gentoo 小记

    因为需求,尝试了一下在 VirtualBox 安装 Gentoo.虽然多年前就折腾过多次 LFS,但 Gentoo 并没有太多尝试.这次确实也经历了种种波折,到最后总算成功了,大致跨度为3天.本来手上 ...

  8. 使用VS2013、TFS2013和Git进行分布式团队协作

    题记:呵呵,首先声明,题目起的有点大,其实我只想介绍下VS2013和TFS2013新加入的Git功能,也不是在VS中使用Git的详细向导(以后有空再详细分享给大家).这篇文章虽然在写这篇文章<V ...

  9. (转阮一峰)深入理解OAuth 2.0

    OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版. 本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为R ...

  10. Codeforces 1028E Restore Array 构造

    我发现我构造题真的不会写, 想了好久才想出来.. 我们先把n = 2, 所有数字相等, 所有数字等于0的都特判掉. 找到一个b[ i ] > b[ i - 1 ]的位置把它移到最后一个位置, 并 ...