Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

SergBSI

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Немного не в тему - в

Всего записей: 516 | Зарегистр. 09-12-2003 | Отправлено: 11:03 05-06-2008
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хех... все так же не хватает ума нарисовать как на картинке выше...
как можно производить "навигацию" по узлам.
К примеру : есть путь "D:\Muzic\Afrodite\Afrodite\AfroditeThe Best - 2005.mp3" нарисуем все узлы ,а потом нужно нарисовать "D:\Muzic\Afrodite\Aftershock\08 - Interlude.mp3", у сторк есть общее начало "D:\Muzic\Afrodite\" но разные окончания, значит мне нужно начать рисовать узлы второй строки с середины образно коворя узлов соответствующих первой строке начиная с  "Afrodite" вопрос в том как на него выйти ? как его найти ?
 
Добавлено:
Ramazan
к сожалению твое решение тоже работает не адекватно
     
мне кажется наиболее эффективным решением создать список путей с интересующими файлами и по ним выстроить структуру папок и файлов, вопрос в том как вернуться к нужному узлу, дабы продолжить строительство структуры с него ?

Всего записей: 1729 | Зарегистр. 02-08-2003 | Отправлено: 11:36 05-06-2008
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Erazer
посмотри например на drkb.ru
пример процедуры как получить название с путем всех файлов и диреторий с указанной директории и по ней посторой дерево

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 12:37 05-06-2008
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greenpc как получить список файлов с путями не есть проблема, проблема построить по ним дерево... а точнее как реализовать возврат к какому -либо произвольному узлу,чтобы начать строить от него.

Всего записей: 1729 | Зарегистр. 02-08-2003 | Отправлено: 14:10 05-06-2008
Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Erazer
Ну да, недосмотрел...

Код:
 
       // если файл то добавляем узел файла
      //------------
      cNode := VT.AddChild(NewNode); // Добавляем потомка во второй уровень
      FileNode := VT.GetNodeData(cNode);
      if Assigned(FileNode) then
        with FileNode^ do
        begin
          Name := Dir+SearchRec.name;
          ImageIndex := 1; // номер картинки в imagelist - файл
        end;  
 

а также поменяй порядок изображений в imagelist-e Не нужно, все правильно
да, и еще, если не хочешь видеть полные пути в узлах дерева, убери Dir в присваивании

Код:
 
Name := Dir + SearchRec.name;
 


----------
Per rectum ad...

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 14:50 05-06-2008 | Исправлено: Ramazan, 14:59 05-06-2008
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну да, так лучше но все равно немного корявоватые узлы получаются думаю внести некую иерархию в процесс построения,сначала stringlist с путями,а потом анализируя их строить узлы, т.к. налету как кажется невозможно построить правильно т.к. невозможно применить сортировку например.
должно быть :  
 
а получается:  

Всего записей: 1729 | Зарегистр. 02-08-2003 | Отправлено: 15:40 05-06-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста. Мне надо реализовать такую вещь. Программа написана. Надо сделать так, чтобы программу возможно было запустить только один раз. То есть, пока программа работает, второй ее запуск невозможен. Ну к примеру, как ICQ та же самая. Если не трудно ссылку на готовую реализацию, но если нет - хотя бы в какую сторону копать?  
Заранее спасибо!

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 16:56 05-06-2008 | Исправлено: Antananarivu, 16:57 05-06-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
есть много способов. например через мютекс.
Я когда то делал по простому. При запуске программа создавала текстовый документ и писала туда свой pid. После завершения работы - удаляла
Если при запуске файл обнаруживался, то проверялся pid и потом искала процесс. если найден - переключалась на него. если нет - выводила окно с сообщением, что предыдущий раз программа была неудачно завершена. Код работал очень хорошо.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:04 05-06-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, не встречали ли вы исходные коды любого плагина для программы FreeMemory? На сайте автора глухо, как и с почтой.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 18:58 05-06-2008
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
http://drkb.ru/ там штук пять способов наверное как минимум

Всего записей: 1729 | Зарегистр. 02-08-2003 | Отправлено: 19:10 05-06-2008
Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Erazer
Сортировку дерева возможно произвести после его создания (см. TBaseVirtualTree.Sort в справке), например можно вставить после

Код:
 
FindClose(SearchRec);  
 

вызов

Код:
 
VT.Sort(NewNode, 0, sdAscending)
 

главное - не забыть определить OnCompareNodes

----------
Per rectum ad...

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 06:40 06-06-2008
AnalogXP

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, граждане программисты!
 
Помогите мне с такой задачей, не могу понять.
Вобщем есть уже готовая, рабочая программа - менеджер закладок. То есть ссылки из браузеров импортирую и дальше уже складываю их по категориям, проверяю на существование, задаю приоритет и т.д. Эти ссылки и категории импортируются в компонент VirtualStringTree.  
А теперь задача:
Нужно в программу добавить еще один VirtualStringTree, так чтобы в первом отображались только категории (папки), а во втором - только их содержимое (ссылки). Например кликаем по папке в первом VT, а во втором загружаем ее содержимое.
До этого я использовал такой метод загрузки и хранения ссылок программы: VT.LoadFromFile(), VT.SaveToFile(). Насколько я понимаю в данном случае этот метод не подходит, нужно отделить данные от какого либо VT, они должны быть общими для обоих компонентов, но каждый отображает только то что нужно.  
По форумам я надыбал кое какие примеры работы VT с обьектами, базами данных, но я так и не смог понять как пихнуть в них древовидную структуру.
В общем - понятия не имею как решить эту проблему. Кто нибудь с похожими задачами встечался? Я уже неделю мучаюсь - никак.  
Буду вам очень благодарен за любую помощь.

Всего записей: 25 | Зарегистр. 26-08-2007 | Отправлено: 23:26 06-06-2008
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
так и сделал " FindClose(SearchRec); VT.Sort(NewNode, 0, sdDescending);"
procedure TfmMain.VTCompareNodes(Sender: TBaseVirtualTree; Node1,
  Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
var
  FileNode1,FileNode2: PFileNode;
begin
  FileNode1 := Sender.GetNodeData(Node1);
  FileNode2 := Sender.GetNodeData(Node2);
  // folder are always before files
  if FileNode1.Name <> FileNode2.Name then
  begin
    // one of both is a folder the other a file
    if DirectoryExists(FileNode1.Name) then
      Result := -1
    else
      Result := 1;
  end
  else // both are of same type (folder or file)
    Result := CompareText(FileNode1.Name, FileNode2.Name);
end;
возникает другая проблема файлы сотрируются как надо "A->Z", а вот папки наоборот "Z->A".
Как бы заставить их сортироваться так как на картинке только чтобы папки сортировались так же как и файлы ?
 

Всего записей: 1729 | Зарегистр. 02-08-2003 | Отправлено: 02:38 07-06-2008
WSWCORP

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброе время суток уважаемые. Проблема такая... Есть куча таблиц DBF для работы используется Apollo. Как один раз открыв базу в основном модуле можно ее использовать в вызываемой DLL без повторного открытия? Буду премного благодарен за любые идеи!

Всего записей: 47 | Зарегистр. 16-08-2005 | Отправлено: 07:17 07-06-2008
Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Erazer
Я бы сделал так:

Код:
 
procedure TfmMain.VTCompareNodes(Sender: TBaseVirtualTree; Node1,
  Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
var
  FileNode1,FileNode2: PFileNode;
begin
  FileNode1 := Sender.GetNodeData(Node1);
  FileNode2 := Sender.GetNodeData(Node2);
  case FileNode1.ImageIndex + FileNode2.ImageIndex of // Подразумевается 0-папка, 1-файл
    0, 2: Result := CompareText(FileNode1.Name, FileNode2.Name);
        1: if FileNode1.ImageIndex = 0 then Result := -1 else Result := 1;
  end;
end;  
 

 
AnalogXP
А что мешает сохранять содержимое дерева категорий и содержимое дерева ссылок для каждого узла в первом дереве? (Как-то коряво звучит...) Т.е. если раньше у тебя вся инфа хранилась в одном файле, то теперь будет главный файл категорий (первое дерево) и множество файлов ссылок (по одному на каждую категорию), которые подгружаются динамически. Imho, если не заморачиваться с БД, наиболее простой способ.
 
Добавлено:
WSWCORP
Ссылку на открытый датасет передать в DLL как параметр?

----------
Per rectum ad...

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 07:49 07-06-2008
WSWCORP

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ramazan
А как примерно это можно реализовать?

Всего записей: 47 | Зарегистр. 16-08-2005 | Отправлено: 08:10 07-06-2008
Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WSWCORP
Из DLL экспортируй процедуру вида

Код:
 
procedure DoSomething(aDataset: TDataset); stdcall;
 

в ней - работа с таблицей.
В основной программе:

Код:
 
Table.Open;
DoSomething(Table);
 

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 08:55 07-06-2008
AnalogXP

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
AnalogXP
А что мешает сохранять содержимое дерева категорий и содержимое дерева ссылок для каждого узла в первом дереве? (Как-то коряво звучит...) Т.е. если раньше у тебя вся инфа хранилась в одном файле, то теперь будет главный файл категорий (первое дерево) и множество файлов ссылок (по одному на каждую категорию), которые подгружаются динамически. Imho, если не заморачиваться с БД, наиболее простой способ.  

Так я уже сделал. Спрятал ссылки в первом VT, и отображал только во втором. Но вот проблема:
Если я хочу редактировать, удалить ссылку (во втором VT), то изменения должны происходить в первом VT. Как работать с ссылками в первом VT через второй? Можно конечно через поиск, но это уже не дело.

Всего записей: 25 | Зарегистр. 26-08-2007 | Отправлено: 11:28 07-06-2008
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ramazan превосходный вариант, но он не решает проблемы:  

Цитата:
файлы сотрируются как надо "A->Z", а вот папки почему-то "Z->A".  
а хотелось бы чтобы файлы в предыдущей папке сортировались по "A->Z",и при этом располагались выше вложенных папок и сортировались и так же "A->Z".

Всего записей: 1729 | Зарегистр. 02-08-2003 | Отправлено: 11:36 07-06-2008 | Исправлено: Erazer, 11:41 07-06-2008
WSWCORP

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ramazan
Все работает прекрасно... только не с DBF из под Apollo... А от Apollo уйти нельзя, т.к. в таблицах есть индексы выражений, BDE их просто не открывает...

Всего записей: 47 | Зарегистр. 16-08-2005 | Отправлено: 12:01 07-06-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru