|
Вопрос # 3 824/ вопрос открыт / |
|
Здравствуйте, господа Эксперты!
Помогите решить проблему! Как связать treeview и listview? Необходимо, чтобы при выборе нода отображались несколько строк в listview, относящихся к выделенному ноду.
При использовании метода AddObject, в дерево добавляется новый нод. Подскажите плз, как решить эту проблемму?
 |
Вопрос задал: Чарик (статус: Посетитель)
Вопрос отправлен: 27 февраля 2010, 17:24
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 9 марта 2010, 10:44; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 27 февраля 2010, 17:39 [#1]:
Могу предложить написать новый класс-наследник TTreeNode, который будет отвечать за создание, хранение и освобождение информации, выводимой в ListView. ИМХО, так будет проще, чем связывать разные куски данных через свойство TTreeNode.Data.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
27 февраля 2010, 19:45: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.
|
Чарик (статус: Посетитель), 28 февраля 2010, 16:31 [#2]:
min@y™:
Спасибо за предложение написать новый класс-наследник. Хочется разобраться как сделать связь TreeView+ListView
|
|
min@y™ (статус: Доктор наук), 28 февраля 2010, 19:26 [#3]:
Цитата (Чарик):
Спасибо за предложение написать новый класс-наследник. Хочется разобраться как сделать связь TreeView+ListView
Не надо связывать TreeView+ListView. Надо использовать TreeView для хранения древовидной структуры, а ListView - только для отображения данных, привязанных к каждому узлу.
Чем я могу помочь?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Чарик (статус: Посетитель), 28 февраля 2010, 19:46 [#4]:
Как можно добавить данные в существующий нод дерева при добавлении в listView? Вернее "привязать" новую строку listViewa?
|
|
min@y™ (статус: Доктор наук), 28 февраля 2010, 20:14 [#5]:
Очень просто.
Создаёшь класс-наследник от TTreeNode и вертишь им как хош.
Если все ноды однотипные, то можно воспользоваться и событием OnCreateNodeClass. Если нет - чуть сложнее (создавать вручную). Я могу. Могу примерчик дать. Этот пример типа "просто посмотреть", использовать ты его не сможешь.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Чарик (статус: Посетитель), 6 марта 2010, 22:07 [#6]:
min@y™: Если бы ты мне дал примерчик, было бы просто замечательно! А то даже на необъемных просторах интернета ничего толкового не могу найти...
|
|
min@y™ (статус: Доктор наук), 7 марта 2010, 10:00 [#7]:
Цитата (Чарик):
Если бы ты мне дал примерчик, было бы просто замечательно!
Я так прикинул, посмотрев свои исходники, что ты в них не разберёшься. Уж очень специфический у меня код, заточенный под конкретные задачи. Конечно, могу выслать (куда, кстати?), мне не жалко. Но, думаю, будет лучше написать для тебя класс под твою задачу, она у тебя гораздо проще.
Вот, набросал тебе небольшую заготовку, посмотри:
interface
uses
Classes, ... ;
type
// Класс для хранения информации об одном строке ListView
TListViewItemInfo = class
private
FCaption: string;
FSubItems: TStrings;
FImageIndex: Integer;
public
constructor Create;
destructor Destroy; override;
property Caption: string read FCaption write FCaption;
property SubItems: TStrings read FSubItems;
property ImageIndex: Integer read FImageIndex write FImageIndex;
end;
// Класс-потомок TTreeNode со списком экземпляров TListViewItemInfo
TLviNode = class(TTreeNode)
private
FLviList: TObjectList; // Список из экземпляров TListViewItemInfo
function GetLviCount: Integer;
function GetLviInfo(const Index: Integer): TListViewItemInfo; // доступ к элементам списка
public
constructor Create(AOwner: TTreeNodes);
destructor Destroy; override;
function AddLviInfo(const ACaption: string): TListViewItemInfo; // Добавление экземпляров TListViewItemInfo
//procedure DeleteLviInfo(const Index: Integer);
//procedure MoveLviInfo(...);
//procedure SortLviInfo(...);
//и т.д.
property LviCount: Integer read GetLviCount;
property LviInfo[const Index: Integer]: TListViewItemInfo read GetLviInfo;
end;
implementation
{ TListViewItemInfo }
constructor TListViewItemInfo.Create;
begin
FCaption:= '';
FImageIndex:= -1;
FSubItems:= TStringList.Create();
end;
destructor TListViewItemInfo.Destroy;
begin
FSubItems.Free();
inherited;
end;
{ TLviNode }
constructor TLviNode.Create(AOwner: TTreeNodes);
begin
inherited;
FLviList:= TObjectList.Create(True);
end;
destructor TLviNode.Destroy;
begin
FLviList.Free();
inherited;
end;
function TLviNode.GetLviCount: Integer;
begin
Result:= FLviList.Count;
end;
function TLviNode.AddLviInfo(const ACaption: string): TListViewItemInfo;
begin
Result:= TListViewItemInfo.Create();
Result.Caption:= ACaption;
FLviList.Add(Result);
end;
function GetLviInfo(const Index: Integer): TListViewItemInfo;
begin
if (Index > -1) and (Index < LviCount)
then Result:= TListViewItemInfo(FLviList[Index])
else Result:= nil;
end;
end.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Чарик (статус: Посетитель), 9 марта 2010, 03:39 [#8]:
min@y™:
Спасибо большое! Обязательно попробую. А на данный момент организовал через файл mdb с сооветствующей структурой. Оказалось намного проще чем предполагал изначально. И еще раз спасибо!
Теперь другая проблема, не могу найти как базу запихать в ресурсы, т.е. скомпилировать в ехе...
|
|
min@y™ (статус: Доктор наук), 9 марта 2010, 10:28 [#9]:
Цитата (Чарик):
Теперь другая проблема, не могу найти как базу запихать в ресурсы, т.е. скомпилировать в ехе...
Ты эту проблему сам создал. Нафига тут базу городить-то?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 9 марта 2010, 10:44 [#10]:
только не говорите, что база, которая сохраненная в exe ресурсах ещё должна быть редактируемой.
Если нет, то всё реально.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|