Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 812

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
На форме имеются компоненты: TreeView, Image1 и Memo.
В TreeView уже существует дерево каталогов с объектами при нажатии на которые в Memo выводится текст из файлов (*dec), а в Image соответствующее изображение изображение (*jpg).
Мне необходимо организовать возможность добавления в TreeView новые объекты и для них добавлять текстовые файлы и изображения.

Фрагмент кода как реализовано отображение текста и картинок представлен ниже. (Буду благодарен за способ по его упрощению).

Помогите пожалуйста уважаемые эксперты.

Приложение:
  1. procedure TForm2.TreeView1Click(Sender: TObject);
  2. begin
  3.  
  4. if
  5. treeview1.Items.Item[1].Selected=true
  6. then
  7. begin
  8. Memo1.lines.LoadFromFile('Data1-1.dec');
  9. Image1.Picture.LoadFromFile('ImageSamsung1.jpg');
  10. end;
  11.  
  12. if
  13. treeview1.Items.Item[2].Selected=true
  14. then
  15. begin
  16. Memo1.lines.LoadFromFile('Data1-2.dec');
  17. Image1.Picture.LoadFromFile('ImageSamsung2.jpg');
  18. end;
  19.  
  20.  


Romanov Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Romanov (статус: Посетитель)
Вопрос отправлен: 19 мая 2009, 13:48
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Чтобы не заморачиваться со свойством Data, можно написать свой класс-наследник от TTreeNode, в котором будут соответствующие свойства.

type
  TMyNode = class(TTreeNode)
  private
    FTextFile: string;
    FImageFile: string;
  public
    property TextFile: string read FTextFile write FTextFile;
    property ImageFile: string read FImageFile write FImageFile;
  end;

На событие TreeView.OnCreateNodeClass подставлять этот класс.

procedure TForm2.TreeViewCreateNodeClass(Sender: TCustomTreeView;
  var NodeClass: TTreeNodeClass);
begin
  NodeClass:= TMyNode;
end;

Затем, создание нового Node:

function TForm2.CreateNewNode(AParentNode: TTreeNode;
                              const ACaption, ATextFile, AImageFile: string): TMyNode;
begin
  Result:= TMyNode(TreeView.Items.AddChild(AParentNode, ACaption));
  Result.TextFile:= ATextFile;
  Result.ImageFile:= AImageFile;
end;

Далее вся работа с такими нодами будет через приведение типов

procedure TForm2.TreeView1Click(Sender: TObject);
begin
  if Assigned(TreeView.Selected)
    then begin
           Memo1.Lines.LoadFromFile(TMyNode(TreeView.Selected).TextFile);
           Image1.Picture.LoadFromFile(TMyNode(TreeView.Selected).ImageFile);
           // Ахтунг! Здесь нет отлова ошибок ввода/вывода!
         end;
end;

Ну вот, типа как-то так.

Ахтунг! Код не отлаживал, писал прямо в браузере!
Прежде чем копипастить к себе в прогу, пойми, как тут что работает.
А то тут один товарищ не понял... :))

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 19 мая 2009, 14:55


Мини-форум вопроса

Всего сообщений: 35; последнее сообщение — 20 мая 2009, 18:23; участников в обсуждении: 3.

Страницы: [« Предыдущая] [1] [2]

Вадим К

Вадим К (статус: Академик), 20 мая 2009, 15:29 [#21]:

Мне кажеться, что Вам должно быть более понятно, что должно происходить. Задача то Ваша.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 20 мая 2009, 15:29 [#22]:

Цитата:

но поясни что должно происходить при клике на TreeView ?


Ну ёпрст! Посмотри ответ на вопрос-то!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Romanov

Romanov (статус: Посетитель), 20 мая 2009, 16:27 [#23]:

Но при клике ничего не происходит! Разве что можно изменить название каталога или объекта. Где должны храниться файлы (тексты и изображения)?
По идеи нужно кликом (или кнопкой) добавлять новый объект в TreeView и присвоить к нему файлы которые будут выводиться на Memo и Image.
Вадим К

Вадим К (статус: Академик), 20 мая 2009, 16:32 [#24]:

Что бы что то где то появилось, надо вначале его туда положить...
Галочка "подтверждения прочтения" - вселенское зло.
Romanov

Romanov (статус: Посетитель), 20 мая 2009, 16:39 [#25]:

Так я и спрашиваю где должны хорониться файлы для вывода?
Вадим К

Вадим К (статус: Академик), 20 мая 2009, 17:01 [#26]:

файлы не надо хоронить.
а вот хранить - там где удобно, главное путь к ним правильно указать.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 20 мая 2009, 17:11 [#27]:

Цитата:

Но при клике ничего не происходит!

При клике на чём?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Romanov

Romanov (статус: Посетитель), 20 мая 2009, 17:13 [#28]:

А можно как нибудь при при создании (во время работы приложения) объекта в дереве указывать эти пути к файлам?
З.Ы. Пардон за "хоронить" :)
Romanov

Romanov (статус: Посетитель), 20 мая 2009, 17:14 [#29]:

min@y™
На TreeView
min@y™

min@y™ (статус: Доктор наук), 20 мая 2009, 17:34 [#30]:

Цитата:

На TreeView

Ээээ, так не пойдёт! А кто говорил:

Цитата:


В TreeView уже существует дерево каталогов с объектами при нажатии на которые в Memo выводится текст из файлов (*dec), а в Image соответствующее изображение изображение (*jpg).

Стало быть, при клике на TreeView нужно показывать информацию (текст и картинку) выделенного узла дерева, а отнюдь не добавлять новый узел.

Предлагаю добавление новых узлов сделать по кнопке "Добавить".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Romanov

Romanov (статус: Посетитель), 20 мая 2009, 17:55 [#31]:

Да все правильно. Изначально существовало дерево с узлами(с привязаными к ним текстом и изображениями) В вопросе представлен кусочек кода как это было реализовано. Но так как Вадим К. заверил что с таким подходом далеко не уйдешь пришлось отказаться от него. Но если есть идеи как сохранить прежнюю структуру... Кнопочка "Добавить" звучит славно:)
Вадим К

Вадим К (статус: Академик), 20 мая 2009, 17:57 [#32]:

кто то тут недавно задавал вопрос, как сохранять/загружать информацию с TreeView...
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 20 мая 2009, 18:04 [#33]:

Цитата:

Но так как Вадим К. заверил что с таким подходом далеко не уйдешь пришлось отказаться от него.


Ты чего, мой ответ не читал? Или я чего-то не догоняю?
В ответе же есть реакция на клик и добавление нового узла.
Осталось только сделать реакцию на клик по кнопке "Добавить", т.е. запихнуть в этот обработчик вызов метода TForm2.CreateNewNode().
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 20 мая 2009, 18:06 [#34]:

Наверно проблема в том, что TreeView уже был заполнент в дизайнтайме....
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 20 мая 2009, 18:23 [#35]:

Цитата:

Наверно проблема в том, что TreeView уже был заполнент в дизайнтайме....


Да, ты прав. Его надо в дизантайме очистить и заполнять только в рантайме.

Если честно, мне этот флейм на 4 страницы уже надоел.
Чую, надо просто написать аффтару готовую программу, иначе не отстанет. :)))
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 20:36
Выполнено за 0.03 сек.