TColorBox的OnGetColors事件没有触发

3

我正在尝试为 TColorBox 控件添加自定义颜色。我已经将该控件添加到我的表单中,并将 Style 属性设置为 cbCustomColor。对于 OnGetColors 事件,我有以下代码:

procedure TfrmAbout.GetColors(Sender: TCustomColorBox; Items: TStrings);
begin
  ShowMessage('GetColors has been triggered');
  Items.AddObject('clWebSnow',TObject(clWebSnow));
  Items.AddObject('MyOrange',TObject(Rgb(255,128,0)));
end;

我没有看到消息框或下拉菜单中的颜色。是否还需要做其他事情才能使它正常工作?


http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.ExtCtrls.TCustomColorBox.OnGetColors - ikathegreat
http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.ExtCtrls.TColorBox - ikathegreat
你肯定是指 TColorBox 吧? - David Heffernan
2个回答

5

要添加自定义颜色,您需要将cbCustomColors选项包含到Style属性中。而cbCustomColor选项仅包括允许选择自定义颜色的项目。


1
是的,我已经声明了这个设置为true,这就是为令我感到困惑的原因。还有其他需要更改的内容才能触发该事件吗? - ikathegreat
3
注意末尾的scbCustomColors应该翻译为“自定义颜色”。 - Sertac Akyuz
2
@ika - 我不知道你的设置出了什么问题,但请将以下两行代码复制/粘贴到按钮处理程序中:ColorBox.Style:=ColorBox.Style-[cbCustomColors]; ColorBox.Style:=ColorBox.Style+[cbCustomColors]; 然后单击该按钮,查看是否弹出消息。 - Sertac Akyuz
1
事件确实被触发了,即使你有11个颜色框。你的问题在于将cbCustomColor设置为True而不是cbCustomColors。它们并不相同。这个控件的设计非常令人困惑。 - David Heffernan
1
@ika - 我能得出的唯一结论是该组件与您的Delphi版本存在缺陷。我猜我会尝试使用表单的OnShow事件来设置样式,同时设置一个布尔标志,以便事件不会在每次OnShow触发时都被触发... - Sertac Akyuz
显示剩余11条评论

0
为了使其正常工作,我确实不得不遵循@Sertac的建议。在FormCreate中,我触发了一个过程,删除了[cbCustomColors],然后将它们添加回每个TColorBox。
我找不到另一个合适的解决方法,也无法弄清楚为什么GetColors没有在应该时触发。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接