Разработка текстового редактора
Рефераты >> Программирование и компьютеры >> Разработка текстового редактора

2.1.7 Перечисления

Есть другой метод определения целых констант, который иногда более удобен, чем применение const. Например: enum { ASM, AUTO, BREAK }; определяет три целых константы, называемы перечислителями, и присваивает им значения. Поскольку значения перечислителей по умолчанию присваиваются начиная с 0 в порядке возрастания, это эквивалентно записи: const ASM = 0; const AUTO = 1; const BREAK = 2; Перечисление может быть именованным. Например: enum keyword { ASM, AUTO, BREAK }; Имя перечисления становится синонимом int, а не новым типом. Описание переменной keyword, а не просто int, может дать как программисту, так и компилятору подсказку о том, что использование преднамеренное. Например: keyword key; switch (key) { case ASM: // что-то делает break; case BREAK: // что-то делает break; } побуждает компилятор выдать предупреждение, поскольку только два значения keyword из трех используются. Можно также задавать значения перечислителей явно. Например: enum int16 { sign=0100000, // знак most_significant=040000, // самый значимый least_significant=1 // наименее значимый }; Такие значения не обязательно должны быть различными, возрастающими или положительными.

Перечень ссылок

1. Герберт Шилдт, Самоучитель С++, 3-е издание: BHV – Санкт-Петербург, 1998. – 688 с.

2. Рубенкинг Н. Программирование в Delphi для «чайников». 2-е издание – К.: «Диалектика», 1996. – 368 с.

3. Фаронов В.В. Delphi 4. Учебный курс.-М.: «Нолидж», 1999.-464 с.

Приложение А

#include <vcl.h>

#pragma hdrstop

#include "About.h"

#include "AlexWord.h"

#include "LogoStrs.h"

const float RulerAdj = 4.0/3.0;

const int GutterWid = 6;

#pragma link "CGRID"

#pragma resource "*.dfm"

TForm1 *Form1;

fastcall TForm1::TForm1(TComponent *Owner)

: TForm(Owner)

{

}

void fastcall TForm1::RichEdit1SelectionChange(TObject *Sender)

{

char sizebuf[6];

try {

FUpdating = True;

ComboBox1->Text = RichEdit1->SelAttributes->Name;

FirstInd->Left = int(RichEdit1->Paragraph->FirstIndent*RulerAdj)-4+GutterWid;

LeftInd->Left = int((RichEdit1->Paragraph->LeftIndent+

RichEdit1->Paragraph->FirstIndent)*RulerAdj)-4+GutterWid;

RightInd->Left = Ruler->ClientWidth-6-int(

(RichEdit1->Paragraph->RightIndent+GutterWid)*RulerAdj);

if (CurrText()->Style==CurrText()->Style >> fsItalic)

ToolButton17->Down=false;

else ToolButton17->Down=true;

if (CurrText()->Style==CurrText()->Style >> fsBold)

ToolButton15->Down=false;

else ToolButton15->Down=true;

if (CurrText()->Style==CurrText()->Style >> fsUnderline)

ToolButton3->Down=false;

else ToolButton3->Down=true;

Edit2->Text = itoa(RichEdit1->SelAttributes->Size, sizebuf, 10);

if (RichEdit1->Paragraph->Alignment == taLeftJustify)

LeftAlign->Down=true;

else LeftAlign->Down=false;

if (RichEdit1->Paragraph->Alignment == taCenter)

CenterAlign->Down=true;

else CenterAlign->Down=false;

if (RichEdit1->Paragraph->Alignment == taRightJustify)

RightAlign->Down=true;

else RightAlign->Down=false;

if(RichEdit1->Paragraph->Numbering == TNumberingStyle(nsBullet))

ToolButton14->Down=true;

else ToolButton14->Down=false;

}

catch ( .) {

FUpdating = False;

}

FUpdating = False;

}

TTextAttributes * fastcall TForm1::CurrText(void)

{

return RichEdit1->SelAttributes;

}

void fastcall TForm1::FileNew1Execute(TObject *Sender)

{

FFileName = LoadStr(sUntitled);

RichEdit1->Lines->Clear();

RichEdit1->Modified = false;

}

void fastcall TForm1::FileOpen1Execute(TObject *Sender)

{

if (OpenDialog->Execute())

{

RichEdit1->Lines->LoadFromFile(OpenDialog->FileName);

FFileName = OpenDialog->FileName;

RichEdit1->SetFocus();

RichEdit1->Modified = false;

RichEdit1->ReadOnly = OpenDialog->Options.Contains(ofReadOnly);

Form1->Caption = OpenDialog->FileName;

}

}

void fastcall TForm1::FileSave1Execute(TObject *Sender)

{

if (FFileName == LoadStr(sUntitled))

{

FileSaveAs1Execute(Sender);

Form1->Caption = SaveDialog->FileName; }

else

{

RichEdit1->Lines->SaveToFile(FFileName);

RichEdit1->Modified = false; }

}

void fastcall TForm1::FileSaveAs1Execute(TObject *Sender)

{

String str;

TVarRec vrs[1];

if (SaveDialog->Execute())

{

if (FileExists(SaveDialog->FileName))

{

str = FmtLoadStr(sOverwrite, OPENARRAY(TVarRec, (SaveDialog->FileName)));

if (MessageDlg(str, mtConfirmation, TMsgDlgButtons() << mbYes << mbNo <<

mbCancel, 0) != IDYES)

return;

}

RichEdit1->Lines->SaveToFile(SaveDialog->FileName);

FFileName = SaveDialog->FileName;

RichEdit1->Modified = false;

}

}

void fastcall TForm1::CheckFileSave(void)

{

if ( RichEdit1->Modified ) {

switch(MessageBox(Handle, "Save Changes?",

"Confirmation",MB_YESNOCANCEL | MB_ICONQUESTION))

{ case ID_YES : FileSave1Execute(this);

case ID_CANCEL : Abort();

}

}

}

void fastcall TForm1::FileExit1Execute(TObject *Sender)

{

Close();

}

void fastcall TForm1::HelpAbout1Execute(TObject *Sender)

{

AboutBox->ShowModal();

}

void fastcall TForm1::UndoClick(TObject *Sender)

{

if ( RichEdit1->HandleAllocated() )

SendMessage(RichEdit1->Handle, EM_UNDO, 0, 0);

}

void fastcall TForm1::PrintClick(TObject *Sender)

{

if (PrintDialog1->Execute()) RichEdit1->Print(OpenDialog->FileName);

}

void fastcall TForm1::Print_SetupClick(TObject *Sender)

{

PrinterSetupDialog1->Execute();

}

void fastcall TForm1::FindClick(TObject *Sender)

{

FindDialog1->FindText = RichEdit1->SelText;

FindDialog1->Execute();

}

void fastcall TForm1::FindDialog1Find(TObject *Sender)

{

int FoundAt, StartPos, ToEnd;

if (RichEdit1->SelLength)

StartPos = RichEdit1->SelStart + RichEdit1->SelLength;

else

StartPos = 0;

ToEnd = RichEdit1->Text.Length() - StartPos;

FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase);

if (FoundAt != -1)

{

RichEdit1->SetFocus();

RichEdit1->SelStart = FoundAt;

RichEdit1->SelLength = FindDialog1->FindText.Length();

}

}

void fastcall TForm1::ReplaceDialog1Replace(TObject *Sender)

{

if (RichEdit1->SelLength == 0)

FindDialog1Find(Sender);


Страница: