IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

3 страниц V < 1 2 3  
 Ответить  Открыть новую тему 
> иерархическая структура объектов, Delphi 7
сообщение
Сообщение #41


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 16.12.2008 22:18) *

Ну, если дерево будет именно таким, как было сказано в самом первом посте, то с этим проблем нет, можно в конце концов выделять римские числа в заголовках узлов и проверять, подходит ли потомок к выбранному предку... А вот если я в группу "Неметаллы" захочу внести Селен и Теллур - ты сама, не заглядывая в таблицу вряд ли сможешь определить (по смыслу) ошибся ли я, и какой именно элемент не подходит для данной группы. Так что только по смыслу здесь не пойдет. Нужна какая-то доп. информация.

Немного другое имела ввиду:
есть кнопки
добавить период
добавить ряд
добавить группу
добавить подгруппу
добавить элемент

и например моё TreeView
Код

I-й период
   1-й ряд
      I-я группа
         Ia
      VIII-я группа

И я хочу добавить в I-я группу ещё один узел Iб, т.е для этого я должна выделить этот узел [I-я группа] и нажать кнопку
добавить подгруппу. И если выделить узел Ia или 1-й ряд, то при нажатии на кнопку мне приложение должно запретить действия и "сказать", что "подгруппа - это наследник Группа"..
Вот чего хочу добиться, только не пойму, как..

Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #42


Гость






А, вот ты о чем... Ну, это просто: у каждого узла дерева есть поле Level (уровень, на котором этот узел находится), тебе надо будет всего навсего проверить его...

Скажем, при нажатии на кнопку в твоем примере проверка должна быть:
if TreeView1.Selected.Level = 2 then begin // Level начинается с 0
// Здесь добавление узла, как обычно
end
else ShowMessage('Подгруппа - это наследник Группа');
 К началу страницы 
+ Ответить 
сообщение
Сообщение #43


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Спасибо!!)
Получилось, как и хотела!!)
И ещё один вопрос..в таком же духе..
Вот таким образом было сделано перемещение узлов в пределах TreeViewNew:


procedure TFormMain.MoveNode(TargetNode, SourceNode: TTreeNode);
var
nodeTmp: TTreeNode;
i: Integer;
begin
with TreeViewNew do
begin
nodeTmp := Items.AddChildObject(TargetNode, SourceNode.Text, SourceNode.Data);
for i := 0 to SourceNode.Count - 1 do
begin
MoveNode(nodeTmp, SourceNode.Item[i]);
end;
end;
end;

procedure TFormMain.TreeViewNewDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
TargetNode, SourceNode: TTreeNode;
begin
with TreeViewNew do
begin
TargetNode := GetNodeAt(X, Y); // Get target node
SourceNode := Selected;
if (TargetNode = nil) then
begin
EndDrag(False);
Exit;
end;
MoveNode(TargetNode, SourceNode);
SourceNode.Free;
end;
end;

procedure TFormMain.TreeViewNewDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
if (Sender = TreeViewNew) then // If TRUE than accept the draged item
begin
Accept := True;
end;
end;



Можно ли как-нибудь учесть, чтоб перемещение осуществлялось в таком духе:
1-й ряд переместить только во 2-й период (ну и наоборот), исключая возможность чтоб ряд попал в группу??
ну по такой же схеме с остальным..Объясните пожалуйста!
Код

I период
   1 ряд
      I группа
      VIII группа
II период
   2 ряд
      I группа
      II группа
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #44


Гость






procedure TFormMain.TreeViewNewDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
TargetNode, SourceNode: TTreeNode;
begin
with TreeViewNew do
begin
TargetNode := GetNodeAt(X, Y); // Get target node
SourceNode := Selected;
if (TargetNode = nil) or (TargetNode.Level + 1 <> SourceNode.Level) then // <---
begin
EndDrag(False);
Exit;
end;
MoveNode(TargetNode, SourceNode);
SourceNode.Free;
end;
end;
Это имела в виду?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #45


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 17.12.2008 1:42) *

Это имела в виду?

Да, большое спасибо!!
Теперь понятно!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

3 страниц V < 1 2 3
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.10.2021 9:32
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name