КОнечно дорогой камрад, всю грязную и рутинную работу должен сделать кто-то другой.
Не понял ваш ответ, это наверное должно быть что то умное?
Добавлено (06.06.2013, 22:11) --------------------------------------------- Напечатайте что то умнее, а то вырывать слова из контекста любой может. Шануйся.
Добавлено (06.06.2013, 22:35) --------------------------------------------- А теперь позвольте перейти к делу.
Добавлено (06.06.2013, 23:51) --------------------------------------------- На форме есть кнопка "OpenDir" элемент 1, после нажатия которого появляется меню выбора каталога с проектами, после выбора которого, загружается путь к нему в элемент 2 "Label1" и в элемент 3 "TreeView" в виде дерева папок. Теперь представим себе ситуацию, что в папке у нас несколько проектов, выбирая один из них (прямо в элементе №3) нам нужно научить загружать список "нодов"\папок прямо в "ListBox" т.е . элемент номер 4, одновременно загружая содержание файла main.lua в элемент №7. Кнопки "Load" и "Clear" - соответственно єлементы №№5 и 6 служат для очистки и загрузки списков, но их функциональность под вопросом. Вот так я вижу первый этап работы программы, имея на руках более-менее рабочий пример выше описанного даст понять, что нужно добавить, что нужно удалить отсюда. Я выложу сейчас то, что уже готово, но в моем проекте нет ни одной строчки кода, касающегося выше описанного, только элементы на форме, потому если вы знаете как хоть что то реализовать, буду вам очень благодарен. Исходник.
Добавлено (07.06.2013, 00:06) --------------------------------------------- Да, чуть не забыл, я не прошу что бы за меня сделали работу, можете просто поделится кодом или хотя бы укажите на мои ошибки.
procedure FindDirectories; //Ищет папки и выводит их список var r:integer; SR:TSearchRec; //Специальная запись для просмотра результатов поиска begin r:=FindFirst('*',0,SR); //Находим первый файл по маске "*" (как в поиске Проводника) while r=0 do //Если ничего не найдётся, r будет меньше нуля begin if SR.Attr=faDirectory then //Если найденный файл - папка MainFrm.VirtList.AddItem(SR.Name,nil); //Добавляем имя в список r:=FindNext(SR); //Продолжаем поиск end; FindClose(SR); //Прекращаем поиск, освобождая поисковый движок end;
burlachenko, хорошо, я уже смотрел этот движок и пару официальных примеров смотрел. Разберёмся.
Цитата (burlachenko)
во вторых: это будет не на русском языке.
Ну, знаешь ли, перевести что-то всегда проще, чем создать с нуля, тем более, что проект с открытыми исходниками и перевести надписи не составит труда.
Цитата (shubniggurath)
КОнечно дорогой камрад, всю грязную и рутинную работу должен сделать кто-то другой.
К этому и стремится человек, автоматизируя всевозможные процессы. Иначе зачем нам вообще нужен компьютер?
Цитата (burlachenko)
Тяжело запомнить переходы в нескольких десятках комнатах, программа просто нарисует их нам. (Вот это наверное будет самое тяжелое ("хотспоты"), так как я еще не разобрался полностью
Вот это мне непонятно до конца, эти хотспоты. Я понял (вики не читал, просто копался в проекте-примере), что хотспоты делаются методом этакой маски, то есть рисуется область определённого цвета (порядок цветов соответствует палитре цветов PNG) в соответствующем месте, но как вычисляется это место - непонятно. Ведь у нас есть шесть картинок, по одной на каждую сторону куба, а хотспоты рисуются только на одной картинке - это типа какая-то определённая развёртка куба?
Цитата (burlachenko)
Вообще движек работает с уже подготовленными ресурсами
Верно, сейчас Pipmak - это только плеер-движок, но его авторам было бы совсем неплохо создать конструктор или набор связанных утилит с возможностью компиляции проекта и прикрепления к скомпилированному проекту плеера... Хотя, в конце-то концов, это только 0.2.7 версия, у них всё ещё впереди...
Цитата (burlachenko)
Почему выбрал Делфи - ответ где то сверху, потому что есть бесплатная кроссплатформенная среда, с не самым "худым" редактором GUI.
Сегодня уже у многих сред разработки есть хорошие редакторы форм, даже для Ассемблера такую штуку сделали... Кроссплатформенность в данном случае не нужна. Большинство сидит на Windows, вот и нужно делать под Windows, а вот воспроизводить проекты можно где угодно... Да и вообще, кросс-компиляция в Lazarus - это лишняя головная боль, хотя, конечно, Lazarus может скомпилировать почти на что угодно...
Цитата (burlachenko)
Я выложу сейчас то, что уже готово, но в моем проекте нет ни одной строчки кода, касающегося выше описанного, только элементы на форме
Ну-у-у, я-то думал, что там уже есть какой-то код... А кучу компонентов на форму и я могу набросать, так что мне это не нужно.
Цитата (burlachenko)
Как это всё можно прикрутить т TreeView?
Вместо AddItem нужно использовать TreeView.Items.Add (в самом простейшем случае). Вообще, это сложный компонент, но и позволяет много чего сделать... Вот только вопрос - оно тебе нужно? Ведь юзеру как бы уже не нужно будет знать, где какие файлы лежат, всё за него сделает эта программа.
Вот это мне непонятно до конца, эти хотспоты. Я понял (вики не читал, просто копался в проекте-примере), что хотспоты делаются методом этакой маски, то есть рисуется область определённого цвета (порядок цветов соответствует палитре цветов PNG) в соответствующем месте, но как вычисляется это место - непонятно. Ведь у нас есть шесть картинок, по одной на каждую сторону куба, а хотспоты рисуются только на одной картинке - это типа какая-то определённая развёртка куба?
Судя по тому уроку, что есть на вики там есть два способа создания "хотспотов", первый - создание .png файла, с указанием его места графически. И второй, дописав несложный код в файл node.lua, в котором указано местоположение "хотспотов" в координатах (цифрах). Если есть желание разобратся в этом вопросе лучше, я переведу нужные уроки на русский. Но если честно, меня на данный момент интересует загрузка проекта игры и просмотр её ресурсов в этом "помощнике". Как я упоминал ранее, хочется сначала научить программу правильно читать данные проектов, а потом потихоньку реализовать в ней функции редактора.
Цитата
Сегодня уже у многих сред разработки есть хорошие редакторы форм, даже для Ассемблера такую штуку сделали... Кроссплатформенность в данном случае не нужна. Большинство сидит на Windows, вот и нужно делать под Windows, а вот воспроизводить проекты можно где угодно... Да и вообще, кросс-компиляция в Lazarus - это лишняя головная боль, хотя, конечно, Lazarus может скомпилировать почти на что угодно...
Для Ассемблера я тоже видел, а теперь вопросы: сколько среди них легких и бесплатных и сколько людей найдется, что бы помочь мне в создании GUI, например на Ассемблере?. Знаю что есть ещё и Visual Studio (экспресс вроде бесплатная), но она занимает не мало места на компьютере и я не слышал чтобы кто то в школе например изучал информатику, иcпользуя эту IDE. Вот про Delphi в школах слышал, что дает мне некоторую уверенность, что количество товарищей которые помогут реализовать сей проект будет больше. Насчет кроссплатформенности, движек работает не только под виндовс (некоторое время сидел под линуксом и конструкторов для игр там явно не хватает). К тому же для компиляции под другую ось не нужно сильно заморачиваться (то есть кросплатформенность мы получаем "бесплатно"), даже если возникнут с этим проблемы, достаточно будет найти человека который знает как решать такие проблемы (никто же не запрещает обращаться к официальному форуму по Lazarus)
Код
Ну-у-у, я-то думал, что там уже есть какой-то код... А кучу компонентов на форму и я могу набросать, так что мне это не нужно.
Вобще то там есть немного кода, а именно - на второй вкладке реализована возможность загрузки "фейсов" панорамы для предпросмотра, есть примитивный индикатор "контроля правильности", сделанный на шейпах. Была такая задумка, что бы программа подсказывала пользователю о правильных действиях. Например для панорамы нужно загрузить 6 графических файлов, те места где они отсутствуют отмечаются красным цветом, там где файл загружен - зеленым цветом. Хотел ещё реализовать что то подобное для .lua файлов, но это уже отдельная тема. Для меня не программиста это много .
Цитата
Вместо AddItem нужно использовать TreeView.Items.Add (в самом простейшем случае). Вообще, это сложный компонент, но и позволяет много чего сделать... Вот только вопрос - оно тебе нужно? Ведь юзеру как бы уже не нужно будет знать, где какие файлы лежат, всё за него сделает эта программа.
Пускай себе будет сложным, просто я не понимаю как еще можно реализовать навигацию по каталогам, наблюдая за этим через окно программы. Представьте себе ситуацию, на компьютере есть несколько проектов, которые лежат в разных папках. Для такой работы у TreeView нет конкурента среди компонентов. У разных юзеров на компьютере каталоги с проектами могут находится в разных местах, при первом запуске программы необходимо указать ей, что именно мы хотим сейчас открыть, а программа после этого должна подхватить всё остальное (я имею ввиду постройка списка нодов, загрузка фейсов из выбранного нода, загрузка содержания луа файлов и т.д.) Честно скажу - я здесь туплю, это потому что я не правильно задаю вопросы. Я попробую найти в интернете решение, постараюсь дальше задавать правильные вопросы.
Добавлено (08.06.2013, 22:21) --------------------------------------------- Посмотрел, что предлагает интернет по TreeView, нашел вот такой код:
Код
procedure FilePathToTreeNode(aTreeView:TTreeView; aRoot:TTreeNode; Path:string; Recurse:boolean); var NewNode : TTreeNode; SRec : TSearchRec; begin if FindFirst(Path + '*.*', SysUtils.faAnyFile, SRec) = 0 then repeat if (sRec.Name = '.') or (sRec.Name = '..') then Continue;
NewNode := aTreeView.Items.AddChild(aRoot, SRec.Name); if Recurse and ((srec.Attr and sysutils.faDirectory) <> 0) then FilePathToTreeNode(aTreeView, NewNode, Path + srec.name + '\', True);
until FindNext(SRec) <> 0; end;
//Call it like this: FilePathToTreeNode(TreeView1, nil, 'c:\', True);
Я так понял, код позволяет загружать каталог 'c:\' в TreeView, "
Код
//Call it like this: FilePathToTreeNode(TreeView1, nil, 'c:\', True);
" - это так он вызывается. Но мне надо загружатm только указанный мной каталог. Пример того, как его открыть у меня есть:
Код
procedure TForm1.Button_OpenDir01Click(Sender: TObject); var dir:string; a:integer;
begin
if SelectDirectory('Выберите каталог','',dir) then begin .................................................. end; end;
Как их объединить? Наверное сначала нужно "извлечь" путь открываемого каталога после
Код
if SelectDirectory('Выберите каталог','',dir)
и поместить его где то сюда
Код
FilePathToTreeNode(TreeView1, nil, 'c:\', True);
? Или здесь ещё чего то не хватает?
Добавлено (12.06.2013, 17:46) --------------------------------------------- Решил вопрос с загрузкой дерева, но не до конца, код под спойлером.
Код
procedure FilePathToTreeNode(aTreeView:TTreeView; aRoot:TTreeNode; Path:string; Recurse:boolean); var NewNode : TTreeNode; SRec : TSearchRec; begin if FindFirst(Path + '*.*', SysUtils.faAnyFile, SRec) = 0 then repeat if (sRec.Name = '.') or (sRec.Name = '..') then Continue;
NewNode := aTreeView.Items.AddChild(aRoot, SRec.Name); if Recurse and ((srec.Attr and sysutils.faDirectory) <> 0) then FilePathToTreeNode(aTreeView, NewNode, Path + srec.name + '\', True);
if SelectDirectory('Выберите каталог','',dir) then begin FilePathToTreeNode(TreeView1, nil, 'c:\', True); end; end;
Не знаю как загрузить дерево выбранного каталога, по умолчанию загружается структура диска C. Пробовал вместо dir использовать переменную(как путь), приблизительно так:
Код
if SelectDirectory('Выберите каталог','',[color=red]S[/color]) then begin FilePathToTreeNode(TreeView1, nil, [color=red]S[/color], True);
но в этом случае в TreeView добавляется только папка(в одну строчку), без "плюсика" открытия всего дерева, может кто подскажет что можно сделать? Есть в дереве каталоги, вместо символов названия у них знаки вопросов. Здесь уже упоминалось что у Lazarusa проблемы с кириллицей, как их решить здесь? И пока что последний вопрос, как отобразить графически каталоги в TreeView? Видел примеры с ImageList, но пока мой метод проб и ошибок не дает результатов. Кроме того меня интересует вот ещё что, допустим я разберусь с отображением "графически", возможно ли отображать папки с особым названием иначе? (то есть папки с названием например "проект..pipmak" или "untitled.pipmak" отображать другим значком). Знаю что в ImageList можно добавлять иконки которые нужно отобразить, после чего им присваивается индекс, но мне попадались примеры смены изображения по степени вложенности каталога, но не по названию его, решается ли этот вопрос?
Добавлено (13.06.2013, 20:49) --------------------------------------------- Ау!! Здесь есть живые?
Добавлено (23.11.2013, 00:55) --------------------------------------------- Поднимаю тему снова. Мне тяжело сейчас находить время на такое хобби, но и бросать не хочется, жалко бросать идею, в шапке темы уже упоминалось о том, что за помощь в разработке возможна оплата труда. Условно поделю разработку проекта этого GUI на 4 части. За реализацию каждой из частей могу заплатить по 6,5$ (или по 50 гривен, или по 210 рублей). Если вся основная работа будет сделана оптом - оплата будет составлять 1000 рублей (или эквивалент этой сумы в долларах или гривнах), оплата через вебмани или перечислением денег на телефон (для Украины). Если будут предложены рабочие куски кода для реализации выше описанного, оплату для такого вида "труда" тоже можно обговорить. Жду ваших предложений.
В принципе могу попробовать на Qt/С++ написать, т. к. с паскалем в последний раз в 2009 году работал в институте и уже всё забыл. С Qt уже третий год работаю. На нём мне кажется проще сделать и с кроссплатформенностью нет проблем. Но можно и паскаль повспоминать. Что нужно сделать то? Не следует обманывать инспектора Pipmak Assistant Love2D Exporter Love2D-Helpers Old Consoles Games
В принципе могу попробовать на Qt/С++ написать, т. к. с паскалем в последний раз в 2009 году работал в институте и уже всё забыл. С Qt уже третий год работаю. На нём мне кажется проще сделать и с кроссплатформенностью нет проблем. Но можно и паскаль повспоминать.
Здравствуйте товарищ Snake174, на данный момент не принципиально на чем будет сделана работа (кросплатформенность желательна, так ка я некоторое время сидел на Linux Mint, для игроделов на не "виндовс ос" там скудненький выбор). Хотя если есть возможность сделать что то более функциональное и толковое только под "виндовс", я думаю это тоже будет не самый худой вариант.
ЦитатаSnake174 ()
Что нужно сделать то?
На первых порах пока ознакомьтесь с тем что описано в шапке и в некоторых моих постах. А вы(уже в ЛС) напишите мне как мне лучше объяснить вам, чего я хочу от программы. как она должна выглядеть и всё такое. Сейчас на работе, позже вам отпишусь. Спасибо что откликнулись. MaximTG