Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CategoryButtons и CategoryPanelGroup, свернуть всё кроме активного  
:(
    Опции темы
stalkerok
Дата 30.12.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



В Delphi 2009 есть два компонента CategoryButtons и CategoryPanelGroup, как сделать так чтобы при разворачивании списка все остальные сворачивались? в CategoryPanelGroup есть метод Expand но не хочется каждый раз его прописывать а в CategoryButtons у списков вобще нет методов, как быть?
Заранее спасибо!
PM MAIL   Вверх
stalkerok
Дата 31.12.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 28.12.2007

Репутация: нет
Всего: нет



в CategoryPanelGroup
можно сделать так:
Код

//******************************************************************************
//Сворачивание панелей
procedure TfrmMain.CollapseAll(p: integer);
begin
  if (not (p = 1)) then CategoryPanel1.Collapse;
  if (not (p = 2)) then CategoryPanel2.Collapse;
  if (not (p = 3)) then CategoryPanel3.Collapse;
  if (not (p = 4)) then CategoryPanel4.Collapse;
end;
//1
procedure TfrmMain.CategoryPanel1Expand(Sender: TObject);
begin
  CollapseAll(1);
end;
//2
procedure TfrmMain.CategoryPanel2Expand(Sender: TObject);
begin
  CollapseAll(2);
end;
//3
procedure TfrmMain.CategoryPanel3Expand(Sender: TObject);
begin
  CollapseAll(3);
end;
//4
procedure TfrmMain.CategoryPanel4Expand(Sender: TObject);
begin
  CollapseAll(4);
end;

но не совсем удобно когда много CategoryPanel.
а в CategoryButtons как сделать? 
PM MAIL   Вверх
Hellen
Дата 16.3.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 3.7.2006
Где: Москва

Репутация: нет
Всего: 3



Продолжай!!!   мы слушаем.

PM MAIL   Вверх
Galus
Дата 5.5.2011, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 5.5.2011

Репутация: нет
Всего: нет



Код

procedure TfrmMain.CollapseAll(CatPanel: TCategoryPanel);
var
  i: integer;
  CP: TCategoryPanel;
begin
  CP := (FindComponent('CategoryPanel' + inttostr(i)) as TCategoryPanel);
  for i = 1 to CategoryPanelGroup1.Panels.Count do CP.Collapsed = (not (CP = CatPanel));  
end;


На каждую из панелей вешаем событие:
Код

procedure TfrmMain.CategoryPanelExpand(Sender: TObject);
begin
  CollapseAll(Sender as TCategoryPanel);
end;


От количества панелей ничего не зависит. Главное чтобы нумерация панелей шла от CategoryPanel1 до CategoryPanelN, где N - количество панелей, без скачков через одну. Т.е. вариант типа CategoryPanel1, CategoryPanel3 не прокатит, нужно чтобы обязательно была ещё и CategoryPanel2.

Добавлено через 2 минуты и 37 секунд
Даже проще. На каждую панель событие:
Код

procedure TfrmMain.CategoryPanelExpand(Sender: TObject);
var
  i: integer;
  CP: TCategoryPanel;
begin
  CP := (FindComponent('CategoryPanel' + inttostr(i)) as TCategoryPanel);
  for i = 1 to CategoryPanelGroup1.Panels.Count do CP.Collapsed = (not (CP = (Sender as TCategoryPanel)));


PM MAIL   Вверх
MetalFan
Дата 6.5.2011, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Galus, код то свой хоть бы проверили...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Galus
Дата 11.5.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 5.5.2011

Репутация: нет
Всего: нет



Извиняюсь. Дома без Делфи сижу. smile
Код

procedure TfrmMain.CategoryPanelExpand(Sender: TObject);
var
  i: integer;
  CP: TCategoryPanel;
begin
  for i = 1 to CategoryPanelGroup1.Panels.Count do
  begin
    CP := (FindComponent('CategoryPanel' + inttostr(i)) as TCategoryPanel);
    CP.Collapsed = (not (CP = (Sender as TCategoryPanel)));
  end;
  CategoryPanelGroup1.Realign;
end;

Теперь вроде всё правильно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.