Как удалить или изменить «горизонтальный разделитель» в элементе управления панели категорий? - PullRequest
1 голос
/ 26 ноября 2011

Я играл с элементом управления категориями внутри Delphi 2010. Я смог изменить цвета и заставить их работать так, как мне хотелось бы. Однако между заголовками панелей есть серебристый «горизонтальный разделитель» (я не знаю, как еще его назвать).

Как я могу изменить внешний вид этого "горизонтального разделителя" или удалить его все вместе?

enter image description here

1 Ответ

6 голосов
/ 26 ноября 2011

При взгляде на источник 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, поскольку это определяет пространство, доступное для того, что вы хотите нарисовать под заголовком в свернутом состоянии:

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

...