我的应用程序使用标准的TComboBoxes和TButtonedEdits来生成具有更复杂的下拉面板的控件。我希望这两个控件看起来一样。特别是,我希望我的TButtonedEdits上的图像与TComboBox上的图像相同,无论程序运行在哪个当前或未来的操作系统上(也就是说,假设该图像由操作系统确定而不是Delphi )。
我假设我必须在运行时将提供图像的资源安装到TComboBox中,以使其可用于我的TButtonedEdits。如何找到并提取该资源?
答案 0 :(得分:2)
你可以使用主题引擎自己绘制按钮 - 为初学者尝试这样的事情:
uses
Themes;
procedure DrawComboBoxButton(ACanvas: TCanvas; ADown, AMouseInControl: Boolean; const ARect: TRect);
var
ComboElem: TThemedComboBox;
Details: TThemedElementDetails;
begin
if ThemeServices.ThemesEnabled then
begin
if ADown then
ComboElem := tcDropDownButtonPressed
else if AMouseInControl then
ComboElem := tcDropDownButtonHot
else
ComboElem := tcDropDownButtonNormal;
Details := ThemeServices.GetElementDetails(ComboElem);
ThemeServices.DrawElement(ACanvas.Handle, Details, ARect);
end
else
begin
if ADown then
DrawFrameControl(ACanvas.Handle, ARect, DFC_SCROLL, DFCS_SCROLLCOMBOBOX or DFCS_PUSHED)
else
DrawFrameControl(ACanvas.Handle, ARect, DFC_SCROLL, DFCS_SCROLLCOMBOBOX);
end;
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
DrawComboBoxButton(PaintBox1.Canvas, False, False, Bounds(0, 0, 20, 20));
DrawComboBoxButton(PaintBox1.Canvas, True, False, Bounds(20, 0, 20, 20));
end;
(改编自Embarcadero论坛的主题"Windows themes in combobox")。
Mike Lischke的"Windows XP Theme Explorer"可以帮助您找到正确的“元素”和“详细信息”。并查看this SO thread。