Как динамически добавлять кнопки в TCategoryPanelGroup? - PullRequest
0 голосов
/ 27 августа 2009

Кто-нибудь имел опыт работы с компонентом TCategoryPanelGroup Delphi 2009 и, в частности, с динамическим добавлением кнопок на панели категорий?

Я не могу заставить его работать должным образом. Либо кнопки не появляются, либо выравнивание испорчено. Основная схема того, что я хочу сделать:

procedure AddButton (const Caption, Group : String);
const 
  ButtonSize = 55;
  Border = 10;
var
  CategoryPanel : TCategoryPanel;
  Button : TButton;       
begin
  CategoryPanel := FindCategoryPanel (CategoryPanelGroup, Group);
  CategoryPanel.Height := CategoryPanel.Height + ButtonSize + Border;
  Button := TButton.Create (CategoryPanel);
  Button.Parent := CategoryPanel;
  Button.Width := ButtonSize;
  Button.Height := ButtonSize;
  Button.Left := 27;
  Button.Top := CategoryPanel.ClientHeight - Border - ButtonSize;
end;

Есть подсказки?

Ответы [ 2 ]

0 голосов
/ 31 августа 2009

Проблема была в том, как я указал верхние координаты.

Я изменил что-то вроде

ButtonCount := CategoryPanel.ComponentCount - 2;
Button.Top := Border + ButtonCount * (ButtonSize + Border);
CategoryPanel.ClientHeight := Border + (ButtonCount+1) * (ButtonSize + Border);

и все работает.

Не знаю точно, что вызвало проблему.

0 голосов
/ 27 августа 2009

В чем именно проблема? Кнопки отображаются точно в требуемом положении.

Вы уверены, что хотите квадратные кнопки без текста?

Использование:

Button.Left := 0;
Button.Width := CategoryPanel.ClientWidth - 2;

Делает их точной шириной как панель минус смещение пикселя.

Использование:

Button.Width: = CategoryPanel.ClientWidth; Button.Left: = -1;

Создает наибольшую ширину. Это смещение в 1 пиксель.

[[Я использую 2010, чтобы быть справедливым]].

...