我正在尝试重新制作一些旧项目以支持 Aero Glass。虽然启用玻璃框架有点容易,但我遇到了一些主要问题。我使用了这段代码:
var
xVer: TOSVersionInfo;
hDWM: THandle;
DwmIsCompositionEnabled: function(pbEnabled: BOOL): HRESULT; stdcall;
DwmExtendFrameIntoClientArea: function(hWnd: HWND; const pxMarInset: PRect): HRESULT; stdcall;
bEnabled: BOOL;
xFrame: TRect;
// ...
xVer.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(xVer);
if xVer.dwMajorVersion >= 6 then
begin
hDWM := LoadLibrary('dwmapi.dll');
@DwmIsCompositionEnabled := GetProcAddress(hDWM, 'DwmIsCompositionEnabled');
@DwmExtendFrameIntoClientArea := GetProcAddress(hDWM, 'DwmExtendFrameIntoClientArea');
if (@DwmIsCompositionEnabled <> nil) and
(@DwmExtendFrameIntoClientArea <> nil) then
begin
DwmIsCompositionEnabled(@bEnabled);
if bEnabled then
begin
xRect := Rect(-1, -1, -1, -1);
DwmExtendFrameIntoClientArea(FrmMain.Handle, @xRect);
end;
end;
FreeLibrary(hDWM);
end;
所以我现在得到了漂亮的玻璃窗。由于黑色现在是透明颜色(有点愚蠢的选择,为什么不能是粉红色)任何是 clBlack 的东西也会变得透明。这意味着所有标签、编辑、按钮文本……即使我在设计时将文本设置为其他颜色,DWM 仍然使它们具有那种颜色和透明性。
好吧,我的问题是 - 是否有可能以某种方式解决这个问题?