Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 10:54   #1
Andrey85
Пользователь
 
Регистрация: 29.07.2010
Сообщений: 79
По умолчанию CheckListBox древовидной структуры

Здравствуйте. Подскажите пожалуйста. Есть ли такой компонент, который отображал и была возможность выбора из древовидной структуры чекерами. Например, есть командировочные и хозяйственные расходы. У каждого вида есть еще подвиды. Нужно выбирать либо просто допустим командировочные либо какие-то его подвиды и т.д. Заранее спасибо.
Andrey85 вне форума Ответить с цитированием
Старый 22.12.2010, 16:30   #2
alekseiryzhakov
Пользователь
 
Аватар для alekseiryzhakov
 
Регистрация: 22.12.2010
Сообщений: 14
По умолчанию

Была у меня аналогичная проблема! Но я её так и не решил... (
alekseiryzhakov вне форума Ответить с цитированием
Старый 22.12.2010, 16:57   #3
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Да, в свое время понадобился тоже такой компонент. Поискал, ничего стоящего не нашел. Слепил на TreeView.
Достаточно просто оказалось.
- делаем три картинки 16х16: не отмеченный прямоугольник, отмеченный и еще нужно было с серой галкой - полуотмеченный (последний нужен для того чтобы в родительском ноуде было видно, что что дочерние отмечены не все);
- эти три картинки загружаются TImageList;
- установки в TreeView: в StateImages указывается наш TImageList, ReadOnly = True, RightClickSelect = True (впрочем, по вкусу), Ident = 19;
- в процедуре события OMouseDown (можно и на OnMouseUp) пишется такой код:
Код:
procedure TfrmUserRight.SetStateParent(TN : TTreeNode; St : Integer);
var  N : TTreeNode; NeedPar : Boolean;
begin
  if (TN = nil) or (TN.Level = 0) then Exit;
  N := TN.getFirstChild;
  NeedPar := False;
  while N <> nil do begin
    if N.StateIndex <> St then begin
      TN.StateIndex := 2; NeedPar := True; break
    end;
    N := TN.GetNextChild(N);
  end;
  if not NeedPar then TN.StateIndex := St;
  SetStateParent(TN.Parent, St);
end;

procedure TfrmUserRight.tvMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var R : TRect;

  procedure SetStateChild(TN : TTreeNode);
  var  N : TTreeNode;
  begin
    N := TN.getFirstChild;
    while N <> nil do begin
      N.StateIndex := TN.StateIndex;
      SetStateChild(N);
      N := TN.GetNextChild(N);
    end;
  end;

begin
  if tvProject.Selected = nil then Exit;
  R := tvProject.Selected.DisplayRect(True);
  R.Right := R.Left-18;
  R.Left := R.Right-16;
  if PtInRect(R, Point(X, Y)) then begin
    if tvProject.Selected.StateIndex = 0 then
      tvProject.Selected.StateIndex := 1
    else
      tvProject.Selected.StateIndex := 0;

    SetStateChild(tvProject.Selected);
    SetStateParent(tvProject.Selected.Parent, tvProject.Selected.StateIndex);
  end;
end;
Картинки в TImageList расположены в порядке: не отмеченный, отмеченный, "серый".
Как видно, делать особенно и нечего.
Прик вне форума Ответить с цитированием
Старый 27.12.2010, 12:22   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Для работы с древовидными структурами есть только один компонент, достойный внимания - VirtualTreeview. К тому же он бесплатный. Берем здесь: http://soft-gems.net
Баламут вне форума Ответить с цитированием
Старый 27.12.2010, 17:26   #5
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Ну почему ? А GreedTree ?
Demo.rar
asmodey1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CheckListBox BALLIN Помощь студентам 4 14.04.2010 11:37
Программа, показывающая в древовидной форме идентификаторы всех окон TwiX Софт 7 29.07.2009 16:46
CheckListBox jahongir007 Общие вопросы Delphi 4 07.06.2009 12:10
Checklistbox RealSHELS Общие вопросы Delphi 3 30.07.2008 22:40
CheckListBox ivp88 Компоненты Delphi 4 12.05.2007 15:49