Присоединяйтесь к совместному написанию программы!

  • Автор темы gerich
  • Дата начала
G

gerich

Гость
#1
Вобщем я предлагаю написать программу для расширения возможностей любого приложения.
Отдалённо это будет напоминать язык программирования, или точнее макросы в Word и Excel.
Смысл такой.
Представим себе некоторый текстовый редактор. Разработчик программы хочет, чтобы она не оставалась монолитной, и пользователь мог бы, к примеру, добавить в неё новую функцию. Тогда он создаёт в нашей проге специальный файл, после чего он может назначить этот файл в качестве реакции на нажатие какой-либо кнопки.

Таким образом придётся создать сразу две части этого приложения: программа для создания таких файлов и ActiveX DLL-ку, которая эти файлы будет выполнять.

Поскольку маловероятно, что мы можем предугадать всё, что потребуется конечному пользователю, то неплохо было бы сделать возможность расширения программы.
Моё решение этой проблемы такое.
Вся программа состоит из нескольких DLL библиотек.
В главной библиотеке определяются все общие классы, которые могут быть использованы другими частями программы.
Вот они:
Класс Document. В нём содержатся все объекты. Он как раз и представляет собой эту новую функция, которая добавляется к текстовому редактору. У этого класса есть свойства Objects(список всех объектов, которые содержатся в Document) и Value(значение, которое возвращается Document) и методы Run(вызывает стартовый оператор) и Save(сохранение)
Класс Object. От этого класса наследуются Document, Value и Operator. Он может быть сохранён и загружен из файла методами Load, Save.
Класс Value. Имеет свойство Value, которое возвращает определённое значение. От этого класса унаследованы классы, которые реализуют функции, например функция sin может быть представлена классом, у которого есть свойство Angle(угол) и переопределённое свойство Value, которое возвращает синус этого угла.
Класс Operator. В нём определённое действие. Это аналог процедуры в языках программирования. Метод Run запускает оператор на выполнение.

Я искренне надеюсь, что найдутся программисты-энтузиасты, которые захотят ко мне присоединиться.
:o
 

Gamlet

Well-Known Member
08.01.2007
525
0
#2
А зачем тебе это? Вообще я могу поучавствовать. У меня есть проэктик, там это можно использовать. :o
 

Normann

Well-Known Member
09.08.2007
168
2
#3
Блин, неужели ты и в правду собрался это на бейсике писать?
 

Gamlet

Well-Known Member
08.01.2007
525
0
#4
Ну мне вообще такой размах не нужен. Я бы написал свой текстовый редактор и встроил туда такую функцию. А такое писать я сам не понимаю зачем. :o
 

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#5
Eclipse PDE имхо эталонная реализация расширяемости. смотрим, учимся, а потом еще раз думаем, чтоит ли браться за столь объемный проект.
 
S

Seva

Гость
#6
Идея, в общем, понятна... но, как уже не раз говорилось- это кому-то будет нужно? в любом случае помочь чем смогу не против!
 
A

Azrael

Гость
#7
Вобщем я предлагаю написать программу для расширения возможностей любого приложения.
Отдельный программный модуль для программистов с целью прикрутки к существующим приложениям?
Тогда уж лучше, наверное, на Java, либо .NET ?
 
G

gerich

Гость
#8
Я хочу сделать удобную для программистов библиотеку. Я описал довольно-таки узкую сферу применения проги. Это не обязательно какая-то новая функция к программе. Это ещё и короткий код и(или) более понятный код.
Я уже пробовал делать нечто подобное.

Пусть у нас есть форма, на которой кнопка(cmdCicl).
И есть действие при нажатии
Код:
Private Sub cmdCicl_Click()
Dim i As Long
Dim j As Long
For i=1 To 10
For j=1 To 10
MsgBox i*j
Next j
Next i
End Sub
Тогда при использовании нашей DLL Это превратится примерно в следующее
Код:
Private Doc As Document

Private Sub Form_Load()
Dim Low As LongNumber
Dim Up As LongNumber
Dim I As LongNumber
Dim J As LongNumber 
Dim Step As LongNumber 
Set Doc = CreateEmptyDoc			  'Создать док и добавить его в свой же список объектов
Doc.Active=True							  'Чтобы все новые объекты записывались в этот док
Set I = CreateEmptyLongNumber	  'Создать пустое число и добавить его в текущий док
Set J = CreateEmptyLongNumber
Set Low = CreateLongNumber(1)		'Создать заданное число и добавить его в текущий док
Set Up = CreateLongNumber(100)
Set Step = CreateLongNumber(1) 
'Стартовый оператор
Doc.StartOperator=Cicle(I, Low, Up, Step, Cicle(J, Low, Up, Step, CreateMsgBox(CreateMult(I,J))))
End Sub

Private Sub cmdCicl_Click()
Doc.Run 'запуск дока
End Sub
Поскольку это только пример, то не обращайте на его громоздкость.

Если подумать, то разработка библиотеки будет заключаться в написании небольшой основной части,
а затем в дописывании к ней огромного числа готовых действий и функций.

Сегодня часа в три дня или вечером я ещё чё-нибудь напишу-а вы задавайте вопросы и давайте комментарии и пожелания
 
G

gerich

Гость
#9
Вот, как и обещал, выкладываю свою работу DocScript.rar. Это ядро проги.
Проект не полный. Запускать не пытайтесь. Просто повнимательнее почитайте код. Там много коментов

Для создания полноценной программы надо добавить к этому ядру множество новых библиотек
В каждой из них будут находиться классы, которые будут потомками основных классов TObject, TValue или TOperator.
Пример отношений между классами смотри в прикреплённом файле structura.GIF

Для передачи параметров функциям достаточно назначить значениям полей функции соответсвующие объекты
 

Вложения

P

Pasha

Гость
#10
Для: gerich
Никак не могу понять, в чем же смысл мегаразработки. С какой стати программисту для добавления новой функции в, скажем, текстовый редактор, не вписать ее в редактор напрямую. Может быть не в сам редактор, а в какой-то плагин для него. Практически для всех платформ существуют стандартные подходы к написанию плагинов, например System.AddIn и Visual Studio Tools for Application для .net (и VB.NET). Зачем изобретать велосипед, да еще и реализовавать его на вымирающем 6-м VB?
 
G

gerich

Гость
#11
На VB6 - потому что я на нём лучше всего. А зачем - мне хочется что-то делать а не просто сидеть в форуме и читать чужие сообщения

И ещё я бы хотел, чтобы продвинутые пользователи программ могли бы делать свои функции.
А как?
По-моему, в форме языка программирования это никому не надо.
Поэтому лучше было бы всё представить в форме графа, где каждая вершина-оператор или значение, а линии, соединяющие их - назначали бы параметры объектов
Если непонятно - сейчас картинку нарисую
 
G

gerich

Гость
#12
Вот это пример той программки с циклами на этапе разработки пользователем
Нарисовано не супер-ну и ладно. Кружки это значения, прямоугольники-операторы
 

Вложения

G

gerich

Гость
#14
А мне всё равно хочется это делать и мне всё на этом не отговаривайте!!! :(
 
P

Pasha

Гость
#15
Для: gerich
Да никто не отговаривает, просто предлагаю изучить другие решения той же проблемы.
 

Gamlet

Well-Known Member
08.01.2007
525
0
#16
Никто не отговаривает. Я лично пытаюсь понять-зачем это надо? Может проще втавить в текстовик фунций побольше и сделать невизуальной средой разработки. Новый язык на такой основе-очень даже интересгая мысль. Я так думаю. <_< ВБ6 изживается. Немногоие хорошие праграмисты пишут именно на нем. Ели создать такой упрошенный язык-он может стать популярным. :)
 
P

Pasha

Гость
#17
Для: Gamlet
VSTA позволяет прикрутить к своему приложению поддержку макросов. Примерно так, как это сделано в Word/Excel, с кнопочками Record/Run/Edit. Куда уж упрощенее.
Он конечно платный, но это не мешает разобратся в нем и украсть идею.
 
G

gerich

Гость
#18
Gamlet, я конечно чуток тупенький(я начинающий программюга), потому что не понял, что ты имел ввиду по "сделать невизуальной средой разработки". Объясни по новой.

Pasha, а чё такое VSTA?

Да и кстати мой код кто-нибудь смотрел? А то я мучался, полдня его переписывал занова и комментировал - обидно, если всё зря делал :unsure:
 
P

Pasha

Гость
#19
Для: gerich
Visual Studio Tools for Applications, чуть выше была ссылка.
 

Gamlet

Well-Known Member
08.01.2007
525
0
#20
Для: gerich
Есть 2 варианта.
1.Делать ехе"ШНИК. Где-то видел такой исходник. Только не помню. Но это не лучший вариант.
2.Знаешь язык Делферон Там вообще нет ехе. Там делферон мащина. И файла со воеобразнами командами для нее. Но мне нравится больше идея следующая:
Есть папка с прогой. Там есть файл ехе (допустим его имя будет Прога.ехе, или любое другое он не меняется.Своеобразная машина впапке с прогой) и файл (мне нравится им config) в котором хранятся инструкции-команды. + естественно ресурсы(рисунки и т.д.) :)