powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как в cxTreeList отмечать без подчиненных узлов?
25 сообщений из 56, страница 2 из 3
Как в cxTreeList отмечать без подчиненных узлов?
    #39680017
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У дерева AlwaysShowEditor и ImmediateEditor, OptionsData.Editing включены.
У фиктивной колонки без привязки Options.Editing включено.
У НД (Fib): [ukModify,ukInsert,ukDelete], запрос для Update прописан.

Само дерево полностью редактируемое. Только что проверил: поменял название узла, переоткрыл НД - значение в базе поменялось.
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680044
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
X11Не помогает. Всё равно при щелчке на чекбоксы ничего не происходит.

X11defecatorнадо выставить проперти для этого поля,
там где указывается, какие значения соответствуют Checked, Unchecked

Ну само собой



ValueChecked = 1
и так далее для ValueXXX

аналогично и для
DisplayChecked = 1
и так далее для DisplayXXX
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680052
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, DisplayChecked зачем трогать?

Всё равно не помогло

...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680060
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11... добавил колонку, которая без привязки к НД. Дереву разрешил редактирование.
Но в колонке не получается включить чекбокс.
ЧЯДНТ.
Если нет привязанного поля, то где хранишь значение добавленной колонки?
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680066
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нигде. В том-то и идея. У DB-компонентов есть свой внутренний НД - Datacontroller. Ведь с cxGrid такая фишка прокатывает.
Дать пользователю выбрать только пока открыта форма.
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680088
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11кто-то уже такое делал
15 лет велосипеду
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680097
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думал, будет проще, как в cxGrid
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680129
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tusX11кто-то уже такое делал
15 лет велосипеду

тот код не рабочий, всё-таки 15 лет прошло



при щелчке - серая галочка, хоть 100 раз щёлкай
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680139
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

ЧЯНТД
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
  object cxDBTreeList1: TcxDBTreeList
    Left = 160
    Top = 88
    Width = 305
    Height = 150
    Bands = <
      item
      end>
    DataController.DataSource = DataSource1
    DataController.ParentField = 'RNT'
    DataController.KeyField = 'ID'
    Navigator.Buttons.CustomButtons = <>
    OptionsBehavior.ExpandOnDblClick = False
    RootValue = -1
    TabOrder = 0
    OnCustomDrawDataCell = cxDBTreeList1CustomDrawDataCell
    OnMouseDown = cxDBTreeList1MouseDown
    object cxDBTreeList1CHK1: TcxDBTreeListColumn
      PropertiesClassName = 'TcxCheckBoxProperties'
      Properties.ImmediatePost = True
      Properties.NullStyle = nssUnchecked
      Properties.ValueChecked = 1
      Properties.ValueUnchecked = 0
      Options.Editing = False
      Width = 62
      Position.ColIndex = 1
      Position.RowIndex = 0
      Position.BandIndex = 0
      Summary.FooterSummaryItems = <>
      Summary.GroupFooterSummaryItems = <>
    end
    object cxDBTreeList1VAL1: TcxDBTreeListColumn
      DataBinding.FieldName = 'VAL'
      Width = 100
      Position.ColIndex = 0
      Position.RowIndex = 0
      Position.BandIndex = 0
      Summary.FooterSummaryItems = <>
      Summary.GroupFooterSummaryItems = <>
    end
    object cxDBTreeList1ID: TcxDBTreeListColumn
      DataBinding.FieldName = 'ID'
      Width = 100
      Position.ColIndex = 2
      Position.RowIndex = 0
      Position.BandIndex = 0
      Summary.FooterSummaryItems = <>
      Summary.GroupFooterSummaryItems = <>
    end
    object cxDBTreeList1RNT: TcxDBTreeListColumn
      DataBinding.FieldName = 'RNT'
      Width = 100
      Position.ColIndex = 3
      Position.RowIndex = 0
      Position.BandIndex = 0
      Summary.FooterSummaryItems = <>
      Summary.GroupFooterSummaryItems = <>
    end
  end

...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680159
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus, это с кодом по той ссылке или без?
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680170
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11, с кодом, - не на отмашку же... галка появляется - уже прогресс, по сравнению с
X11Не помогает. Всё равно при щелчке на чекбоксы ничего не происходит.Серость галки - что-то другое
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680172
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но на сайте Dev код с ошибкой, там непонятен тип переменной P
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680186
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,unit System; D10.2
Код: pascal
1.
PBoolean      = ^Boolean;

dx 17.2.7, win7sp1, aero
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680211
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, я так и объявил:
Код: pascal
1.
 P: PBoolean;
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680214
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил ещё одну колонку и вот какой странный эффект: щёлкаю в левой колонке, галочка рисуется в правой и наоброт


а там, где щёлкаю, рисуется серая
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680215
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680216
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае, этот код всё равно не рабочий получается в связке с непривязанным к НД полем.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
procedure TfmSelRegionsList.btnOkClick(Sender: TObject);
var
  ANode: TcxTreeListNode;
begin
  fRegionsList := '';

  dbTreeRegion.BeginUpdate;
  try
    ANode := dbTreeRegion.Root.getFirstChild;
    while ANode <> nil do
    begin
        if ANode.Values[dbTreeRegionCheck.ItemIndex] then
        if fRegionsList.IsEmpty then
          fRegionsList := ANode.Values[dbTreeRegionColName.ItemIndex]
        else
          fRegionsList := fRegionsList + ',' + ANode.Values[dbTreeRegionColName.ItemIndex];

      ANode := ANode.GetNext;
    end;

  finally
    dbTreeRegion.EndUpdate;
  end;
end;



строка "ANode.Values[dbTreeRegionColName.ItemIndex]" всегда возвращает NULL
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680218
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, придётся делать какую-то "виртуальную колонку" в самом НД (FibDataSet)
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680237
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Танцы с бубном продолжаются.
Дерево показывает, что оно в режиме редактирования



а код
Код: pascal
1.
  if dbTreeRegion.DataController.IsEditing 


возвращает False.

Код: pascal
1.
2.
3.
4.
5.
6.
procedure Tfm1.dbTreeRegionEditValueChanged(
  Sender: TcxCustomTreeList; AColumn: TcxTreeListColumn);
begin
  if dbTreeRegion.DataController.IsEditing then
    dbTreeRegion.DataController.post(True);
end;



или так

Код: pascal
1.
2.
3.
4.
5.
6.
procedure Tfm1.dbTreeRegionVIRTUALCHECKPropertiesEditValueChanged(
  Sender: TObject);
begin
  if dbTreeRegion.DataController.IsEditing then
    dbTreeRegion.DataController.post(True);
end;



Идея в данном случае в том, чтобы одним щелчком мышки включать/отключать чекбокс и чтобы сразу после этого выполнялся Post, т.е. завершение редактирования, чтобы после щелчка дерево не было в режиме редактирования.

cxGrid в таком случае работает корректно, кстати.
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680332
AX-Class
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Зачем нужны эти танцы с ивентами?
Когда понадобилось такое, я просто скопировал функционал unbound column из cxGrid. Да, наследовать пришлось 5-6 классов, зато и фильтры прикрутил сразу.
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680364
AX-Class
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AX-Class,

Вспомнил, почему DX сами не ввели. Некоторые фичи (например, перетягивание мышкой узлов по парентам) перестают адекватно работать. Но они или не нужны, или их можно победить.
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680509
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AX-ClassЗачем нужны эти танцы с ивентами?

Для удобства. Чтобы редактирование было в один щелчок.
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39680554
AX-Class
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Я говорю о наследнике cxTreeList, с добавленным функционалом.
Представим, если вы юзаете ивенты и в проекте cxTreeList-ов >=2. Вам придется писать контроллер, который будет цепляться через ивенты к разным cxTreeList-ам. Потом выяснится, что ивенты нужны еще для чего-то. И контроллер должен будет еще конкатенцией ивентов рулить. Вообщем, на голом месте усложняем себе код и жизнь.
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39704907
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tusX11кто-то уже такое делал
15 лет велосипеду

В общем, я сделал с помощью доп. memDataSet дополнительную колонку.
Но это неудобно, т.к. теряется половина встроенного в дерево функционала и его приходится реализовывать самому.

Надеюсь, в будущих версиях, разработчики додумаются добавить функционал (свойство), благодаря которым можно будет отмечать ветки, чтобы при этом не затрагивать дочерние.
...
Рейтинг: 0 / 0
Как в cxTreeList отмечать без подчиненных узлов?
    #39704979
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
type
TMycxTreeListController = class(TcxTreeListController)
  function DoNodeMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer): Boolean;override;
end;

TMycxTreeListNode = class(TcxUnboundTreeListNode)
  procedure SetCheckState(AValue: TcxCheckBoxState);
  procedure CheckClick;
end;

TcxTreeList = class(cxTL.TcxTreeList)
  function GetControllerClass: TcxCustomControlControllerClass;override;
  function CreateNode: TcxTreeListNode; override;
end;

  TForm1 = class(TForm)
    cxTreeList1: TcxTreeList;
    cxTreeList1Column1: TcxTreeListColumn;
    cxTreeList1Column2: TcxTreeListColumn;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// скопировано с cxTL
procedure TMycxTreeListNode.SetCheckState(AValue: TcxCheckBoxState);
var
  ACheckedCount: Integer;
  APrevCheckState: TcxCheckBoxState;
const
  AState: array[TcxCheckBoxState] of TcxTreeListNodeCheckInfos =
    ([], [nciChecked], [nciGrayed]);
  AParentCheckState: array[Boolean] of TcxCheckBoxState = (cbsGrayed, cbsChecked);
begin
  APrevCheckState := CheckState;
  CheckInfo := CheckInfo - [nciChecked, nciGrayed] + AState[AValue] + [nciChangeCheck];
  try
(*  код который проставляет галки вверх и вниз по узлам
   if (CheckState in [cbsChecked, cbsUnchecked]) and HasChildren then
    begin
      LoadChildren;
      if not IsRadioGroup or (CheckState = cbsUnchecked) or (CheckedCount = 0) then
        SetChildrenCheckState(CheckState, nil);
    end;
    if (Parent <> nil){ and (Parent.CheckGroupType <> ncgNone)} then
    begin
      if Parent.IsRadioGroup and Checked then
        Parent.SetChildrenCheckState(cbsUnchecked, Self);
      if not (nciChangeCheck in Parent.CheckInfo) then
      begin
        ACheckedCount := Parent.CheckedCount;
        if (ACheckedCount = 0) and (Parent.GrayedCount = 0) then
          Parent.CheckState := cbsUnchecked
        else
          Parent.CheckState := AParentCheckState[(ACheckedCount = Parent.Count) or
            ((ACheckedCount > 0) and Parent.IsRadioGroup)];
      end;
    end;  *)
  finally
    CheckInfo := CheckInfo - [nciChangeCheck];
    if (Parent <> nil) and (Parent.CheckGroupType <> ncgNone) then
      Repaint(True);
    if APrevCheckState <> CheckState then
//      TreeList.DoNodeCheckChanged(Self, CheckState);
// дописано
      TcxTreeList(TreeList).DoNodeCheckChanged(Self, CheckState);
  end;
end;

// скопировано с cxTL
procedure TMycxTreeListNode.CheckClick;
const
  ANewState: array[Boolean, TcxCheckBoxState] of TcxCheckBoxState =
  ((cbsChecked, cbsUnchecked, cbsChecked), (cbsChecked, cbsGrayed, cbsUnchecked));
begin
  if not Enabled or not HasCheckbox or
    ((Parent.CheckGroupType = ncgRadioGroup) and Checked) then Exit;
//  CheckState := ANewState[AllowGrayed, CheckState];
// дописано
  SetCheckState(ANewState[AllowGrayed, CheckState]);
end;


{ TcxTreeList }

function TcxTreeList.CreateNode: TcxTreeListNode;
begin
  Result := TMycxTreeListNode.Create(Self);
end;

function TcxTreeList.GetControllerClass: TcxCustomControlControllerClass;
begin
  Result := TMycxTreeListController;
end;


{ TMycxTreeListController }

// скопировано с cxTL
function TMycxTreeListController.DoNodeMouseDown(
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer): Boolean;
begin
  Result := False;
  if CanDrag(X, Y) and HitTest.HitAtNode and IsEditing then
    TreeList.DragAndDropState := ddsNone;
  if not (ssDouble in Shift) and (Button <> mbMiddle) and HitTest.HitAtNode then
    CheckNodeContentClick(Shift);
  if HitTest.HitAtCheckButton and (Button = mbLeft) then
    TMycxTreeListNode(HitTest.HitNode).CheckClick
  else
    if HitTest.HitAtButton and (Button = mbLeft) then
    begin
      HitTest.HitNode.Expanded := not HitTest.HitNode.Expanded;
      Result := True;
    end;
  HitTest.ReCalculate;
end;



...
Рейтинг: 0 / 0
25 сообщений из 56, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как в cxTreeList отмечать без подчиненных узлов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]