Интегрированная среда разработки (ИСП, IDE) BlackBox
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Интегрированная среда разработки (ИСП, IDE) BlackBox
Уникальная современная бесплатная и открытая среда программирования Блэкбокс (BlackBox Component Builder), воплотившая полувековой (считая с Алгола-60) опыт разработки технологий и методов программирования (школа Никлауса Вирта в цюрихском университете ETH, исследовательская лаборатория Xerox Palo Alto Research Center и др.) и обладающая следующей комбинацией свойств:
• ·очень простая(описание языка всего около 30 страниц);
• ·очень быстрая(быстро компилирует даже на i386);
• ·очень компактная(20 MB на диске в максимальной конфигурации)
• ·очень мощная(в том числе за счет лучшей в промышленности поддержки технологий компонентно-ориентированного программирования);
• ·бесплатная для некоммерческого использования (с конца 2004 г. система доступна с открытыми исходными кодами)..
BlackBox Component Builder (в дальнейшем Блэкбокс) – это интегрированная среда разработки, оптимизированная для разработки ПО с компонентной структурой. В неё входят:
• инструменты разработки;
• библиотека повторно используемых компонентов;
• каркас приложений, упрощающий создание надёжных пользовательских компонентов и приложений;
• среда поддержки функционирования компонентов во время исполнения.
Разработчики Блэкбокс системы следовали минималистскому принципу так же, как и при разработке языка системы. Например, в языке отсутствует вложенность модулей и классов и как следствие упрощается архитектурная модель. В отличие от языка Java, один модуль транслируется в один файл. Имеется два вида компонентов - модули и подсистемы. При успешной компиляции модуля образуются символьный и кодовый файлы, которые автоматически размещаются в подкаталогах Sym и Code, соответственно. При этом эти каталоги размещаются в подкаталоге Блэкбокса с названием подсистемы. Имя подсистемы – префикс имени модуля. Сами исходные файлы хранится в подкаталоге Mod. Символьный файл содержит всю информацию о внешних связях модуля по экспорту-импорту. Кодовый файл - это двоичный файл с машинными командами. Он загружается в память для непосредственного выполнения при первом вызове какой-либо процедуры из этого модуля.
В системе Блэкбокс приложения и их компоненты пишутся на Компонентном Паскале (в дальнейшем КП). Этот язык программирования предоставляет такие современные возможности, как полная защищенность типов (type safety), компоненты (в виде модулей), динамическое связывание компонентов, а также сборка мусора. Сам Блэкбокс целиком написан на КП, включая все компоненты в библиотеке, весь инструментарий разработчика, компилятор КП, и даже низкоуровневую систему поддержки времени исполнения со сборщиком мусора. Несмотря на всю свою мощь, Компонентный Паскаль – маленький язык, легкий для изучения.
Библиотека компонентов, поставляемая с Блэкбоксом, содержит:
• компоненты для элементов пользовательского интерфейса (командные кнопки, кнопки-флажки и т.п.); средства обработки текстов (подсистема Text);
• различные компоненты для управления расположением элементов графического интерфейса пользователя (подсистема Form);
• компоненты доступа к базам данных (подсистема Sql); коммуникационные компоненты (подсистема Comm);
• инструменты программирования: компилятор, просмотрщик интерфейсов, отладчик и т. д. (подсистема Dev).
Взаимодействие между компонентами осуществляется посредством каркасов (Frameworks) системы Блэкбокс. Они состоят из небольшого числа дополняющих друг друга программных интерфейсов. Эти интерфейсы значительно проще и безопаснее базовых API, таких как Windows API, и, кроме того, платформо-независимы. Для интерактивных приложений эти интерфейсы определяют уникальную архитектуру составных документов. Эта архитектура делает возможной быструю разработку приложений (RAD), в том числе быструю разработку новых компонентов интерфейса пользователя. В конструкции каркаса особое внимание уделено безопасному взаимодействию между компонентами. Это условие становится чрезвычайно важным для крупномасштабных программных проектов, характеризующиеся большим временем жизни и содержащие компоненты от различных поставщиков. Сочетание производительности RAD с высоким уровнем надёжности архитектуры было одной из главных целей разработки системы Блэкбокс. Была сделана попытка создать гибкую и нетребовательную к ресурсам среду, не жертвуя ни надёжностью, ни удобством долгосрочного сопровождения проектов, созданных в этой среде. Это было достигнуто благодаря архитектуре, в которой система разделяется на компоненты с четко и строго определёнными интерфейсами. Программное обеспечение развивается эволюционно – через добавление, обновление или удаление отдельных компонентов.
Поскольку сам Блэкбокс написан на Компонентном Паскале, любой скомпилированный модуль становится частью системы в том смысле, что как файл с машинным кодом, так и соответствующий символьный файл немедленно становятся доступными для импорта из других модулей, вызова процедур из меню Блэкбокса и т.п. Поэтому приложение может иметь такой же интерфейс, как и сама среда. Интерфейс представлен обычным многоуровневым меню и возможностью назначения горячих клавиш. Само меню хранится в файле Menus.odc и доступно для редактирования с помощью функций модуля Text. По команде «обновить меню» меню обновляется. Меню динамически формируется при запуске системы. Каждая подключаемая подсистема может иметь собственное подменю, которое динамически вставляется в основное меню, если в нем есть пункт, отмеченный символом «*». При такой технологии подключение подсистемы заключается в простом копировании файлов, входящим в подсистему. Если пользователь одновременно разрабатывает несколько приложений, каждое из которой располагается в своей папке, среда запускается с параметром, определяющим путь к этой папке. Подсистемы, находящиеся в основном каталоге, используются совместно. Такой подход значительно упрощает развертывание новой подсистемы в уже разработанном приложении.
Среда времени выполнения системы Блэкбокс поддерживает динамическое связывание, загрузку и выгрузку компонентов. За счёт этого система может быть расширена прямо во время выполнения без повторной компиляции, сборки или перезапуска полученного кода. Объекты компонентов (т. е. экземпляры классов, содержащихся в компонентах) автоматически удаляются, когда на них больше нет ссылок. Сборка мусора – ключевой аспект безопасности системы времени выполнения, так как она позволяет предотвратить такие ошибки, как утечки памяти и «висячие» указатели, которых иначе практически невозможно избежать в среде, столь сильно ориентированной на использование компонентов, как Блэкбокс.
В системе реализован оригинальный подход к разработке пользовательского интерфейса. Экранная форма представляется собой документ, в которой с помощью специализированного редактора размещаются элементы управления. Но в отличие от других систем это не приводит к генерации кода с описанием класса Form. В самих модулях также отсутствуют ссылки, какая экранная форма будет использована. В документе-форме для элемента можно указать свойство, привязывающее элемент к какой-либо переменной модуля (для текстового поля) или процедуре (для элемента типа кнопки). И этого оказывается достаточно, чтобы при запуске формы значения переменных отображались, а нажатие кнопки приводило к запуску нужной процедуры. Единственно, о чем должен позаботиться программист, это вызвать специальный метод для обновления значений переменных в экранной форме. Такой подход значительно упрощает программирование, избавляя, например, от многочисленных преобразований из текстовых значений в целые и наоборот, которыми изобилует программа в других средах. Экранная форма может быть быстро создана с помощью мастера, который выберет все экспортируемые объекты и построит по ним подходящие элементы управления.
Имеется в системе и ряд других технологических приемов, делающих разработку более удобной. Это так называемые командеры, рабочий журнал, оригинальная отметка ошибок, трассировщик и др. Все это делает систему привлекательной как для использования в обучении программированию, так и для промышленного программирования.
Интерфейс Блэкбокс «из коробки» (т.е. без доп. Настройки) выглядит вполне традиционно:
сверху – полоска меню,
ниже – рабочее поле, в котором открыты окошки с документами;
Одно из окошек называется Рабочий журнал (или Log) и играет особую роль.
Меню устроены как обычно: Файлы ... Справка.
Благодаря уникальной современной архитектуре Блэкбокса в нём можно легко (причём на лету, без перезапуска) менять всю структуру меню, добавлять новые пункты, добавлять горячие клавиши и т.п. См. об этом документацию: Настройка меню.
Если завершать работу в Блэкбоксе командой меню Exit (в меню File): тогда Блэкбокс автоматически запомнит расположение всех окошек (если мы забудем сохранить какие-то документы, то он нам об этом напомнит). А при новом запуске он их автоматически восстановит в том же расположении (при желании это нетрудно отменить).
Попробуйте закрыть и снова запустить весь Блэкбокс; а чтобы увидеть, как он восстанавливает окошки, можно перед его закрытием открыть (например, с помощью ссылок) дополнительные окошки и поменять их размеры и положение.
Текстовые документы используются в Блэкбоксе не только для документации , но и для программ, поэтому с текстами нужно немного освоиться.
Новый текстовый документ создается как обычно – нажатием Ctrl+N или через меню (File-New). Основные команды редактирования (в т.ч. копирование текста между окнами и т.п.) следуют промышленным стандартам; то есть они такие же, как, например, в Блокноте Windows.
Ещё в текст можно вставлять так называемые «вьюшки» (View) – графические объекты, которые могут быть «активными», то есть реагировать на мышку, клавиатуру и т.п. Вьюшки могут даже влиять на форматирование текста, оставаясь при этом невидимыми в обычном режиме просмотра. Полезно иметь в виду, что нажав Ctrl+H, можно увидеть невидимые вьюшки, чтобы, например, их случайно не стереть; чтобы снова их спрятать, нужно нажать Ctrl+H ещё раз.
Рабочий журнал – важный вспомогательный документ, обычно всегда открытый (по-английски он называется Log).
В журнал Блэкбокс пишет разные сообщения. Туда же идёт стандартный вывод из программ, и там можно что-нибудь допечатать или сформатировать вручную; Блэкбоксу это никак не помешает: он всегда просто дописывает новые сообщения в конец журнала.
Если Рабочий журнал случайно закрылся, его можно снова открыть командой меню Info, Open Log. Очистить журнал тоже можно (штатная команда Info, Clear Log), но этого не нужно делать без большой реальной нужды.
Если в Рабочий журнал напечаталась какая-то полезная информация , то её нужно оттуда скопировать и сохранить в нормальном документе, так как содержимое Рабочего журнала при выходе из Блэкбокса не сохраняется.
Кусок текста из Рабочего журнала, напечатанный туда одной программой, можно сохранить и использовать как входные данные для другой. Это может быть просто очень удобно. Такая возможность является частью способа организации работы человека с компьютером, который можно обозначить как «текст как интерфейс» или «документоориентированный подход».
Рассмотрим простейшую программу на Компонентном Паскале (КП). Исходный текст программы должен стоять в начале документа. После текста программы документ может содержать всё, что угодно.
Откроем новое текстовое (рабочее) окно и введем текст:
MODULE Program0;
IMPORT Log;
BEGIN
Log.String( 'Привет!' ); Log.Ln;
END Program0.
Первое отличие от старого Паскаля, которое бросается в глаза, это написание ключевых слов заглавными буквами; это соглашение резко облегчает восприятие структуры программы и является обязательным.
Комментарии имеют вид (* ... *). Разрешён только этот тип комментариев. Они могут быть вложены, и если они вложены, то должен соблюдаться баланс составных скобок (* и *).
Для перевода строчных букв в прописные (заглавные) используется клавиша F5, отмена Ctrl-Z.
Остальные имена (Program0, Log, String, ...) – продукт творчества программистов.
Компилятор игнорирует форматирование текста программы (отступы в начале строк, выбор шрифта цвет и т.п.). Ему важно только, чтобы можно было различить служебные слова и идентификаторы.
Последняя точка в фрагменте – это и есть конец программы, и компилятор дальше этой точки не смотрит. Поэтому после текста программы удобно держать примеры входных данных, фрагменты кода, подсказки, объяснения (как здесь) и т.п.
Убедимся, что Рабочий журнал виден (если что, его можно в любой момент открыть командой школьного меню или сдвинуть другие окна).
Убедимся, что окошко с программой – переднее (активное).
Чтобы проверить корректность программы, скомпилируем её нажатием Ctrl+K.
В Рабочем журнале появится соответствующее сообщение. Можно понажимать Ctrl+K несколько раз.
Откомпилируем и выполним программу нажатием Ctrl+F9 (Dev-Compile and Reload).
В Рабочем журнале появятся три новые строчки:
первая – сообщение об успешной компиляции, числа сообщают о размере бинарника и блока глобальных переменных в байтах (чуть позже посмотрим, что происходит, когда в программе обнаруживаются ошибки);
вторая – сообщение о выгрузке старой версии модуля с программой (как частный случай в памяти модуль может быть не найден, о чём так и будет сказано);
третья – это то, что напечатала вновь скомпилированная программа.
Сообщения в рабочем журнале о том, что «старый модуль NNN выгружен» напоминают о том, что за кулисами кнопки Ctrl+F9 скрыт чуть более общий механизм, чем простое выполнение программы.
На самом деле только при решении простых задач годится такая схема работы, когда «пишется программа», которая «компилируется и выполняется». При решении более сложных задач обычно пишут не одну «программу», а целую группу процедур (библиотеку, компонентный каркас).
И тогда более удобным становится режим работы, при котором модуль с процедурами загружается в память и остаётся там, пока идёт работа с процедурами (например, их совместное тестирование). И лишь когда программист примет решение, модуль удаляется из памяти или заменяется новой версией. Это основной, штатный режим работы в Блэкбоксе.
Как компилятор сообщает об ошибках
Введем в рабочее окно текст модуля Errors с намеренно сделанными.
MODULE Errors;
IMPORT Log := StdLog, In := i21sysIn, Math;
VAR x: Integer;
BEGIN
x := O;
Log.INT( x ) Log.Ln
END Errors.
Расположим окна так, чтобы это окно, окно модуля Errors и Рабочий журнал друг друга не загораживали.
Сделаем окно с модулем передним (например, кликом по его строке заголовка), и нажатием Ctrl+K (K - латинское) попытаемся его скомпилировать.
В журнале появится запись:
компилируется "Errors"
3 ошибок найдено
«3 ошибок» не вполне по-русски, но зашивать русскую грамматику в Блэкбокс пока не хочется.
Одновременно в исходнике появятся три чёрных (тёмно-серых) перечёркнутых квадратика в тех местах, где компилятор увидит ошибки – это маркеры ошибок.
По завершении компиляции курсор стоит сразу после первой ошибки.
В самом низу окна Блэкбокса слева в строке состояния видно сообщение компилятора о данной ошибке: «необъявленный идентификатор». Действительно, вместо Integer подразумевалось INTEGER (тип целочисленной переменный), а большие и маленькие буквы в Компонентном Паскале различаются, поэтому Integer и INTEGER воспринимаются компилятором как разные слова: INTEGER он знает, а Integer – нет.
Можно прочитать это же сообщение и по-другому: двойной клик по квадрату раскроет его и покажет сообщение об ошибке.
Ещё один двойной клик закроет ошибку, но беспокоиться ни об этом, ни об удалении маркеров ошибок не надо: компилятор сам уберёт старые маркеры при следующей компиляции.
Точно так же можно посмотреть остальные маркеры. Все маркеры показывают одинаковую ошибку: «необъявленный идентификатор».
Не следует пытаться сразу устранить все ошибки: компилятор после первой ошибки может сбиться и увидеть ошибки там, где их на самом деле нет, или пропустить настоящие ошибки.
Устраняйте самую первую ошибку и сразу компилируйте Ctrl+K снова.
Некоторые заповеди грамотного программирования
Пункты 2-4 составляют фундаментальный метод разработки программ, известный как пошаговое уточнение – step-wise refinement (см. статью Вирта в Comm. ACM, Vol. 14, No. 4, April 1971; статья доступна здесь: http://www.acm.org/classics/dec95/).
Пункт 1 является исходной точкой для пошагового уточнения. Здесь еще говорят о проектировании, управляемом интерфейсами (interface-driven design), а также о проектировании по контрактам (design by contract). Создание программы должно начинаться с задания интерфейсов (=сигнатур) процедур (прежде всего экспортируемых) вместе с пред- и пост-условиями – точно так же как решение любой задачи начинается с ее постановки. Проектирование интерфейсов/сигнатур и задание пред- и пост-условий – ключевой элемент постановки задачи в программировании.
Выполнение пунктов 2-4 позволяет сохранять интеллектуальный контроль за правильностью создаваемой программы, помогая устранять ошибки (как синтаксические огрехи вроде опечаток – п.3, так и смысловые – п.4) на возможно более ранней стадии.
Рекомендация пункта 5 имеет смысл только в контексте пп.2-4: она бессмыссленна, если процесс разработки не удовлетворяет требованиям пп.2-4 (а также при работе с медленными компиляторами для сложных языков). Здесь – одно из важнейших преимуществ, доставляемое минимализмом языка Оберон/Компонентный Паскаль и четкостью его дизайна, обеспечивающего исключительную быстроту компилятора. Быстрый компилятор подобного типа был впервые построен Виртом в 1984 г. для предшественника Оберона – языка Модула-2, с систематическим применением принципа пошагового уточнения.
Правило 5 означает, в частности, что если компилятор обнаружил несколько ошибок, то устранять их нужно, как правило, по одной (обычно начиная с первой), каждый раз повторяя компиляцию.
Пошаговое уточнение считается самым полезным приемом систематического создания программ (Э.Дейкстра. Дисциплина программирования. М., Мир, 1978, с. 274). Весьма популярные в последнее время «гибкие» методологии (Extreme Programming и т.п.) во многом являются просто более эффективным организационным воплощением идеи пошагового уточнения на уровне больших программных проектов.
Применение методов типа пошагового уточнения требует известной дисциплины со стороны программистов – отсюда необходимость систематического «правильного» обучения. Однако в настоящее время признано, что резкое повышение эффективности программирования при использовании методов этой категории более чем окупает усилия, необходимые для их освоения.
Чтобы исправить первую ошибку, нужно превратить Integer в INTEGER. Простейший способ: дважды кликнуть по Integer и нажать Shift+F5.
Сразу скомпилируем нажатием Ctrl+K (компилируем после каждого исправления, следя, чтобы окно с программой было передним при выдаче команды компиляции; если нечаянно произошла попытка скомпилировать этот документ, нужно просто нажать Ctrl+Z – отмену).
Останется две ошибки, курсор стоит после первой из них.
Опять ошибка «необъявленный идентификатор». В данном случае заглавная буква O стоит вместо нуля. Исправим букву О на цифру 0 (чёрный квадратик стирается как обычная буква: достаточно дважды нажать клавишу Backspace и затем цифру 0). И тут же снова нажмём Ctrl+K.
Останется ещё одна ошибка «необъявленный идентификатор». В данном случае название процедуры Int (в Блэкбоксе принято соглашение, чтобы названия процедур начинать с заглавной буквы). Исправим INT на Int и снова нажмём Ctrl+K.
Появится ещё одна – уже четвертая ошибка, которую компилятор раньше не смог увидеть, сбиваясь из-за остальных: теперь это ошибка «пропущена ";"».
Действительно, два вызова процедур должны быть разделены литерой ";".
Вставим её и нажмём Ctrl+K. В Рабочем журнале появились два числа – 40 и 4, где 4 – это размер блока глобальных переменных модуля в байтах (наша одинокая 32-битная переменная x), а 40 – размер машинного кода в байтах.
Наконец, чтобы выполнить программу, нажмём Ctrl+F9 (передним окном должно быть окно с программой).
В журнале появится строчка от компилятора, другая строчка от загрузчика модулей (не обращаем внимания), а также строчка с нашим нулём – последняя.
Важно! Никакой классификации ошибок компиляции на «предупреждения», «ошибки», «критические ошибки» и т.п., в Блэкбоксе не делается: безусловная защита от больших и мелких ошибок является высшим приоритетом. Все потенциальные источники ошибок, которые могут быть обнаружены компилятором, должны быть устранены как можно раньше: почистить код, устранив «предупреждения», выходит несравненно дешевле, чем вылавливать в большой программе ошибки, появившиеся как отдалённые последствия «предупреждений» – или проводить расследование, выясняя причины катастрофы стоимостью сотни миллионов долларов (например, катастрофа ракеты-носителя Ариан-5 http://www.inr.ac.ru/~info21/wirth/wirth_avia.htm#ariane).
После успешной компиляции программу можно выполнить.
Выполнение программы с помощью «командира»
Опишем простой и удобный способ выполнить процедуру из скомпилированного модуля (есть и другие способы).
Имеем модуль:
MODULE Привет;
IMPORT StdLog;
PROCEDURE Сделать*;
BEGIN
StdLog.String("Привет!");StdLog.Ln
END Сделать;
END Привет.
Поставим курсор в окошке с нашим модулем в самый конец текста после точки, закрывающей модуль (Ctrl+End).
Выполним команду меню Инстр --> Вставить командир (Tools --> Insert Commander; с клавиатуры Ctrl+Q). Появится черный кружок с белым восклицательным знаком — так называемый командир.
После командира без пробелов напечатать Привет.Сделать (имя модуля, точка, имя вызываемой процедуры — это "ФИО" нашей процедуры в системе. Роль фамилии играет имя модуля. Важно следить за прописными и строчными буквами, т.к. в Компонентном Паскале они различаются.
Теперь кликнем мышкой по командиру. Это вызовет загрузку скомпилированного модуля в память и выполнение процедуры. Можно кликнуть еще пару раз — процедура выполнится еще дважды.
• После первой загрузки модуль остается в памяти, причем он уже слинкован с остальными активными модулями (например, StdLog). Поэтому дальнейшие обращения к нашему модулю происходят столь же эффективно, как и при статической компиляции. О перезагрузке модулей см. Загрузка и перезагрузка модулей.
Меню File (Файлы)
New (Новый)
Команда: StdCmds.New
Открывает окно с новым документом, фактически содержащее пустую текстовую вьюшку (text view).
Open... (Открыть...)
Команда: HostCmds.Open
Вызывает стандартный диалог открытия файла.
Open Stationery... (Открыть копию...)
Команда: StdCmds.OpenStationery
Вызывает стандартный диалог, чтобы открыть копию файла-шаблона.
Close (Закрыть)
Команда: HostCmds.Close
Закрывает переднее окно. Если окно является первичным окном документа и его содержимое было изменено («грязное»), пользователю будет задан вопрос, следует ли сохранить содержание окна в файл.
Save (Сохранить)
Команда: HostCmds.Save
Сохраняет содержимое переднего окна в файл. Если содержимое окна ещё в файл не сохранялось, то будет запрошено имя файла.
Save As... (Сохранить как...)
Команда: HostCmds.SaveAs
Сохраняет содержимое переднего окна в файл. Всегда запрашивается имя файла. После выполнения команды работа продолжается с новым файлом.
Save Copy As... (Сохранить копию как...)
Команда: HostCmds.SaveCopyAs
Сохраняет содержимое переднего окна в файл. Всегда запрашивается имя файла. После выполнения команды работа продолжается со старым файлом.
Page Setup... (Разметка страниц...)
Команда: HostDialog.InitPageSetup; StdCmds.OpenToolDialog('Host/Rsrc/Cmds', 'Page Setup')
Запрашивает информацию о формате страниц документа в переднем окне для последующей печати.
В дополнение к данным, специфичным для текущего драйвера принтера, здесь можно задать поля (расстояния между краями бумаги и областью печати), а также задать или отменить печать стандартного колонтитула страницы. Стандартный колонтитул состоит из номера страницы и даты.
Print... (Печать...)
Команда: HostCmds.Print
Запрашивает информацию по печати и затем выполняет её соответствующим образом.
Send Document... (Отправить документ...)
Команда: HostMail.SendDocument
Посылает документ в переднем окне по электронной почте.
Send Note... (Отправить заметку...)
Команда: HostMail.SendNote
Отправляет заметку по электронной почте. Заметкой считается выделенный фрагмент текста, если таковой имеется.
Exit (Выход)
Команда: HostCmds.Exit
Закрывает приложение. Если есть открытые окна с изменённым содержимым, то будут выданы запросы об их сохранении в файлы.
Меню Edit (Правка)
Undo [...] (Отменить [...])
Команда: StdCmds.Undo
Обращает эффект самой последней операции правки (редактирования). Обычно тип операции указывается после слова «Отменить», например, «Отменить Вставка». Отмена может быть выполнена несколько раз – пока не будет восстановлено состояние документа на момент его открытия, создания или последнего сохранения. При нехватке оперативной памяти количество операций, запоминаемых для возможной отмены, может быть сокращено.
Redo [...] (Повторить [...])
Команда: StdCmds.Redo
Повторяет последнюю из отмененных операций. Обычно тип операции указывается после слова «Повторить».
Cut (Вырезать)
Команда: HostCmds.CutGuard
Удаляет выделенный фрагмент и помещает его в буфер обмена.
Сopy (Копировать)
Команда: HostCmds.CopyGuard
Копирует выделенный фрагмент в буфер обмена.
Paste (Вставить)
Команда: HostCmds.PasteGuard
Вставляет копию содержимого буфера обмена в позиции курсора. Если вьюшка, находящаяся в фокусе, содержит данные того же типа, что и буфер обмена, то данные из буфера вставляются непосредственно в данные вьюшки. В противном случае и при условии, что вьюшка в фокусе является контейнером (т.е. имеет тип, наследующий типу Containers.Container –прим. ред.), в данные этой вьюшки вставляется копия всего объекта изображения, содержащего данные из буфера.
Delete (Удалить) (Windows)
Команда: StdCmds.Clear
Удаляет выделенный фрагмент без помещения его в буфер обмена.
Copy Properties (Копировать свойства )
Команда: StdCommands.CopyProp
Копирует свойства текущего выделенного фрагмента (например, атрибуты текста –прим. ред.). Эта команда не влияет на содержимое буфера обмена (т.е. копирование производится в особый буфер –прим. ред.).
Paste Properties (Применить свойства)
Команда: StdCommands.PasteProp
Применяет (к выделенному фрагменту в окне) свойства, которые были скопированы в последний раз (см. Copy Properties).
Paste Object (Вставить объект) (Windows)
Команда: HostCmds.PasteObject
Вставляет копию содержимого буфера обмена в позиции курсора. Если вьюшка в фокусе является контейнером (т.е. имеет тип, наследующий типу Containers.Container –прим. ред.), то в данные этой вьюшки вставляется копия всего объекта изображения, содержащего данные из буфера.
Paste Special... (Вставка специальная ...) (Windows)
Команда: HostCmds.PasteSpecial
Открывает диалоговое окно, которое позволяет выбрать тип данных объекта изображения в буфере обмена, если этот объект поддерживает несколько возможных типов.
Paste to Window (Открыть в новом окне) (Windows)
Команда: HostCmds.PasteToWindowGuard
Открывает копию содержимого буфера обмена в новом окне документа.
Insert Object... (Вставить внешний объект...) (Windows)
Команда: OleClient.PasteSpecial
Открывает диалоговое окно, в котором показаны все доступные серверы OLE. Когда выбран один из них, создаётся объект соответствующего типа и вставляется в содержимое переднего окна.
Object Properties... (Свойства объекта...) (Windows)
Команда: HostMenus.ObjProperties
Открывает список свойств, соответствующий выделенной вьюшке.
Object (Объект) (Windows)
Команда: HostMenus.ObjectMenu
Показывает подменю с командами для выделенной вьюшки. Эти команды задаются самой выделенной вьюшкой и называются «глаголы» (verbs). Обычно первые два глагола - это Edit и Open (Править и Открыть):
Edit (Править)
Передаёт фокус выделенной вьюшке.
Open (Открыть)
Открывает новое окно со вторичной вьюшкой для выделенной.
+ другие глаголы, определённые выделенным объектом изображения.
Clear (Очистить) (Mac OS)
Команда: StdCmds.Clear
Удаляет выделенные фрагмент без помещения его в буфер обмена.
Select Document (Выделить документ как целое)
Команда: StdCmds.SelectDocument
Выделяет корневую вьюшку для документа в переднем окне как единое целое. Это не то же самое, что команда Выделить всё (Select All), которая выделяет всё содержимое документа (точнее, содержимое вьюшки в фокусе).
Select All (Выделить всё)
Команда: StdCmds.SelectAll
Выделяет всё содержимое вьюшки в фокусе.
Select Next Object (Выделить следующий объект) (Windows)
Команда: StdCmds.SelectNextView
Если в контейнере выделена вьюшка: выделяет следующую вьюшку.
Если выделена последняя вьюшка или вообще ничего не выделено: выделяет первую вьюшку.
Part Info (Информация о части) (Mac OS)
Команда: HostCmds.PartInfo
Открывает немодальный диалог с некоторой информацией о выделенной вьюшке.
Preferences... (Настройки...) (Windows)
Команда: HostDialog.InitPrefDialog; StdCmds.OpenToolDialog('HostDialog.prefs', 'Preferences')
Позволяет задавать несколько параметров: следует ли использовать метрику TrueType (для повышения качества печати), следует ли обновлять экран во время прокрутки, какой шрифт использовать для текстов по умолчанию, какой шрифт – для элементов управления, и следует ли показывать полоску состояния.
Меню Attributes (Шрифт)
Меню доступно. если выделенный фрагмент или курсор во вьюшке в фокусе в переднем окне допускают управление стилем/кеглем/цветом.
Следующие команды применимы к выделенному фрагменту; если такого нет, они повлияют на текущие атрибуты в позиции курсора.
Как вариант доступен системный цвет (цвет по умолчанию), который может настраиваться пользователем. В Windows цвет по умолчанию может быть изменен с помощью средств операционной системы. Все, что отрисовано цветом по умолчанию, будет соответственно обновлено.
Regular (Простой) (Windows)
Команда: StdCmds.Plain
Охрана: StdCmds.PlainGuard
Команда отмечена: если текст влево и вправо от курсора простой, или если выделенный текст весь простой (то есть не полужирный, не курсив, не подчеркнут и не вычеркнут). Снимает для выделенного фрагмента все атрибуты стиля (полужирность, курсив, подчеркивание, вычеркивание).
Bold (Полужирный)
Команда: StdCmds.Bold
Команда отмечена: если текст справа и слева от курсора полужирный, или выделенный фрагмент весь полужирный. Если выделенный фрагмент весь полужирный, он теряет этот атрибут, в противном случае – становится полужирным.
Italic (Курсив)
Команда: StdCmds.Italic
Команда отмечена: если текст справа и слева от курсора курсивный, или выделенный фрагмент весь курсивный.
Если выделенный фрагмент весь курсивный, он теряет этот атрибут, в противном случае – становится курсивным.
Underline (Подчеркнутый)
Команда: StdCmds.Underline
Команда отмечена: если текст справа и слева от курсора подчеркнут, или выделенный фрагмент весь подчеркнут. Если выделенный фрагмент весь подчеркнут, он теряет этот атрибут, в противном случае текст подчеркивается.
Strikeout (Вычеркнутый) (Mac OS)
Команда: StdCmds.Strikeout
Команда отмечена: если текст справа и слева от курсора вычеркнут, или выделенный фрагмент весь вычеркнут. Если выделенный фрагмент весь вычеркнут, он теряет этот атрибут, в обратном случае текст вычеркивается.
(8 point (Windows),) 9 point, 10, 12, 16, 20, 24 (.. пунктов)
Команда: StdCmds.Size(size)
Команда отмечена: если текст справа и слева от курсора имеет данный кегль, или выделенный фрагмент весь имеет данный кегль.
Выделенный фрагмент приобретает данный кегль.
Size... (Кегль...) (Windows)
Команда: StdCmds.InitSizeDialog; StdCmds.OpenToolDialog('Std/Rsrc/Cmds', 'Size')
Команда отмечена: если не применен никакой другой кегль.
Открывается инструментальный диалог, который позволяет задать кегль шрифта в типографских пунктах, и затем выделенный фрагмент приобретает этот кегль.
Default Color (Цвет по умолчанию)
Команда: StdCmds.Color(1000000H)
Команда отмечена: ---
Black (Черный)
Команда: StdCmds.Color(0000000H)
Команда отмечена: ---
Red (Красный)
Команда: StdCmds.Color(00000FFH)
Команда отмечена: ---
Green (Зеленый)
Blue (Синий)
Color... (Цвет...) (Windows)
Команда: HostDialog.ColorDialog
Команда отмечена: если не применен никакой другой цвет.
Запрашивает у пользователя цвет и прменяет его к выделенному фрагменту.
Default Font (Шрифт по умолчанию) (Windows)
Команда: StdCmds.DefaultFont
Применяет к выделенному фрагменту шрифт по умолчанию.
Font... (Шрифт...) (Windows)
Команда: HostDialog.FontDialog
Открывает стандартный диалог выбора шрифта и применяет выбранные атрибуты к выделенному фрагменту.
Typeface... (Гарнитура...) (Windows)
Команда: HostDialog.TypefaceDialog
Открывает стандартный диалог выбора шрифта и применяет выбранную гарнитуру к выделенному фрагменту. Отличие от команды Шрифт... в том, что изменяется только гарнитура шрифта (название), а не иные атрибуты, такие как кегль или насыщенность (полужирный/нормальный).
Меню Window (Windows) (Окна)
New Window (Новое окно)
Команда: StdCmds.NewWindow
Открывает новое окно для документа в переднем окне. Новое окно имеет тот же тип, что и переднее окно. Заголовок окна заключается в скобки "(" и ")".
Cascade (Каскадом) (Windows)
Команда: HostMenus.Cascade
Располагает окна документов так, что они некоторым образом накладываются друг на друга.
Tile Horizontal (Горизонтально)
Команда: HostMenus.TileHorizontal
Располагает окна сверху вниз без перекрытия. Эта команда не оказывает влияния на окна с неизменяемым размером, а также на некоторые открытые окна, когда их слишком много для разумного размещения. Переднее окно размещается в самом верху.
Tile Vertical (Вертикально)
Команда: HostMenus.TileVertical
Размещает окна слева направо без перекрытия. Эта команда не оказывает влияния на окна с неизменяемым размером, а также на некоторые открытые окна, когда их слишком много для разумного размещения. Переднее окно становится крайним слева.
Arrange Icons (Упорядочить значки) (Windows)
Команда: HostMenus.ArrangeIcons
Упорядочивает значки (свернутые окна) вдоль нижнего края окна приложения.
{окно}
Команда: HostMenus.WindowList
Это список открытых окон, переднее окно в начале списка (помечено). Названия окон документов, содержимое которых было изменено, выделяются жирным шрифтом.
Литература
1 Ключарев А.А. и др. Структуры и алгоритмы и обработки данных: Учеб. пособие / СПбГУАП.– СПб., 2003.– 172 с.
2 Белов В. В. Алгоритмы и структуры данных: Учебник / Белов В.В., Чистякова В.И. - М.:КУРС, НИЦ ИНФРА-М, 2016. - 240 с.
3 Колдаев В. Д. Структуры и алгоритмы обработки данных: Учебное пособие / В.Д. Колдаев. - М.: ИЦ РИОР: НИЦ ИНФРА-М, 2014. - 296 с.