如何通过Delphi的Aero功能调整TProgressBar控件颜色?
- 内容介绍
- 文章标签
- 相关推荐
本文共计537个文字,预计阅读时间需要3分钟。
要以编程方式获取启用Windows Aero功能的TProgressBar控件的线条颜色和背景颜色,你可以使用Windows API函数。以下是一个简单的示例,展示如何使用Delphi的WinAPI调用获取这些颜色:
delphiuses Windows, Messages, SysUtils, Classes, Graphics;
function GetAeroProgressBarColors: TColor;var hProgressBar: HWND; hdc: HDC; palette: PLogPalette; paletteSize: Integer; colors: array [0..15] of TColor; i: Integer;begin // 创建一个临时的ProgressBar窗口 hProgressBar :=CreateWindowEx( 0, 'PROGRESS', 'ProgressBar', WS_CHILD or WS_VISIBLE or WS_BORDER, 100, 100, 100, 20, 0, 0, 0, nil);
// 获取设备上下文 hdc :=GetDC(hProgressBar);
// 获取调色板大小 paletteSize :=GetDeviceCaps(hdc, LOGPALETTE_SIZE); GetMem(palette, paletteSize);
// 获取调色板 palette^.palVersion :=$300; palette^.palNumEntries :=16; GetSystemPaletteEntries(hdc, 0, 16, palette^.palPalEntry);
// 将调色板颜色转换为Windows颜色 for i :=0 to 15 do colors[i] :=palette^.palPalEntry[i].peColor;
// 释放内存 FreeMem(palette, paletteSize);
// 获取线条颜色和背景颜色 Result :=colors[6]; // 通常线条颜色是第7个颜色(索引从0开始)
// 释放设备上下文 ReleaseDC(hProgressBar, hdc);
// 销毁临时窗口 DestroyWindow(hProgressBar);end;
请注意,这个函数创建了一个临时的TProgressBar窗口来获取调色板信息,然后解析调色板以找到线条颜色和背景颜色。由于Windows Aero功能的颜色可能会随着操作系统版本和主题设置的不同而变化,这个方法可能不是100%可靠的,但它可以作为一个起点。
在实际使用中,你可能需要根据你的具体需求调整代码,比如考虑不同版本的Windows和不同的Aero主题。
如何以编程方式获取启用 Windows Aero功能的TProgressBar控件的条形颜色和背景颜色?我正在使用第三方进度条控件,而不是Delphi附带的默认控件,我正在尝试使用正确的颜色绘制控件.
我使用的是Delphi 2010.
选项,按照对初学者最敏感的顺序,对初学者最不敏感:(1)取出第三方进度条,并定期进行. (初学者和聪明的老家伙解决方案,具有讽刺意味的相同)
(2)获得剥皮/涂抹包,并按照您想要的方式绘制. (中间)
(3)学习使用Themes和UxThemes单元扩展自定义控件. (高级)
在你从#2和#3获得足够的痛苦之后,你将回到#1,而你身上的硬壳(明智的)旧计时器将做出与业余爱好者相同的决定.
本文共计537个文字,预计阅读时间需要3分钟。
要以编程方式获取启用Windows Aero功能的TProgressBar控件的线条颜色和背景颜色,你可以使用Windows API函数。以下是一个简单的示例,展示如何使用Delphi的WinAPI调用获取这些颜色:
delphiuses Windows, Messages, SysUtils, Classes, Graphics;
function GetAeroProgressBarColors: TColor;var hProgressBar: HWND; hdc: HDC; palette: PLogPalette; paletteSize: Integer; colors: array [0..15] of TColor; i: Integer;begin // 创建一个临时的ProgressBar窗口 hProgressBar :=CreateWindowEx( 0, 'PROGRESS', 'ProgressBar', WS_CHILD or WS_VISIBLE or WS_BORDER, 100, 100, 100, 20, 0, 0, 0, nil);
// 获取设备上下文 hdc :=GetDC(hProgressBar);
// 获取调色板大小 paletteSize :=GetDeviceCaps(hdc, LOGPALETTE_SIZE); GetMem(palette, paletteSize);
// 获取调色板 palette^.palVersion :=$300; palette^.palNumEntries :=16; GetSystemPaletteEntries(hdc, 0, 16, palette^.palPalEntry);
// 将调色板颜色转换为Windows颜色 for i :=0 to 15 do colors[i] :=palette^.palPalEntry[i].peColor;
// 释放内存 FreeMem(palette, paletteSize);
// 获取线条颜色和背景颜色 Result :=colors[6]; // 通常线条颜色是第7个颜色(索引从0开始)
// 释放设备上下文 ReleaseDC(hProgressBar, hdc);
// 销毁临时窗口 DestroyWindow(hProgressBar);end;
请注意,这个函数创建了一个临时的TProgressBar窗口来获取调色板信息,然后解析调色板以找到线条颜色和背景颜色。由于Windows Aero功能的颜色可能会随着操作系统版本和主题设置的不同而变化,这个方法可能不是100%可靠的,但它可以作为一个起点。
在实际使用中,你可能需要根据你的具体需求调整代码,比如考虑不同版本的Windows和不同的Aero主题。
如何以编程方式获取启用 Windows Aero功能的TProgressBar控件的条形颜色和背景颜色?我正在使用第三方进度条控件,而不是Delphi附带的默认控件,我正在尝试使用正确的颜色绘制控件.
我使用的是Delphi 2010.
选项,按照对初学者最敏感的顺序,对初学者最不敏感:(1)取出第三方进度条,并定期进行. (初学者和聪明的老家伙解决方案,具有讽刺意味的相同)
(2)获得剥皮/涂抹包,并按照您想要的方式绘制. (中间)
(3)学习使用Themes和UxThemes单元扩展自定义控件. (高级)
在你从#2和#3获得足够的痛苦之后,你将回到#1,而你身上的硬壳(明智的)旧计时器将做出与业余爱好者相同的决定.

