Конспекты школьника
Вид материала | Конспект |
- Конспекты уроков, 617.19kb.
- Конспекты по философии, 410.53kb.
- Конспекты лекций осеннего семестра 2007/08 учебного года Конспекты практических занятий, 22.06kb.
- Лекции для родителей первоклассников. Тема: «Позиция школьника и ее влияние на учебную, 191.43kb.
- Цифровые информационные ресурсы по географии мультимедийные диски, 16.67kb.
- Родительское собрание в 1 классе. Режим дня в жизни школьника, 78.66kb.
- Режим дня младшего школьника, 96.3kb.
- Моу сош №18 Использование литературных произведений на уроках биологии, 120.94kb.
- Критерии воспитанности личности школьника, 29.72kb.
- Режим дня младшего школьника, 79.47kb.
^ Private Sub mnuEdit_Click()
mnuEPaste.Enabled = False
If Clipboard.GetText() <> "" Then mnuEPaste.Enabled = True
End Sub
Вырезать, копировать и удалять можно только если выделен какой-либо блок текста.
Private Sub mnuEdit_Click()
mnuEPaste.Enabled = False
mnuECut.Enabled = False
mnuECopy.Enabled = False
mnuEDel.Enabled = False
If Clipboard.GetText() <> "" Then mnuEPaste.Enabled = True
^ If txtNotepad.SelText <> "" Then
mnuECut.Enabled = True
mnuECopy.Enabled = True
mnuEDel.Enabled = True
End If
End Sub
Хорошо. Теперь меню работает как надо!

Осталось исправить еще одну неприятную особенность: при изменении размеров окна размеры текстового поля не изменяются, в результате возникает такая вот картина:

Исправим. Добавим код изменяющий размеры текстового поля, если происходит изменение размеров формы:
Private Sub Form_Resize()
txtNotepad.Top = 0
txtNotepad.Left = 0
txtNotepad.Width = frmNotepad.Width - 100
txtNotepad.Height = frmNotepad.Height - 800
End Sub
Так как на форме не только текстовое поле, но и меню, и полоса прокрутки нам пришлось вычесть их размеры.
Готово! Теперь приложение готово! Мы создали полноценный текстовый редактор.


Учимся программировать!
Конспекты школьника.
^ Текстовый редактор с возможностью форматирования текста.
На этом занятии мы продолжим работать над проектом текстового редактора. Сделаем его более продвинутым: научим форматировать текст и добавим панель инструментов.
Добавим в меню новый пункт, позволяющий пользователю вызвать окно выбора шрифта.

Имя | Название (Caption) | Быстрая клавиша |
mnuFile | &Файл | |
mnuFNew | Созд&ать | Ctrl+N |
mnuFOpen | &Открыть... | Ctrl+O |
mnuFSave | &Сохранить | Ctrl+S |
mnuFSaveAs | Сохранить &как... | |
mnuEdit | &Правка | |
mnuECut | &Вырезать | Ctrl+X |
mnuECopy | &Копировать | Ctrl+C |
mnuEPaste | Вст&авить | Ctrl+V |
mnuEDel | &Удалить | |
mnuFormat | Фор&мат | |
mnuFFont | &Шрифт | |
Для выбора шрифта воспользуемся компонентом CommonDialоg (тот который на прошлом занятии использовали для выбора файла при сохранении или открытии), содержит стандартные диалоговые окна Windows: открыть/сохранить файл, цвет, шрифт, печать, помощь.
Присвойте объекту имя (name): dlgMyDialоg. Затем вызовете страницы свойств (щелчок правой кнопкой → Propirties) и установите нужные свойства на закладке "Font" (Шрифт).

У CommonDialog есть свойство Flags которое управляет многими параметрами диалога. Полный список всех констант можно получить с помощью проводника объектов (Object browser) Вид → Проводник объектов или F2.

В нашем примере свойство Flags мы установили = 258. Откуда взялось это значение? Это сумма двух констант cdlCFPrinterFonts = 2 (использовать только те шрифты, которые поддерживают принтеры) и cdlCFEffects = 256 (разрешить эффекты форматирования: подчеркивание, зачеркивание и выбор цвета на панели выбора шрифта).
Это свойство можно было бы задать и программно. Например, так:
dlgMyDialоg.Flags = cdlCFPrinterFonts + cdlCFEffects
или так:
dlgMyDialоg.Flags = 256 + 2
или так:
dlgMyDialоg.Flags = 258
Работаем дальше.
Не забудьте заменить во всем коде программы dlgFile на dlgMyDialоg (т.к. мы изменили имя объекта: был dlgFile, а стал - dlgMyDialоg). Для этого удобно воспользоваться командой Правка → Заменить...

Теперь можно уже, наверное, писать обработчик события для нового пункта меню...
Прежде чем писать обработчик события для нового пункта меню, необходимо произвести еще одну замену: необходимо обычное текстовое поле заменить компонентом RichTextBox. Все дело в том, что обычное текстовое поле не позволяет изменять параметры шрифта для части текста, позволяет изменить только то как будет отображаться текст в текстовом поле. Для примера сравните стандартные программы Windows Блокнот и WordPad.

Выбрать в VisualBasic Проект → Компоненты (или [Cntr+T] )и установить флажок у компонента Microsoft Rich Textbox 6.0.
Замените текстовое поле усовершенствованным текстовым полем.
Объект | Свойство | Значение |
RichTextbox | имя | txtNotepad |
text | "" (пустая строка) | |
MiltiLine | True |
Вот теперь создадим обработчик меню Формат → Шрифт...
Для вызова окна выбора шрифта используется метод ShowFont. Перед выводом окна зададим первоначальные значения в соответствии с выделенным текстом (название шрифта, размер, начертание: жирный, начертание: курсив).
Private Sub mnuFFont_Click()
dlgMyDialоg.FontName = txtNotepad.SelFontName
dlgMyDialоg.FontSize = txtNotepad.SelFontSize
dlgMyDialоg.FontBold = txtNotepad.SelBold
dlgMyDialоg.FontItalic = txtNotepad.SelItalic
dlgMyDialоg.Color = txtNotepad.SelColor
dlgMyDialоg.FontStrikethru = txtNotepad.SelStrikeThru
dlgMyDialоg.FontUnderline = txtNotepad.SelUnderline
dlgMyDialоg.ShowFont
End Sub
После того как пользователь выбран нужные параметры присвоим их выделенному тексту.
Private Sub mnuFFont_Click()
dlgMyDialоg.FontName = txtNotepad.SelFontName
dlgMyDialоg.FontSize = txtNotepad.SelFontSize
dlgMyDialоg.FontBold = txtNotepad.SelBold
dlgMyDialоg.FontItalic = txtNotepad.SelItalic
dlgMyDialоg.Color = txtNotepad.SelColor
dlgMyDialоg.FontStrikethru = txtNotepad.SelStrikeThru
dlgMyDialоg.FontUnderline = txtNotepad.SelUnderline
dlgMyDialоg.ShowFont
txtNotepad.SelFontName = dlgMyDialоg.FontName
txtNotepad.SelFontSize = dlgMyDialоg.FontSize
txtNotepad.SelBold = dlgMyDialоg.FontBold
txtNotepad.SelItalic = dlgMyDialоg.FontItalic
txtNotepad.SelColor = dlgMyDialоg.Color
txtNotepad.SelStrikeThru = dlgMyDialоg.FontStrikethru
txtNotepad.SelUnderline = dlgMyDialоg.FontUnderline
End Sub
Теперь мы можем форматировать текст.



Если вы желаете, чтобы текст сохранялся как обычно, без форматирования, то можете оставить все как есть.

и функции mnuFSave_Click(), mnuFSaveAs_Click(), mnuFSave_Click().
Private Sub mnuFSave_Click()
If dlgMyDialоg.FileName <> "" Then
txtNotepad.SaveFile dlgMyDialоg.FileName
Else
mnuFSaveAs_Click
End If
End Sub
Private Sub mnuFSaveAs_Click()
dlgMyDialоg.ShowSave
If dlgMyDialоg.FileName <> "" Then
txtNotepad.SaveFile dlgMyDialоg.FileName
End If
End Sub
Private Sub mnuFOpen_Click()
dlgMyDialоg.ShowOpen
If dlgMyDialоg.FileName <> "" Then
txtNotepad.LoadFile dlgMyDialоg.FileName
End If
End Sub
Готово!
Теперь для удобства работы пользователя давайте добавим стандартную панель инструментов.
Панель инструментов служит для быстрого ввода команд. Этот элемент управления не входит в стандартный набор управляющих элементов. Для работы с ним необходимо воспользоваться дополнительным набором управляющих элементов Microsoft Windows Common Control 6.0.

Далее для создания панели инструментов можно воспользоваться мастером (а можно и не воспользоваться).

Выберем в левой части те кнопки которые потребуются в нашем приложении.


Жмем [готово] и панель инструментов появится на форме.
Следует обратить внимание на то, что панель инструментов в любой момент можно отредактировать. Для этого щелкните по панели правой кнопкой мыши и выберите пункт "свойства".

Есть еще один важный момент - обычно, панель инструментов связана с компонентом ImagesList (список изображений). При использовании ранних версий управляющих элементов Microsoft Windows Common Control, например, 5.0, приходилось ImagesList добавлять самостоятельно. В нашем случае компонент ImagesList добавляется и настраивается автоматически.
Найдете этот компонент на форме (для этого лучше воспользоваться Окном свойств) и посмотрите его свойства.

Панель инструментов добавлена на форму, теперь создадим событийную процедуру обработки щелка по кнопкам этой панели. Сделайте двойной щелчок по панели в окне формы. Откроется окно кода, содержащая следующий текст:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComCtlLib.Button)
On Error Resume Next
Select Case Button.Key
Case "New"
'ToDo: Add 'New' button code.
MsgBox "Add 'New' button code."
Case "Open"
'ToDo: Add 'Open' button code.
MsgBox "Add 'Open' button code."
Case "Save"
'ToDo: Add 'Save' button code.
MsgBox "Add 'Save' button code."
Case "Copy"
'ToDo: Add 'Copy' button code.
MsgBox "Add 'Copy' button code."
Case "Cut"
'ToDo: Add 'Cut' button code.
MsgBox "Add 'Cut' button code."
Case "Paste"
'ToDo: Add 'Paste' button code.
MsgBox "Add 'Paste' button code."
Case "Delete"
'ToDo: Add 'Delete' button code.
MsgBox "Add 'Delete' button code."
End Select
End Sub
Для каждой кнопки назначим соответствующую процедуру уже созданную для пунктов меню.
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComCtlLib.Button)
On Error Resume Next
Select Case Button.Key
Case "New"
mnuFNew_Click
Case "Open"
mnuFOpen_Click
Case "Save"
mnuFSave_Click
Case "Copy"
mnuECopy_Click
Case "Cut"
mnuECut_Click
Case "Paste"
mnuEPaste_Click
Case "Delete"
mnuEDel_Click
End Select
End Sub
Теперь исправим процедуры обработки изменения размера формы (Resize) так как панель инструментов теперь закрывает часть текстового поля.
Private Sub Form_Resize()
txtNotepad.Top = Toolbar1.Height
txtNotepad.Left = 0
txtNotepad.Width = frmNotepad.Width - 100
txtNotepad.Height = frmNotepad.Height - 800
End Sub
Программа почти готова. Почти? "Проиграйтесь" с программой и вы обнаружите ошибку: если выделить текст разного формата, то при выборе пункта Формат → Шрифт возникает ошибка при установки параметров окна выбора формата шрифта.
Для борьбы с этой неприятностью воспользуемся оператором перехвата ошибок On Error.
Оператор On Error не выполняет непосредственно никакой обработки ошибок, а лишь передает управление ответственному за обработку ошибок фрагменту программы.
Для определения типа ошибки можно использовать объект Err, свойство которого Number содержит код последней возникшей ошибки.
Итак, в начале процедуры помещается оператор On Error для перехвата возникающих ошибок. В нем указывается метка, к которой происходит переход при возникновении ошибки. Обычно эта метка находится в конце процедуры и перед ней помещается оператор Exit. Благодаря этому оператору, при безошибочном выполнении процедура в этом месте завершает свою работу, и
фрагмент процедуры после метки выполняется только после возникновения ошибки.
При обработке ошибок возникшая ошибка анализируется и выполняются соответствующие действия. Например, при делении на нуль это может быть прекращение текущих вычислений; при ошибках обращения к диску может отображаться диалоговое окно для принятия
пользователем решения о прекращении операции или повторном выполнении.
После корректной обработки ошибки программа должна продолжить свое выполнение. Чтобы программа продолжала выполняться в строке, в которой возникла, а затем была устранена ошибка, в обработчике указывается оператор Resume.
Завершив обработку ошибки, следует продолжить нормальное выполнение программы. Ключевое слово Resume позволяет вернуться в строку, вызвавшую ошибку, для ее повторного выполнения, а оператор Resume Next возвращает в следующую за строкой с ошибкой строку.
Private Sub mnuFFont_Click()
On Error GoTo ErrLabel 'Включает обработку ошибок
dlgMyDialоg.FontName = txtNotepad.SelFontName
dlgMyDialоg.FontSize = txtNotepad.SelFontSize
dlgMyDialоg.FontBold = txtNotepad.SelBold
dlgMyDialоg.FontItalic = txtNotepad.SelItalic
dlgMyDialоg.ShowFont
txtNotepad.SelFontName = dlgMyDialоg.FontName
txtNotepad.SelFontSize = dlgMyDialоg.FontSize
txtNotepad.SelBold = dlgMyDialоg.FontBold
txtNotepad.SelItalic = dlgMyDialоg.FontItalic
Exit Sub
ErrLabel: 'обработка ошибки
'тут можно что-то сделать для обработки ошибки
Resume Next
End Sub
Теперь готово! Программа работает.