| 
| 
 | Вопрос # 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 ресурсах ещё должна быть редактируемой. Если нет, то всё реально.
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |