Использование диалоговых компонент текстовым редактором. Приемы отладки

C++Builder поставляется вместе с примером текстового редактора файлов формата RTF. который демонстрирует работу диалоговых компонент TOpenDialog, TSaveDialog, TFontDialog и TPrintDialog. Приложение также использует ранее описанные компоненты TMainMenu, TRichEdit, TPanel, TEdit, TSpeedButton. TComboBox, TUpDown, TLabel, TBevel и способно предоставлять контекстно-зависимую помощь из файла RICHEDIT.HLP.

=> По команде главного меню File |Open Project откройте диалог выбора проектов.

=> Войдите в каталог \...\CBuilder\Examples\Apps\RichEdit.

=> Выберите проектный файл с именем RichEdit и нажмите кнопкуOpen.

Использование диалоговых компонент текстовым редактором. Приемы отладки - student2.ru

Рис. 4.21. Форма текстового редактора.

Рис. 4.21 показывает главную форму текстового редактора с перечнем имен основных обработчиков событий, коды которых, как правило, и составляют содержание файлов программных модулей приложений для C++Builder.

Компонента TRichEdit занимает всю свободную область формы редактора, причем вложенные свойства RichEditl->Paragraph содержат атрибуты форматирования параграфов документа. Объект FontName представляет название шрифта, выбранное пользователем из выпадающего списка TComboBox. Для установки размера шрифта служит объект FontSize области редактируемого ввода TEdit, сопряженный с кнопками TUpDown. Под панелью инструментов рас-

положена измерительная линейка с тремя регуляторами форматирования (объекты типа TLabel): левого отступа параграфа Leftind, ширины красной строки Firstind и правого отступа параграфа Rightind (последний регулятор появится после запуска программы). Внизу формы расположена панель строки состояния StatusBar, предназначенная для вывода пояснений к командам меню.

Меню редактора включает типовые команды управления, некоторым из которых поставлены в соответствие быстрые кнопки на панели инструментов.

File Edit Help  
New Open Save Save As     Undo   Contents Search for Help On How to Use Help  
Cut Copy Paste  
About  
Print Font      
Exit      

Вы можете отредактировать (например, с помощью того же Microsoft Word) исходный справочный файл RICHEDIT.RTF из каталога \...\CBuilder\Examples\Apps\RichEdit\Help, а затем собрать новую версию RICHEDIT.HLP с помощью утилиты BUILDHLP.BAT. Наличие действующей команды менюHelp придает программе профессиональный облик и облегчает работу пользователя.

После того, как вы запустите редактор и испытаете что он умеет, придет черед разобраться в том как он это делает. Листинг 4.1 содержит полный текст файла кодового модуля Romain.cpp с необходимыми комментариями. Несмотря на большой размер, целесообразно привести текст целиком, поскольку им вполне можно руководствоваться при создании собственных стилизованных приложений профессионального уровня с меню, быстрыми кнопками, диалогами и контекстной помощью.

ttinclude <vcl.h> ttinclude <windows.hpp> ftpragma hdrstop

#include "Romain.h"

^include "RichAbt.h"

const float RulerAdj = 4.0/3.0; // цена деления линейки

const int GutterWid = 6; // ширина поля подшивки

//-----_-------________--________--________--_____-__--_____

#pragma resource "*.dfm" TMainForm *MainForm;

// Конструктор главной формы приложения _fastcall TMainForm::TMainForm(TComponent *0wner)

: TFormfOwner) { SetFileName((AnsiString)"Untitled") ;

)

// Установка текущих атрибутов Форматирования текста void _fastcall TMainForm::SelectionChange(TObject*) {char sizebuf[6];

try{ FUpdating =true;

FirstInd->Left = // левая граница красной строки int(RichEditl->Paragraph->FirstIndent*RulerAdj)-

4+GutterWid;

LeftInd->Left = // левый отступ параграфа int((RichEditl->Paragraph->LeftIndent+

RichEditl->Paragraph->FirstIndent)*RulerAdj)-

4+GutterWid;

RightInd->Le?t = II правый отступ параграфа •" Ruler->ClientWidth-6-

int((RichEditl->Paragraph->RightIndent+GutterWid)*

RulerAdj) ;

BoldButton->Down = // состояние кнопки "жирный" RichEditl->SelAttributes->Style.Contains(fsBold) ;

ItalicButton->Down = //состояние кнопки "курсив" RichEditl->SelAttributes->Style.Contains(fsltalic) ;

UnderlineButton->Down = // состояние кнопки "подчерк." RichEditl->SelAttributes->Style.Contains(fsUnderline) ;

BulletsButton->Down = // состояние кнопки "нумерация" bool(RichEditl->Paragraph->Numbering) ;

FontSize->Text = // размер шрифта itoa(RichEditl->SelAttributes->Size, sizebuf, 10);

FontName->Text = // название шрифта RichEditl->SelAttributes->Name;

// Состояние кнопок выравнивания параграфа switch((int)RichEditl->Paragraph->Alignment) {case 0: LeftAlign->Down =true; break;

case 1: RightAlign->Down =true; break;

case 2: CenterAlign->Down =true; break;

} }

Наши рекомендации