如何删除或更改“类别面板”控件中的“水平分隔符”?

时间:2011-11-26 16:26:06

标签: delphi delphi-2010 panel separator

我一直在使用Delphi 2010中的Category Panel Control。我已经能够修改颜色并让它们以我喜欢的方式工作。但是,每个面板标题之间都有一个银色的“水平分隔符”(我不知道还有什么叫它)。

如何更改此“水平分隔符”的外观或将其全部删除?

enter image description here

1 个答案:

答案 0 :(得分:6)

看一下T(Custom)CategoryPanel的源代码,揭示了一个方法DrawCollapsedPanel。它无条件地绘制分隔符。 DrawCollapsedPanel是从DrawHeader调用的,唯一检查的条件是面板是否折叠。

更重要的是,DrawCollapsedPanel是虚拟的,因此您可以创建自己的后代或使用拦截器类:

TCategoryPanel = class(ExtCtrls.TCategoryPanel)
protected
   procedure DrawCollapsedPanel(ACanvas: TCanvas); override;
   function GetCollapsedHeight: Integer; override;
end;

如果你把它放在一个单独的单元中,那么你需要做的就是在ExtCtrls单元之后将它包括在你想要一个有你自己行为的类别面板的地方。

取悦大卫: - )

procedure TCategoryPanel.DrawCollapsedPanel(ACanvas: TCanvas);
begin
  // Don't call inherited, we do not want the default separator.
  // And don't draw anything you don't want.
end;

我们还需要覆盖GetCollapsedHeight,因为它确定了在折叠状态下Header下可以绘制的任何空间:

function TCategoryPanel.GetCollapsedHeight: Integer;
begin
  // As we don't want anything under here, 
  // don't call inherited and just return the HeaderHeight.
  // (Instead of HeaderHeight + 6;
  Result := HeaderHeight;
end;

屏幕截图:

enter image description here