Рассказ про бытовое программирование вызвал любопытную дискуссию в нашей программистской тусовке. Не затрагивая самой дискуссии, отвечу на один вопрос:
А можно примеры компонент? с сорцами, если есть И пример программы из них собранной, на псевдокоде, например.
С примером программы все достаточно просто, так как у программы есть схема и она задается текстовым файлом (упакованном в релизе).
Вот полная схема для программы, которую я уже упоминал: http://алексейнедоря.рф/?p=145:
Рассмотрим подробнее маленький кусочек схемы соответствующий кнопке «Корпус», которая стоит в левом верхнем углу, см. скриншот:
<node Стол
Строк=6
Имя=Кнопка
#I#Ширина=150
#I#Высота=35
#I#X-координата=149
#I#Y-координата=0
<node Инструмент рисования
Строк=3
Адрес картинок=05. ПростБух\Правки\кнопка-закладка_9ч_верхн_большая
Имя картинки=панель
Имя кодовой части=CIDX3350B863202800
/>
<node Инструмент рисования
Строк=16
#I#!№Текст=1
#I#Размер шрифта=12
#I#нажатая_Сдвиг по X=-3
#I#нажатая_Сдвиг по Y=-5
#I#откликнувшаяся_Сдвиг по Y=-5
#I#Верхнее поле=5
Имя шрифта=Tahoma
#I#Цвет шрифта=3294560
#I#Вертикальное выравнивание=1
#I#Горизонтальное выравнивание=1
Имя кодовой части=CIDX9170F8E3BD8089
/>
<node Инструмент стола
Строк=1
Имя кодовой части=CIDXA534CFF5DF3601
/>
<node Стол
Строк=1
Имя=Выполнить задание
<node Инструмент стола
Строк=2
Задание=уведомление «Переключить на указанный верстак» через «Корпус» ( «\Иконка\Лицо\Главный стол\Анализ» )
Имя кодовой части=CIDX59FA3FCCC475CE
/>
/>
/>
Как видно, схема — это запись дерева, состоящего из узлов. Если убрать все, кроме тегов узлов, то останется:
<node Стол
<node Инструмент рисования />
<node Инструмент рисования />
<node Инструмент />
<node Стол
<node Инструмент />
/>
/>
Узлы в схеме бывают трех видов: Стол, Инструмент, Инструмент рисования, все они есть в этом маленьком кусочке.
Замечание: Чтобы сразу ответить на вопросы типа: Почему такой формат? Почему не XML? Формат схемы — это типичный пример «дизайна», сделанного при помощи синей изоленты, то есть временного решения, которое прижилось. Примерно в 2007 году, один из моих экспериментов «полетел» с такой схемой и дальше странности и неудобства схемы стали «фичей». В Вир-2 я использую другой (бинарный) формат, который сделан на опыте этого, но его не так удобно рассматривать.
Вернусь к узлам. Столы образуют «скелет» программы (можно назвать архитектурой нижнего уровня). Столы могут быть видимыми (окнами), для этого на столе должен стоят инструмент рисования.
Как видно, на внешнем столе есть инструмент(ы) рисования, на внутреннем – нет, то есть внешний стол является видимым, и ему соответствует окно на экране, внутрений стол — структурный.
Инструменты рисования и остальные инструменты отличаются только способом подключения к столу. Инструменты рисования подключаются (дополнительно) к сообщению рисования (вроде WM_PAINT).
В узлах, кроме столов, есть строка:
Имя кодовой части=CIDX59FA3FCCC475CE
Любой работающий инструмент – это код + данные, то есть, в каком-то смысле, это объект. У кода инструмента есть уникальный идент, который и указан в схеме. Про кодовую часть надо говорить отдельно.
У столов нет смысла хранить в схеме имя кодовой части, так как у всех столов одна и та же кодовая часть, можно сказать, что все столы – это экземпляры одного класса.
В узле может храниться настройка узла, например, у верхнего стола:
Имя=Кнопка
#I#Ширина=150
#I#Высота=35
#I#X-координата=149
#I#Y-координата=0
При создании любого узла, создается ассоциированный массив, в котором хранятся настройки: здесь Имя, Ширина, Высота и т.д.
Инструмент может использовать настройки произвольным образом. Например, при создании окна для видимого стола (стол тоже инструмент, хотя и выделенный), окну выставляются размеры и координаты, взятые из настроек.
А для инструмента рисования надписи в настройках хранится имя шрифта, размер шрифта и косвенно, текст надписи. Косвенно, так как схема сразу заточена на поддержку надписей на нескольких естественных языках (и возможность переключения между ними).
Часть настроек инструмента рисования надписи:
#I#!№Текст=1
#I#Размер шрифта=12
Имя шрифта=Tahoma
#I#Цвет шрифта=3294560
Надпись «Корпус» имеет номер 1 в таблице надписей. Номер задается автоматически при построении схемы и таблицы надписей.
И последнее, что я хочу сказать для завершения краткого обзора. С нажатием на кнопку (запуск действия) связывается инструмент или последовательность инструментов. Смотрим в примере последний инструмент:
<node Инструмент стола
Строк=2
Задание=уведомление «Переключить на указанный верстак» через «Корпус» ( «\Иконка\Лицо\Главный стол\Анализ» )
Имя кодовой части=CIDX59FA3FCCC475CE
/>
В данном случае, действие на кнопки сводится к выполнению вот этой строки (на простом скриптовом язычке):
уведомление «Переключить на указанный верстак» через «Корпус» ( «\Иконка\Лицо\Главный стол\Анализ» )
А указанный посредством кодовой части инструмент – это интерпретатор скрипта. При нажатии на кнопку происходит выполнение скрипта, которые отправляет уведомление по указанному адресу с указанными параметрами. В данном случае уведомление приводит к переключению закладок на столе.
На этом я считаю законченным ответ на вторую часть вопроса (И пример программы из них собранной, на псевдокоде, например), пусть на уровне обзора.
Примеры компонентов в следующий раз.