首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当TComboBox使用csOwnerDrawFixed或csOwnerDrawVariable时,如何模拟Windows主题行为?

当TComboBox使用csOwnerDrawFixed或csOwnerDrawVariable时,如何模拟Windows主题行为?
EN

Stack Overflow用户
提问于 2012-09-09 18:57:10
回答 3查看 1K关注 0票数 3

显示与Items不同的字符串值的一种非常简单的方法是在csDropDown to csOwnerDrawFixed中设置Style属性,因为Andreas Rejbrand具有answered a few years ago

问题是:一旦你这么做了,你就失去了对Windows主题的支持。

同样的限制也适用于使用csOwnerDrawVariable

这两个Windows值被转换为添加Style COMBOBOX controlCBS_OWNERDRAWFIXEDCBS_OWNERDRAWVARIABLE (除CBS_DROPDOWNLIST之外) styles

反过来,CBS_OWNERDRAWFIXEDCBS_OWNERDRAWVARIABLE会导致您使用instantly loose the Windows theming support

当你做全自定义绘制like a colour picker时,这一切都很好。但当您只想替换绘制的文本时,就不是这样了。

The Windows COMBOBOX control does not seem to have a way around this,所以我想知道:你如何从Delphi中模拟窗口主题?

我认为这与DrawThemedBackground有关,但我已经有一段时间没有做过认真的Delphi控制工作了,所以任何关于如何开始使用Delphi的指导也是很好的(即使他们推翻了我的假设)。

EN

回答 3

Stack Overflow用户

发布于 2012-09-11 06:16:14

一些链接,如果人们真的想尝试这样做(你可能不应该这样做,因为这是太多的工作)。

票数 2
EN

Stack Overflow用户

发布于 2013-04-18 04:45:16

几年前,我在TurboPower Orpheus ComboBox中添加了主题支持。看看{$IFDEF VERSION2010}...{$ENDIF}部分中的代码。这应该会让你对所需要的东西有一个很好的了解。

票数 2
EN

Stack Overflow用户

发布于 2020-04-09 17:20:46

我在drawitem中修复了它

代码语言:javascript
复制
procedure Tfrmxxx.cbTypeDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
    with (Control as TCombobox).Canvas do
    begin
    if odSelected in State then
      Brush.Color := StyleServices.GetSystemColor(clHighlight);// $00FFD2A6;

    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TCombobox).Items[Index]);
    if odFocused In State then
    begin
      Brush.Color := (Control as TCombobox).Color;
      DrawFocusRect(Rect);
    end;
  end;
end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12338486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档