ЛОГИЧЕСКАЯ СТРУКТУРА ПРОЦЕДУРЫ (ЛСП)
И ГРАФИЧЕСКИЙ РЕДАКТОР ТЕКСТА ПРОГРАММЫ
для ДАЛВЯЗ 2
Вложение:
dal_vjaz_2.JPG [ 56.38 КБ | Просмотров: 15064 ]
Вложение:
dal2_082.rar [375.43 КБ]
Скачиваний: 477
ВНИМАНИЕ: кто хочет полностью понимать, о чем идет речь дальше, тот
должен сначала прочитать файл dalvjaz2_description.pdf, размещенный
в этой теме ранее, в сообщении от 6 апреля 2012 г.
В конце года я решил проапгрейдить dalvjaz2 до уровня 0.82 (многое
еще не доработано, поэтому и не 1.00).
Главные особенности:
1. Полная и мини формы схемы (переключение по F2).
2. Переключение между цветными и черно-белыми значками по кнопке
"цв.зн".
3. Исчезло окно ЛСП, теперь работа с ЛСП реализована в форме
графического редактирования схемы.
4. Новый мышиный интерфейс: у мыши маловато кнопок, с помощью
клавиатуры я решил это исправить.
Традиционные приемы работы с мышью используются в dalvjaz2 в
следующих случаях:
- нажимаем правую кнопку и тащим схему в окне просмотра в нужном
направлении;
- щелчок левой кнопки по элементу открывает окно редактирования
элемента;
- работа с полосами прокрутки и колесиком - щелкаем по нужной
полосе и двигаем схему по вертикали или по горизонтали.
Нестандартная работа с мышью:
- наводим мышь на элемент и нажимаем клавишу клавиатуры:
1) F2 при мини-схеме: переход к полной форме схемы, а выбранный
элемент находится в центре экрана;
2) "1": создать действие после элемента;
3) "2": создать условие IF-ELSE-END после элемента;
4) "3": создать дополнительную ветку условия справа от IF или
ELSE IF;
5) "4": создать цикл после элемента;
6) "E": вставить из буфера хранения после элемента или справа от
ветки условия;
7) "R": вставить из буфера копирования после элемента или справа
от ветки условия.
- выделение элементов схемы:
1) нажимаем клавишу Ctrl
2) наводим мышь на элемент, он выделяется белым (основной элемент)
или синим (подчиненный элемент) цветом; при этом ELSE и END
выделяются как кружочки (после них, кстати, тоже можно создавать
или вставлять элементы)
3) после отпускания клавиши Ctrl выделяются все остальные элементы
выделения, например для условия - все элементы условия, для
ветки условия - все элементы ветки, для цикла - все элементы цикла.
Клавиатурные операции:
"A": восстановление схемы из буфера отката, сейчас реализован откат
на 1 шаг;
"Q": поместить выделение в буфер хранения, выделение удаляется с
экрана;
"W": поместить выделение в буфер копирования, выделение гасится, но
элементы выделения остаются на экране.
После копирования элементов из буфера (по "E" или "R") содержимое
буфера сохраняется (кстати, буфера хранения и копирования
сохраняются и при переходе от одной схемы к другой).
"F3": создание новой схемы после ввода в комбобоксе выбора схем
имени новой схемы.
5. По флажку "N стр" рядом с элементами выводятся номера их строк
в файле. Это удобно в режиме ПРОСМ (задается в файле конфигурации),
при котором внесение изменений в просматриваемый файл блокировано.
6. Поле рисунка и сокращения выполняет те же функции, что и раньше.
Имя "<<<<" задает минимизированный вывод элемента схемы как для
полной, так и для мини форм схемы. Это удобно, если задан какой-
нибудь выразительный значок.
7. Упрощение внутренней логики работы программы:
- работа с файлами возложена на дельфийские TListBox-ы,
LoadFromFile, SaveToFile - и дело в шляпе;
- работа со схемами - это работа с ЛСП, обернутой в графическую
оболочку.
Массива m_lsw больше нет, его роль теперь выполняет массив
tek_alg.m_el: при чтении схемы все элементы помещаются туда и
получают каждый свой уровень, соответствующий, говоря упрощенно,
отступу при вводе структурированного текста программы.
Но в считываемом программой dalvjaz2 тексте отступов может не быть
вообще - уровни элементов формируются в зависимости от типов
элементов.
Из массива tek_alg.m_el при помощи процедуры
Tform_ls.b_sozdatx_shemuClick
создаем схему, водя по которой мышью наводим указатель мыши на
прямоугольник одного из элементов. Вот и вся графика.
После всех вышеперечисленных действий над элементами сначала
изменяется ЛСП схемы, находящаяся в массиве tek_alg.m_el, а после
этого вся схема строится заново (исключение - процедура выделения
элементов, после выделения элемента перерисовывается только этот
элемент)
- отступы нужны только программистам, но не программе, поэтому
после чтения файла с помощью LoadFromFile отступы удаляются, а
восстанавливаются обратно только при создании новой версии файла
- файлы со схемами и текстовыми записями хранятся в массиве
m_fajlow: array[0..MAKS_FAJLOW] of t_fajl;
m_fajlow[n].ubuf - указатель на TListBox
m_fajlow[MAKS_FAJLOW] - рабочий буфер, содержит 5 рабочих
записей:
1) рабочая запись для редактирования схемы
2) запись создания элемента
3) запись (буфер) хранения
4) запись (буфер) копирования
5) запись (буфер) отката
Например, при сохранении выделения в буфере хранения схема (кроме
выделенных элементов) копируется в рабочую запись, а выделенные
элементы помещаются в буфер хранения.
После этого схема восстанавливается из рабочей записи.
Если считывание схемы из рабочей записи произошло без ошибок, то
схема копируется в запись файла, из которой сначала и была считана,
а перед этим старая версия записи помещается в буфер отката.
Желающие отследить это более подробно могут изучить исходный код
модуля u_files.pas
8. Работа с данными как со схемой, состоящей из одних действий.
Логически объединенная группа переменных заключается в
прямоугольник, из которого задаются ссылки на другие схемы, причем
без разницы, отображают они данные или процедуры.
Замечание: для схемы, отображающей данные, элемент ВЫХОД должен
быть пустым, в отличие от процедуры, для которой элемент ВЫХОД
содержит оператор окончания процедуры (например end;).
Чем больше работаю с dalvjaz2, тем сильнее убеждаюсь в правильности
формулировки Петра Алмазова:
Если им дать простой текст из нескольких абзацев, то они, как минимум,
сочтут его ненаглядным, а то и вовсе непонятным. Если все это
растянуть по вертикали, каждый абзац обвести в рамочку и соединить их
вертикальными линиями, то они начинают восторгаться: как это понятно,
красиво, наглядно!
---------------------------------------------------------------
На текущий момент исходный код программы dalvjaz2
составляет чуть меньше 7500 строк,
достаточно хорошо структурирован и готов к дальнейшему развитию
всеми желающими.
Если такие желающие найдутся, то хотелось бы, чтобы они делились
результатами своих трудов с участниками форума сайта oberoncore.ru