Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TWebBrowser & TTreeview, Связб между ними 
:(
    Опции темы
Anakin
Дата 3.6.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Добрый День.
Есть вопрос к знатокам.
На форме есть TreeView и WebBrowser.
В папке с программой есть ШТМЛ страницы.
Которые я записываю в Дерево.
Так я заполняю TreeView
Код

procedure TfrmMain.FormCreate(Sender: TObject);
var LectionFile: TSearchRec;
begin
Tree.Items.Clear; //На всякий случай очищаем дерево...
Tree.Items.AddFirst(nil, 'Главная'); //Добавляем корневую ветку
if FindFirst('*.html', faAnyFile, LectionFile) = 0 then
      repeat
        begin
        //добавляем ветки с именами найденных файлов
        Tree.Items.AddChild(Tree.TopItem, LectionFile.Name);
        end;
      until FindNext(LectionFile) <> 0;
      FindClose(LectionFile);
end;


Так я пытаюсь открыть то чем я заполнил Дерево
Код

procedure TfrmMain.TreeChange(Sender: TObject; Node: TTreeNode);
begin
if Node.Level <> 0 then
web.Navigate('Node.data');
end;


Но при нажатии на Выбранном поле Вебброусер пишет что ошибка не могу найти страницу.
А мне необходимо что бы загружался фаил.
Подскажиет что я не так делаю.
Все коды я нашел тут на форуме.
PM MAIL   Вверх
Rrader
  Дата 3.6.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Цитата(Anakin @  3.6.2009,  21:54 Найти цитируемый пост)
web.Navigate('Node.data');

У Вас тут константная строка. Догадались? smile 



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Anakin
Дата 3.6.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Нет ((
А можно по подробней или как правельно должно быть.
PM MAIL   Вверх
Anakin
  Дата 3.6.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



У меня появилась идея.
А что если Хранить Названия Главных коталогов и подкоталогов в Базе Акчесс
Тоесть Таблица будет выглядит так:
ID I Name     I Link                      I 
------------------------------------------
1  I Главная  I .\Data\test.html   I 
2  I Дочерня I .\Data\test2.html I
------------------------------------------
ID-Ключ
Name-Имя Структуры каталогов
Link-Адрес где лежит фаил

Но мне интересно может ли TREEVIEW получать 2 свойства (1 Name) и (2Link)
Первое своиство что бы имя отображалось в Дереве и второе по которому будет загружать TWebBroser
PM MAIL   Вверх
Crw
Дата 3.6.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 25.2.2008

Репутация: 3
Всего: 4



Node.data это на самом деле указатель, так что можно спокойно создать класс, с нужным количеством свойств, и преременую класа (в Делфи это указатель на клас) запихнуть в Node.data. Только потом надо будет этот клас освободить.
PM MAIL   Вверх
Anakin
Дата 4.6.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



А можно пример или Линк на где можно почитать.
А то у меня никак не получаетса передать компонента Веббросер линк на фаил что бы он его открыл.
PM MAIL   Вверх
Rrader
  Дата 4.6.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Цитата(Anakin @  3.6.2009,  22:53 Найти цитируемый пост)
Нет ((
А можно по подробней или как правельно должно быть. 

Я имел в виду, что Вы делаете переход не по той странице, адрес которой содержится в узле, а по странице с жестко зашитым названием 'Node.Data'. Я бы сделал так:
Код

procedure TForm1.FormCreate(Sender: TObject);
var
  LectionFile: TSearchRec;
begin
  Tree.Items.AddFirst(nil, 'Главная');
  if FindFirst('*.htm', faAnyFile, LectionFile) = 0 then
  try
    repeat
      Tree.Items.AddChild(Tree.TopItem, LectionFile.Name);
    until FindNext(LectionFile) <> 0;
  finally
    FindClose(LectionFile);
  end;
end;

procedure TForm1.TreeChange(Sender: TObject; Node: TTreeNode);
begin
  if Assigned(Node) then
    if Node.Level <> 0 then
      Web.Navigate('file://' + ExtractFilePath(ParamStr(0)) + Node.Text);
end;


Это сообщение отредактировал(а) Rrader - 4.6.2009, 15:37


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Crw
Дата 4.6.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 25.2.2008

Репутация: 3
Всего: 4



Небольшой урезаный пример:
1. Описываем свой класс с нужным набором переменных
Код
TMyNodeClass = class
 str:string;
 SomeNumb:integer;
end;

2. При создании итемов в дереве создаем также экземпляр этого класса, заполняем его переменные, только не освобождаем его сразу! Переменную созданного класса запихиваем в Data нужного итема дерева.
Для примера:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  TreeNode: TTreeNode;
  mnc:TMyNodeClass;
begin
  Tree.Items.Clear;
  TreeNode:=Tree.Items.AddFirst(nil, 'Главная');
  mnc:=TMyNodeClass.Create;
  mnc.str:='Main';
  mnc.SomeNumb:=1;
  TreeNode.Data:=mnc;
  
  TreeNode:=Tree.Items.AddChild(Tree.TopItem, 'hello');
  mnc:=TMyNodeClass.Create;
  mnc.str:='Child1';
  mnc.SomeNumb:=2;
  TreeNode.Data:=mnc;
end;

3. При смене (при клике) итема дерева получаем наш раньше созданный класс из поля Data определенного итема.
Пример:
Код
procedure TForm1.TreeChange(Sender: TObject; Node: TTreeNode);
var
  mnc:TMyNodeClass;
begin
  if Node=nil then
    exit;
  if Node.Data=nil then
    exit;
  mnc:=Node.Data;
  Showmessage(mnc.str);
end;

4. При удалении итема дерева не забываем освобождать память! В случае закрытия программы необходимо пройтись по всем итемам дерева и освободить созданные класы.
Код
mnc:=Node.Data;
mnc.Free;
Node.Data:=nil;


Это сообщение отредактировал(а) Crw - 4.6.2009, 18:26
PM MAIL   Вверх
RomanEEP
Дата 5.6.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 5
Всего: 8



Если сделать так:
Код

TMyNodeClass = class(TTreeNode)
  str:string;
  SomeNumb:integer;
end;

 то код станет заметно проще и удобнее:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  TreeNode: TMyNodeClass;
begin
  Tree.Items.Clear;
  TreeNode := Tree.Items.AddFirst(nil, 'Главная') as TMyNodeClass;
  TreeNode.str := 'Main';
  TreeNode.SomeNumb := 1;
  
  TreeNode := Tree.Items.AddChild(Tree.TopItem, 'hello') as TMyNodeClass;
  TreeNode.str := 'Child1';
  TreeNode.SomeNumb := 2;
end;


Код

procedure TForm1.TreeChange(Sender: TObject; Node: TTreeNode);
begin
  Showmessage((Node as TMyNodeClass).str);
end;


Код

procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
  var NodeClass: TTreeNodeClass);
begin
  NodeClass := TMyNodeClass; 
end;


и ничего удалять не надо - TreeView это сделает за тебя!
PM MAIL   Вверх
Crw
Дата 8.6.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 25.2.2008

Репутация: 3
Всего: 4



RomanEEP +1 smile
Даже не думал что так можно.
PM MAIL   Вверх
Anakin
Дата 9.6.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



пасиба всем. За хэлп.
Но я попробовал пример Rrader И всё работет гладко.
Я Вообше пишу программу наподобие DelphiWorld но пишу для себя и пишу лишь в образовательных целях.
Если кто Хочет присоеденитса или чтото посоветовать В Личку пишите.
PM MAIL   Вверх
Beltar
Дата 14.6.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 3
Всего: 7



Я могу вам дать исходник своего аналога Delphi World. Тоже когда-то проникся этой софтиной, только не работала она у меня.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.