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

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

Обработчики категории Edit

Обработчик команды Undo

Компонент MemoEdit не содержит метода Undo, поэтому мы должны для этого компонента послать операционной системе Windows сообщение WM_UNDO.

  • Раскройте категорию Edit и щелкните на пункте меню Undo. Оболочка создаст обработчик, который заполните так
    Обработчик команды Undo категории Edit
    void __fastcall TMainForm::EditUndoClick(TObject *Sender)
    {
     SendMessage(MemoEdit->Handle, WM_UNDO, 0, 0);
    }
Обработчик команды Select All

Компонент MemoEdit содержит встроенный метод SelectAll(), воспользуемся им.

  • Раскройте категорию Edit и щелкните на пункте меню Select All. Оболочка создаст обработчик, который заполните так
    Обработчик команды Select All категории Edit
    void __fastcall TMainForm::EditSelectAllClick(TObject *Sender)
    {
      MemoEdit->SelectAll();        
    }
Обработчик команды Cut

Компонент MemoEdit содержит встроенный метод CutToClipboard(), воспользуемся им.

  • Раскройте категорию Edit и щелкните на пункте меню Cut. Оболочка создаст обработчик, который заполните так
    Обработчик команды Cut категории Edit
    void __fastcall TMainForm::EditCutClick(TObject *Sender)
    {
     MemoEdit->CutToClipboard();
    }
Обработчик команды Copy

Компонент MemoEdit содержит встроенный метод CopyToClipboard() воспользуемся им.

  • Раскройте категорию Edit и щелкните на пункте меню Copy. Оболочка создаст обработчик, который заполните так
    Обработчик команды Copy категории Edit
    void __fastcall TMainForm::EditCopyClick(TObject *Sender)
    {
     MemoEdit->CopyToClipboard();
    }
Обработчик команды Paste

Компонент MemoEdit содержит встроенный метод PasteFromClipboard(), воспользуемся им.

  • Раскройте категорию Edit и щелкните на пункте меню Paste. Оболочка создаст обработчик, который заполните так
    Обработчик команды Paste категории Edit
    void __fastcall TMainForm::EditPasteClick(TObject *Sender)
    {
     MemoEdit->PasteFromClipboard();
    }
Обработчик команды Word Wrap

Для управления этим режимом воспользуемся двумя свойствами TMemo::WordWrap и TMemo::Checked. Кроме этого предусмотрим, что если режим WordWrap включен, то достаточно только вертикальной линейки прокрутки, в противном случае должны появляться две линейки.

  • Раскройте категорию Edit и щелкните на пункте меню Word Wrap. Оболочка создаст обработчик, который заполните так
    Обработчик команды Word Wrap категории Edit
    void __fastcall TMainForm::EditWordWrapClick(TObject *Sender)
    {
     MemoEdit->WordWrap = !MemoEdit->WordWrap;
     EditWordWrap->Checked = MemoEdit->WordWrap;
     if(MemoEdit->WordWrap)
       MemoEdit->ScrollBars = ssVertical;
     else
       MemoEdit->ScrollBars = ssBoth;
    }

Создание диалогового окна About

  • Разблокируйте режим вызуального редактирования командой меню оболочки Edit/Lock Controls
  • Создайте новую форму. Уменьшите ее размер до размера типичного окна About

Отметьте, что оболочка создала два новых файла с дежурными именами unit1.cpp и unit1.h

  • Установите Name=AboutBox, Caption=Об авторах, BorderStyle=bsDialog, Position=poScreenCenter
  • Сохраните проект, присвоив файлу unit1.cpp имя About.cpp. Проследите, чтобы файл был записан в ту же папку проекта
  • Отредактируйте форму в соответствии с характеристиками выполняемой лабораторной работы, используя текстовые метки Label палитры компонентов Standard. Значения свойств Name текстовых меток оставьте по умолчанию, поскольку мы не будем в дальнейшем ими программно управлять
  • Вставьте значок в окно About. Для этого поместите на форму компонент Image вкладки Additional палитры компонентов
  • Найдите свойство AutoSize компонента Image и измените его значение на true
  • Найдите свойство Picture и через диалоговое окно редактора изображений загрузите подходящую иконку или рисунок (только не очень большой). Размер компонента автоматически подстроится под размер значка
  • Из вкладки Additional палитры компонентов поместите на форму кнопку BitBtn. Установите ее свойства Kind=bkOK, Caption=Выход. Компонент BitBtn уже содержит внутренний код для закрытия формы при нажатии кнопки
  • Из вкладки Additional палитры компонентов поместите на форму компонент Bevel, но прежде, чем отпустить кнопку мыши, обведите рамкой строки текста. Установите свойство Shape=bsFrame, чтобы изменить форму рамки

Поскольку управление формой About будет выполняться кодом файла UScratchPad.cpp, добавим в начало этого файла описание класса TAboutBox. Это можно сделать вручную, добавив инструкцию #include "About.h". Но сделайте это по другому...

  • Установите текущей главную форму MainForm. Через меню оболочки выполните команду File/Include Unit Hdr и через диалоговое окно вставьте макроинструкцию About.h. Убедитесь, что она появилась в начале файла UScratchPad.cpp
    Подключение заголовочного файла About.h к файлу UScratchPad.cpp
    #include 
    #pragma hdrstop
    	
    #include "UScratchPad.h"
    #include "About.h"

Обработчики категории Help

В категории Help у нас только одна команда (вторую мы сделали недоступной), вызывающая модальное диалоговое окно About.

Обработчик команды About...

Вспомним, что диалоговому окну About мы присвоили идентификатор AboutBox. Будем вызывать его в модальном режиме.

  • Раскройте категорию Help и щелкните на пункте меню About. Оболочка создаст обработчик, который заполните так
    Обработчик команды About категории Help
    void __fastcall TMainForm::HelpAboutClick(TObject *Sender)
    {
     AboutBox->ShowModal();
    }

Подключение кнопок панели инструментов

Кнопки панели инструментов - быстрый способ выполнения команд меню.

  • Выделите кнопку FileOpenBtn одним щелчком на форме или через раскрывающийся список инспектора объектов. Установите инспектор объектов в режим Events. Для события OnClick установите обработчик FileOpenClick

  • Выделите кнопку FileSaveBtn одним щелчком на форме или через раскрывающийся список инспектора объектов. Установите инспектор объектов в режим Events. Для события OnClick установите обработчик FileSaveClick

Подключение короткой и длинной подсказок

Коротким называются всплывающие подсказки, длинные подсказки появляются в строке состояния.

Приложение в C++Builder является объектом Application, определенным по умолчанию. Когда свойство ShowHint объекта Application имеет значение true (значение по умолчанию) и курсор мыши находится над компонентом запущенного приложения, у которого свойство ShowHint включено, т.е. также имеет значение true, - генерируется событие Hint объекта Application. При этом значение свойства Hint объекта компонента копируется в значение Hint объекта Application. Если перехватить и обработать событие OnHint объекта Application и в нем вывести значение свойства Hint в строку состояния, то получим управление подсказками.

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

Свойства TApplication, относящиеся к всплывающим подсказкам
Свойство Описание
HintColor Устанавливает цвет фона всплывающей подсказки.
HintHidePause Устанавливает время (в миллисекундах), по прошествии которого подсказка исчезает, если курсор мыши все еще продолжает указывать на компонент.
HintPause Устанавливает интервал времени (в миллисекундах) от момента задержки курсора над компонентом до появления всплывающей подсказки
HintShortPause Устанавливает интервал времени между отображениями всплывающих подсказок, следующих чередой при перемещении курсора по компонентам группы.

Перехват события Hint объекта приложения

  • Добавьте в описание класса TScratchPad файла UScratchPad.h объявление функции-обработчика
    Объявление функции-обработчика события Hint
    class TMainForm : public TForm
    {
    .......................................................
            void __fastcall HelpAboutClick(TObject *Sender);
    private:	// User declarations
            AnsiString nameForm;
    public:		// User declarations
            __fastcall TMainForm(TComponent* Owner);
    private:
            void __fastcall OnHint(TObject *Sender);
    };
  • Добавьте в конец файла UScratchPad.cpp определение функции-обработчика
    Определение функции-обработчика события Hint
    
    void __fastcall TMainForm::OnHint(TObject *Sender)
    {
     StatusBar->SimpleText = Application->Hint;  
    }
  • Выберите главную форму MainForm в селекторе объектов Object TreeView. Переключитесь на вкладку Events в инспекторе объектов и создайте обработчик события OnCreate для главной формы. Введите переадресацию события OnHint приложения на нашу функцию-обработчик
    Переадресация на наш обработчик
    void __fastcall TMainForm::FormCreate(TObject *Sender)
    {
     Application->OnHint = &OnHint;        
    }
Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .