Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 999 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 13:

Простой текстовый редактор в среде программирования Borland C++Builder 6.0

Задание значений Hint объектов компонентов

Теперь все готово для отображения коротких и длинных подсказок объектом приложения. Но нужно ввести в каждый компонент интерфейса сами подсказки. Для этого нужно последовательно выделять каждый компонент приложения, включать свойство ShowHint и заполнять нужным текстом свойство Hint по формату

Hint = всплывающая_подсказка | текст_строки_состояния
  • Выделите кнопку FileOpenBtn на панели инструментов. Включите свойство ShowHint для отображения всплывающей подсказки, а в свойство Hint введите текст
    Открыть|Открыть существующий файл с текстом
  • Повторите эти шаги для других элементов в соответствии с таблицей
  • Для выделения компонентов меню раскройте объект MainMenu в селекторе объектов Object TreeView. Следите за тем, чтобы для кнопок и соответствующих пунктов меню текст подсказок был одинаков

Обратите внимание, что для объектов-пунктов меню свойство ShowHint отсутствует, следовательно всплывающие подсказки для них не предусмотрены, поскольку названия пунктов сами информативны. Поэтому в свойстве Hint меню можно короткую подсказку не указывать.

Подсказки для элементов интерфейса приложения
Элемент Hint -подсказка
MainForm Привет студентам от Снеткова !!!
FileOpenBtn Открыть|Открыть существующий файл с текстом
FileSaveBtn Сохранить|Сохранить существующий файл с текстом
FileNew Создать новый документ
FileOpen Открыть существующий файл с текстом
FileSave Сохранить существующий файл с текстом
FileSaveAs Сохранить документ под новым именем
FilePrint Вывод текущего документа на печать
FilePrintSetup Настроить вывод документа на печать
FileExit Завершить работу приложения
EditUndo Вернуться к предыдущему шагу редактирования
EditSelectAll Выделить все содержимое документа
EditCut Вырезать выделенный фрагмент текста в буфер обмена
EditCopy Копировать выделенный текст в буфер обмена
EditPaste Вставить содержимое буфера в текущую позицию курсора
EditFind Найти фрагмент текста по образцу
EditReplace Найти существующий фрагмент и заменить на новый
EditWordWrap Принудительный заворот строк при отображении
HelpContents Вызов контекстной подсказки
HelpAbout Сведения о разработчиках данного приложения
MemoEdit Поле редактирования|Рабочая область редактирования документа
StatusBa Строка состояния|Место для отображения длинных подсказок

Добавление контекстного меню

Многие компоненты в C++Builder имеют имеют свойство PopupMenu, следовательно для них можно подключить контекстное меню. При нажатии правой кнопки мыши на этом компоненте на экране будет автоматически отображено соответствующее меню. Обработчики для пунктов контекстного меню пишутся также, как для пунктов главного меню.

Визуальное проектирование контекстного меню

  • Во вкладке Standard палитры компонентов выберите компонент PopupMenu и поместите его в любое место формы. Он является невизуальным, поэтому не будет виден во время выполнения приложения
  • Измените значение свойства Name на MemoPopup
  • Дважды щелкните на значке PopupMenu для запуска редактора меню

Получим меню не с нуля, а скопируем часть главного меню. Для этого

  • Щелкните правой кнопкой мыши для запуска контекстного меню редактора

  • Выберите пункт Select Menu
  • В открывшемся диалоговом окне будет показан список меню, доступных приложению. Выберите MainMenu и нажмите кнопку OK
  • Откройте категорию Edit и выделите первый пункт, затем удерживая клавишу Shift - последний. При этом выделятся все пункты категории
  • Для копирования выбранных пунктов в буфер обмена, выберите в главном меню оболочки пункт Edit/Copy или нажмите Ctrl+C
  • Снова выберите пункт Select Menu в контекстном меню редактора. На этот раз выберите для редактирования PopupMenu. Редактор меню опять отобразит пустое контекстное меню
  • Выберите в главном меню оболочки пункт Edit/Paste или нажмите Ctrl+V. Пункты будут вставлены из буфера обмена

  • Измените значения свойств Name для новых пунктов меню на более осмысленные
    Идентификаторы пунктов контекстного меню
    Пункт Свойство Name
    Undo PopupUndo
    Select All PopupSelectAll
    Cut PopupCut
    Copy PopupCopy
    Paste PopupPaste
    Find PopupFind
    Replace PopupReplace
    Word Wrap PopupWordWrap
  • Подключите созданное нами меню MemoPopup к компоненту MemoEdit, указав в его свойстве PopupMenu имя MemoPopup

Обратите внимание, что сразу у этого свойства появилось дерево подсвойств, с помощью которых можно осуществлять управление контекстным меню.

  • Постройте приложение и убедитесь, что контекстное меню вызывается, но пункты его не работают

Создание обработчиков пунктов контекстного меню

Поскольку контекстное меню - это всегда (или почти всегда) дублирование пунктов главного меню, то подключим к этим пунктам уже готовые обработчики, созданные нами ранее для пунктов главного меню.

  • Щелкните дважды на значке PopupMenu, чтобы вызвать редактор меню. Выделите первый пункт Undo и в инспекторе свойств установите режим Events. Найдите свойство OnClick для выделенного элемента PopupUndo, раскройте список и подключите обработчик EditUndoClick
  • Повторите шаги для всех пунктов контекстного меню
  • Постройте приложение и испытайте работу контекстного меню

Обратите внимание, что флажок против пункта WordWrap остается всегда включенным, хотя режим заворота текста редактора переключается. Для исправления этого внесите изменения в обработчик EditWordWrapClick(). Сделайте это самостоятельно!!!

Установка порядка переключения элементов дизайна

Порядок переключения ( tab order ) - это последовательность, в которой компоненты получают фокус ввода ( input focus ) при нажатии клавиши Tab.

Формы C++Builder автоматически поддерживают перемещение между компонентами с помощью клавиши Tab. Вы можете выбирать следующий компонент, нажимая Tab, и возвращаться обратно, используя комбинацию Shift+Tab.

Существуют две разновидности компонентов. Компоненты оконного типа (windowed) принимают фокус ввода. К ним относятся Edit, Memo, ListBox, ComboBox, Button и другие. Компоненты неоконного типа (non-windowed) не реагируют на клавиатуру. Такими компонентами являются Image, SpeedButton, Label, Shape, компоненты меню и другие.

Порядок переключения устанавливается только для компонентов оконного типа. Только у них есть свойство TabOrder и свойство TabStop. Свойство TapOrder задает порядок переключения, а свойство TabStop определяет, участвует ли компонент в этом процессе.

Порядок переключения можно определять двумя способами:

  1. Задавать значение свойства TabOrder для каждого компонента вручную. Нумерация компонентов в последовательности переключения начинается с нуля. Следующий компонент последовательности должен иметь значение TabOrder=1 и т.д.
  2. Воспользоваться диалоговым окном Edit Tab Order оболочки

Для установки порядка переключения выполните следующее:

  • Щелкните в любом месте дизайнера форм правой кнопкой мыши
  • Выполните пункт контекстного меню оболочки Edit Tab Order
  • Установите порядок переключения так, чтобы MemoEdit был первым, и нажмите кнопку OK
  • Проверьте, чтобы свойство TabStop компонента MemoEdit было включено, а у компонента SpeedBar это свойство выключите

Теперь при запуске приложения фокус ввода всегда будет иметь только компонент MemoEdit.

Синхронизация доступности пунктов меню

Запустите приложение и отметьте, что имеется неестественная асинхронность в доступности пунктов меню. Например, после открытия файла, если текст не изменялся, то сохранять ничего не нужно и пункт меню Сохранить должен быть недоступен. Или если при редактировании текст не был выделен, то пункты меню Cut и Copy должны быть недоступны.

  • Устраните этот недостаток самостоятельно, используя систему помощи C++Builder

Тестирование приложения

  • Постройте проект и проверьте всю заложенную нами в приложении функциональность

Внешний вид приложения при запуске должен быть примерно таким


  • Установите режим компиляции Release без поддержки отладочной информации. Для этого выберите в главном меню оболочки пункт Project/Options. Выберите вкладку Compiler и нажмите слева внизу кнопку Release, чтобы выключить поддержку отладочной информации. Заново постройте проект и убедитесь, что загрузочный файл остался почти прежних размеров

Вся отладочная информация в C++Builder хранится в отдельном файле ScratchPad.tds.

  • Сдайте работу преподавателю !!!

Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .