Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Шеврон CategoryPanel


Автор: Galus 5.5.2011, 17:29
Такая ситуация: есть CategoryPanelGroup на которой расположено штук пять панелей CategoryPanel. Стандартные картинки заголовка панели заменены на 3 своих, соответственно 2 это индикатор свёрнуто/развёрнуто и одна заменяет и то и другой если в панели был осуществлен выбор параметров (каждая панель отвечает за список параметров, который используется далее при формировании SQL запроса). Параметр выбран - на заголовке панели рисуется зелёная галочка, типа индикатора.
Проблема в том что перерисовка заголовка панели происходит только если непосредственно с ним что то сделать: свернуть/развернуть панель, кликнуть, навести мышку, установить фокус, сменить свойство caption. Но всё это не годится. Кто нибудь в курсе как корректно заставить перерисоваться заголовок панели?

Автор: volvo877 5.5.2011, 21:09
Получи доступ к TCustomCategoryPanel.DrawHeader (или через Fake-класс, или через Interceptor-класс), и вызывай этот метод для перерисовки заголовка.

Автор: Galus 11.5.2011, 18:20
А можно поподробнее?
Насколько я понял речь идёт о наследовании, создании своего класса с разблокированием защищёного метода. Сталкивался с этим пока всего один раз.

Автор: volvo877 11.5.2011, 19:25
Fake-класс:

Код
type tfake = class(TCategoryPanel);

// Ну, и вызов DrawHeader ...
procedure TForm1.Button1Click(Sender: TObject);
begin
   CategoryPanel2.ExpandedImageIndex := 1;
   TFake(CategoryPanel2).DrawHeader;
end;

, заголовок перерисовался...

Interceptor-класс:

Код
type
   // Перед описанием класса формы...
   TCategoryPanel = class(ExtCtrls.TCategoryPanel)
   public
      procedure UpdateHeader;
   end;

   TForm1 = class(TForm)
   // ...

// В Implementation
procedure TCategoryPanel.UpdateHeader;
begin
   inherited;
end;
Метод DrawHeader опять к твоим услугам, вызывай, где нужно...

Автор: Galus 24.5.2011, 17:59
Спасибо, всё получилось.
Использовал файк класс. Теперь буду знать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)