Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . |
Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 1001 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Теги:
Самостоятельная работа 13:
Простой текстовый редактор в среде программирования Borland C++Builder 6.0
Написание кода приложения
Чтобы наделить функциональностью команды меню и кнопки панели инструментов, нужно написать обработчики команд. Прежде всего убедитесь, что редактор меню закрыт и Вы находитесь в режиме отображения формы.
Обработчики категории File
Заготовки обработчиков всех команд меню создаются оболочкой при нажатии соответствующего пункта меню в режиме дизайнера форм.
Для вызова стандартных диалоговых окон открытия и сохранения файла существуют невизуальные компоненты OpenDialog и SaveDialog, которые находятся во вкладке Dialogs палитры компонентов.
- Добавьте в любое место формы компоненты OpenDialog и SaveDialog из вкладки Dialogs палитры компонентов
- Измените свойство Name этих компонентов на OpenDialog и SaveDialog соответственно
- Измените свойство Filter этих компонентов OpenDialog и SaveDialog через редактор фильтра так, чтобы они могли работать с текстовыми файлами
-
Добавьте в описание класса TMainForm объявление закрытой переменной nameForm, в которой будем хранить неизменяемую часть заголовка главного окна. Для этого откройте вкладку UScratchPad.h редактора кода и добавьте код
Объявление переменной в классе TMainForm class TMainForm : public TForm { __published: // IDE-managed Components TBevel *Bevel; TPanel *SpeedBar; TSpeedButton *FileOpenBtn; TSpeedButton *FileSaveBtn; TStatusBar *StatusBar; TMemo *MemoEdit; TMainMenu *MainMenu; TMenuItem *File; TMenuItem *FileExit; TMenuItem *N1; TMenuItem *FilePrintSetup; TMenuItem *FilePrint; TMenuItem *N2; TMenuItem *FileSaveAs; TMenuItem *FileSave; TMenuItem *FileOpen; TMenuItem *FileNew; TMenuItem *Help; TMenuItem *HelpAbout; TMenuItem *HelpContents; TMenuItem *Edit; TMenuItem *EditReplace; TMenuItem *EditFind; TMenuItem *N4; TMenuItem *EditPaste; TMenuItem *EditCopy; TMenuItem *EditCut; TMenuItem *N5; TMenuItem *EditUndo; TMenuItem *N3; TMenuItem *EditWordWrap; TMenuItem *EditSelectAll; TOpenDialog *OpenDialog; TSaveDialog *SaveDialog; void __fastcall FileSaveAsClick(TObject *Sender); void __fastcall FileSaveClick(TObject *Sender); void __fastcall FileExitClick(TObject *Sender); void __fastcall FileOpenClick(TObject *Sender); void __fastcall FileNewClick(TObject *Sender); private: // User declarations AnsiString nameForm; public: // User declarations __fastcall TMainForm(TComponent* Owner); };
-
Добавьте в конструктор класса TMainForm инициализацию переменных
Инициализация в конструкторе класса TMainForm __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { nameForm = "Блокнот 1.0"; Caption = nameForm + " "; }
Обработчики работы с файлами создадим не в том порядке, в котором они следуют в меню Файл, потому что в некоторых новых обработчиках будем использовать вызовы уже созданных ранее.
Обработчик команды Сохранить как...
-
Раскройте категорию File и щелкните на пункте меню Сохранить как... . Оболочка создаст обработчик, который заполните так
Обработчик команды Сохранить как... категории Файл void __fastcall TMainForm::FileSaveAsClick(TObject *Sender) { if(!MemoEdit->Lines->Count) { int result = Application->MessageBox( "Нечего сохранять! Сохранить пустой файл?", "Сообщение блокнота", MB_YESNOCANCEL | MB_ICONSTOP); if(result != IDYES) return; } SaveDialog->Title = "Сохранение своего файла как ..."; if(SaveDialog->Execute()) { MemoEdit->Lines->SaveToFile(SaveDialog->FileName); MemoEdit->Modified = false; } AnsiString name = SaveDialog->FileName; int pos = LastDelimiter("\\", name); if(IsPathDelimiter(name, pos)){ name = name.Delete(1, pos); } Caption = nameForm + " <" + name + ">"; }
Обработчик команды Сохранить
-
Раскройте категорию File и щелкните на пункте меню Сохранить. Оболочка создаст обработчик, который заполните так
Обработчик команды Сохранить категории Файл void __fastcall TMainForm::FileSaveClick(TObject *Sender) { // Если нет имени, вызвать SaveDialog if(SaveDialog->FileName == "") FileSaveAsClick(Sender); else { MemoEdit->Lines->SaveToFile(SaveDialog->FileName); MemoEdit->Modified = false; } }
Обработчик команды Выход
-
Раскройте категорию File и щелкните на пункте меню Выход. Оболочка создаст обработчик, который заполните так
Обработчик команды Выход категории Файл void __fastcall TMainForm::FileExitClick(TObject *Sender) { if(MemoEdit->Modified){ int result = Application->MessageBox( "Сохранить изменения?", "Сообщение блокнота", MB_YESNOCANCEL | MB_ICONWARNING); if(result == IDYES) FileSaveClick(Sender); else if(result == IDCANCEL) return; } Close(); }
Обработчик команды Открыть...
-
Раскройте категорию File и щелкните на пункте меню Открыть... . Оболочка создаст обработчик, который заполните так
Обработчик команды Открыть... категории Файл void __fastcall TMainForm::FileOpenClick(TObject *Sender) { // Проверяем необходимость сохранения данных if(MemoEdit->Modified) { int result = Application->MessageBox( "Данные изменены! Сохранить изменения?", "Сообщение блокнота", MB_YESNOCANCEL | MB_ICONWARNING); if(result == IDYES) FileSaveClick(Sender); else if(result == IDCANCEL) return; } // Вызов диалога для выбора имени файла OpenDialog->Title = "Свое окно диалога открытия файла"; OpenDialog->FileName = "";// на случай отказа if(OpenDialog->Execute()) { if(MemoEdit->Lines->Count > 0) MemoEdit->Clear(); MemoEdit->Lines->LoadFromFile(OpenDialog->FileName); SaveDialog->FileName = OpenDialog->FileName; AnsiString name = SaveDialog->FileName; int pos = LastDelimiter("\\", name); if(IsPathDelimiter(name, pos)){ name = name.Delete(1, pos); } Caption = nameForm + " <" + name + ">"; } }
Обработчик команды Создать
-
Раскройте категорию File и щелкните на пункте меню Создать. Оболочка создаст обработчик, который заполните так
Обработчик команды Создать категории Файл void __fastcall TMainForm::FileNewClick(TObject *Sender) { // Проверяем необходимость сохранения данных if(MemoEdit->Modified) { int result = Application->MessageBox( "Данные изменены! Сохранить изменения?", "Сообщение блокнота", MB_YESNOCANCEL | MB_ICONWARNING); if(result == IDYES) FileSaveClick(Sender); else if(result == IDCANCEL) return; } // Очищаем компонент Memo if(MemoEdit->Lines->Count > 0) MemoEdit->Clear(); // Установим имя нового файла пустым SaveDialog->FileName = ""; Caption = nameForm + " "; }