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

Тема в разделе "Visual Basic", создана пользователем gerich, 25 авг 2007.

  1. gerich

    gerich Гость

    Вобщем я предлагаю написать программу для расширения возможностей любого приложения.
    Отдалённо это будет напоминать язык программирования, или точнее макросы в 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 запускает оператор на выполнение.

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

    Gamlet Well-Known Member

    Регистрация:
    8 янв 2007
    Сообщения:
    609
    Симпатии:
    0
    А зачем тебе это? Вообще я могу поучавствовать. У меня есть проэктик, там это можно использовать. :eek:
     
  3. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Блин, неужели ты и в правду собрался это на бейсике писать?
     
  4. Gamlet

    Gamlet Well-Known Member

    Регистрация:
    8 янв 2007
    Сообщения:
    609
    Симпатии:
    0
    Ну мне вообще такой размах не нужен. Я бы написал свой текстовый редактор и встроил туда такую функцию. А такое писать я сам не понимаю зачем. :eek:
     
  5. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Eclipse PDE имхо эталонная реализация расширяемости. смотрим, учимся, а потом еще раз думаем, чтоит ли браться за столь объемный проект.
     
  6. Seva

    Seva Гость

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

    Azrael Гость

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

    gerich Гость

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

    Пусть у нас есть форма, на которой кнопка(cmdCicl).
    И есть действие при нажатии
    Код (Text):
    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 Это превратится примерно в следующее
    Код (Text):
    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
    Поскольку это только пример, то не обращайте на его громоздкость.

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

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

    gerich Гость

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

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

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

    Вложения:

    • structura.GIF
      structura.GIF
      Размер файла:
      4,3 КБ
      Просмотров:
      93
  10. Pasha

    Pasha Гость

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

    gerich Гость

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

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

    gerich Гость

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

    Вложения:

    • example.GIF
      example.GIF
      Размер файла:
      5,1 КБ
      Просмотров:
      103
  13. Pasha

    Pasha Гость

  14. gerich

    gerich Гость

    А мне всё равно хочется это делать и мне всё на этом не отговаривайте!!! :(
     
  15. Pasha

    Pasha Гость

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

    Gamlet Well-Known Member

    Регистрация:
    8 янв 2007
    Сообщения:
    609
    Симпатии:
    0
    Никто не отговаривает. Я лично пытаюсь понять-зачем это надо? Может проще втавить в текстовик фунций побольше и сделать невизуальной средой разработки. Новый язык на такой основе-очень даже интересгая мысль. Я так думаю. <_< ВБ6 изживается. Немногоие хорошие праграмисты пишут именно на нем. Ели создать такой упрошенный язык-он может стать популярным. :)
     
  17. Pasha

    Pasha Гость

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

    gerich Гость

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

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

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

    Pasha Гость

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

    Gamlet Well-Known Member

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

Поделиться этой страницей