【发布时间】:2012-11-12 19:05:51
【问题描述】:
我正在尝试以从右到左的方向绘制Explorer::Treeview 类的ttGlyphClosed 元素(例如BiDiMode 将是bdLeftToRight 时)。我有一个问题,我不知道如何使我的屏幕外位图透明。位图的背景总是白色的。
我正在使用以下代码来镜像图像:
procedure TForm5.FormPaint(Sender: TObject);
var
bm: TBitmap;
ARect: TRect;
Details: TThemedElementDetails;
begin
if ExplorerTreeviewhTheme = 0 then
ExplorerTreeviewhTheme := OpenThemeData(0, 'Explorer::Treeview');
ARect := Rect(20, 20, 40, 40);
Details := ThemeServices.GetElementDetails(ttGlyphClosed);
DrawThemeBackground(ExplorerTreeviewhTheme, Canvas.Handle,
Details.Part, Details.State, ARect, nil); //Ok
bm := TBitmap.Create;
try
bm.Width := 20;
bm.Height := 20;
ARect := Rect(00, 00, 20, 20);
DrawThemeBackground(ExplorerTreeviewhTheme, bm.Canvas.Handle,
Details.Part, Details.State, ARect, nil);
// rendered result has white background
Canvas.Draw(60, 10, bm);
// rendered result is mirrored but has also white background
StretchBlt(Canvas.Handle, 100, 10, -20, 20, bm.Canvas.Handle, 0, 0, 20, 20, SRCCOPY);
finally
bm.Free;
end;
end;
问题是如何镜像DrawThemeBackground函数绘制的元素(用于RTL读取)或如何使用该函数进行RTL(从右到左)渲染?
【问题讨论】:
标签: delphi winapi right-to-left windows-themes uxtheme