- •«Первые простые программы». Блокнот.
- •Свойства компонента txt
- •Компонент меню
- •Компоненты диалоговых окон открытия и сохранения файла
- •Событие Onclick команды меню Файл Новый.
- •Введите код, выделенный ниже полужирным шрифтом:
- •Событие Onclick команды меню Файл Открыть
- •Событие OnClick команды меню Файл Сохранить
- •Событие OnClick команды меню Файл Выход
- •Событие OnCreate формы
- •Сохраните создаваемый проект в своей папке.
- •Компиляция и запуск программы
- •Файл Close All.
- •Выполните самостоятельно:
- •Калькулятор.
- •Сохраните создаваемый проект в своей папке.
- •Компиляция и запуск программы
- •Файл Close All.
- •Выполните самостоятельно:
- •Краткие теоретические сведения к пункту 10.7.
- •В Object Pascal это выражение будет выглядеть так:
Сохраните создаваемый проект в своей папке.
Для этого выполните команду главного меню File => Save All (Сохранить Все) или нажмите на кнопку Save All на панели инструментов.
В окне Save Unit as с помощью списка выберите свою папку, создайте в ней папку Delphi и откройте ее, создайте папку Notebook и откройте ее, задайте название для файла текста программы U_Notebook, предварительно удалив предложенное компьютером название Unitl.pas => кнопка Сохранить.
В следующем окне «Save Projectl As» введите название файла проекта Р_Notebook, удалив предложенное компьютером название Projectl.dpr => сохранить.. Обратите внимание: файлы проекта и текста программы должны иметь разные названия.
Компиляция и запуск программы
Для компиляции программы с последующим ее выполнением можно нажать клавишу <F9>, щелкнуть на кнопке Run панели инструментов или выполнить команду меню Run Run.
Файл программы, созданный в результате компиляции, будет назван в соответствии с именем файла проекта, в данном случае — Notebook.ехе.
Файл Close All.
Выполните самостоятельно:
Поместите на форму компонент Panel, присвойте свойству Align значение alTop. Удалите строку из свойства Caption.
. Поместите на Panel четыре компонента Button (кнопка) и присвойте их свойству Caption соответственно значения &Open, &Save, Save &As…, E&xit. Определите свойство Font для панели из кнопок как «жирный»
. Измените заголовок формы (свойство Caption) –, My Editor
Каждый пункт меню кроме Новый свяжите с уже существующим методом OnClick для соответствующих кнопок. Например, кнопка Open имеет имя Button1, поэтому на странице Events окна Object Inspector для пункта меню Open вы щелкните на клавише открытия списка, расположенной рядом с OnClick и выберите Button1.Click.
Добавьте еще один пункт меню Цвет, и в нем два подпункта Цвет фона и Цвет текста.
Поместите на форму компонент ColorDialog, находящийся в палитре Dialogs.
В обработчик пункта меню Цвет фона вставьте следующий код:
with ColorDialog1 do
if Execute then
memo1.Color:=color;
В обработчик пункта меню Цвет текста вставьте следующий код:
with ColorDialog1 do
if Execute then
memo1.Font.Color:=color;
Создайте для формы обработчик события OnCloseQuery:
if txt.Modified then
case MessageDlg('Файл'+ExtractFileName(SaveDialog1.FileName)+
'был изменен. Сохранить?',mtConfirmation,mbYesNoCancel,0) of
idYes: button2Click(Sender);
idNo:;
idCancel:CanClose:=false;
end;
Установите на панели Panel три кнопки SpeedButton.
Кнопки SpeedButton имеют возможность отображения пиктограмм и могут использоваться как обычные управляющие кнопки или как кнопки с фиксацией нажатого состояния. Изображение на кнопке задается свойством Glyph.
Особенностью кнопок SpeedButton являются свойства GroupIndex (индекс группы), AllowAllUp (разрешение отжатого состояния всех кнопок группы) и Down (исходное состояние — нажатое). Если GroupIndex = 0, то кнопка ведет себя так же, как Button и BitBtn. При нажатии пользователем кнопки она погружается, а при отпускании возвращается в нормальное состояние. В этом случае свойства AllowAllUp и Down не влияют на поведение кнопки.
Если Grouplndex > 0 и AllowAllUp = true, то кнопка при щелчке пользователя на ней погружается и остается в нажатом состоянии. При повторном щелчке пользователя на кнопке она освобождается и переходит в нормальное состояние (именно для того, чтобы освобождение кнопки состоялось, необходимо задать AllowAllUp = true). Если свойство Down во время проектирования установлено равным true, то исходное состояние кнопки — нажатое.
Если есть несколько кнопок, имеющих одинаковое ненулевое значение GroupIndex, то они образуют группу взаимосвязанных кнопок из которых нажатой может быть только одна. Если одна кнопка находится в нажатом состоянии и пользователь щелкает на другой, то первая кнопка освобождается, а вторая фиксируется в нажатом состоянии.
Состояние кнопки во время выполнения можно определить по значению свойства Down: если значение равно true, то кнопка нажата. Во время события OnClick значение Down уже равно тому состоянию, которое примет кнопка в результате щелчка на ней.
В свойства Caption этих кнопок введите буквы Ж(жирный), К(курсив), П(подчеркнутый) соответствующим образом изменив тип начертания в свойстве Font.
Выделите все три кнопки и установите их свойство AllowAllUp установим True.
Установите следующие свойства:
Компонент
GroupIndex
Tag
SpeedButton1
1
0
SpeedButton2
2
1
SpeedButton3
3
2
В обработчик события OnClick для кнопки Ж введите:
with sender as TSpeedButton do
begin
if down then
memo1.Font.Style:=memo1.Font.Style+[TFontStyle(tag)]
else
memo1.Font.Style:=memo1.Font.Style-[TFontStyle(tag)]
end;
События OnClick для оставшихся двух кнопок свяжите с событием SpeedButton1Click при помощи Инспектора объектов, как в случае с пунктами меню.
Поместите на панель еще одну кнопку SpeedButton. В свойство Caption ничего не вводить. Выполните два щелчка на свойстве Glyph. В появившемся диалоговом окне выберите команду Load и из каталога Program Files/Common Files/Borland Shared/Images/Buttons загрузите файл Font.bmp или любой другой.
В обработчике OnClick написать следующий код:
with fontdialog1 do
if execute then memo1.Font:=font;
Поместите на панель еще три кнопки SpeedButton, которые будут отвечать за выравнивание текста по левому краю, по правому краю и по центру.
Задайте их свойства следующим образом:
Компонент
GroupIndex
Tag
SpeedButton5
4
0
SpeedButton6
4
1
SpeedButton7
4
2
В свойствах Caption введите «<», «>» и «=» соответственно.
Для 1-й кнопки создайте обработчик OnClick:
with sender as tspeedbutton do
memo1.Paragraph.Alignment:=TAlignment(tag)
Обработчики этого события для остальных кнопок свяжите с SpeedButton5Click
Сделайте так, чтобы файлы сохранялись в формате rtf
Компонент Memo позволяет хранить информацию только в формате txt, поэтому при закрытии файла все элементы форматирования пропадут. Поэтому замените компонент на позволяющий сохранять текст в формате rtf.
Для чего необходимо нажать Alt+F12. На экране появится окно с содержимым файла Unit1.dfm (данный файл ресурсов формы содержит все настройки формы, сделанные с помощью Инспектора объектов). Найдите в этом файле описание компонента object Memo1: T Memo и замените его на Memo1: TRichEdit. Затем снова нажмите Alt+F12. При компиляции согласитесь с тем, что вам предложит Delphi.
Установите
на форму компонент StatusBar,
находящийся в палитре Win32.
Два раза щелкните на компоненте, чтобы
перейти в окно редактирования StatusBar.
В окне редактирования три раза нажмите
кнопку Добавить,
чтобы получить три панели на компоненте.
На первых двух будет отображаться
текущее состояние клавиш CapsLock
и NumLock.
На третьей – системное время.
Добавьте на форму компонент Timer, расположенный на палитре System. добавьте в список глобальных переменных KS: Tkeyboardstate
Создать обработчик OnTimer:
GetKeyBoardState(KS);
with StatusBar1 do
begin
if KS[VK_Capital]=1 then panels[0].Text:='CAP' else panels[0].Text:='';
if KS[VK_NumLock]=1 then panels[1].Text:='Num' else panels[1].Text:='';
StatusBar1.Panels[2].Text:=TimeToStr(Time);
end;
Чтобы не было секундной задержки после загрузки программы, для обработчика OnCreate формы выберем Timer1Timer.
Создайте контекстное меню.
Установите на форму компонент PopupMenu.
Создайте пункты – Cut, Copy, Paste.
В обработчики событий OnClick введите соответственно следующий код:
Для пункта Copy: Memo1. CopyToClipboard;
Для пункта Cut: Memo1. CutToClipboard;
Для пункта Paste: Memo1.PasteFromClipboard;
В свойстве Memo1 (txt) PopUpMenu выберем PopUpMenu1
Для того, чтобы недоступные команды (если текст не выделен или буфер пуст) выделялись серым цветом сделаем следующее. В список uses добавим модуль Clipbrd (он обеспечивает доступ к объекту Clipboard – буферу обмена).
Создадим обработчик OnPopUp для PopUpMenu
copy1.Enabled:=memo1.SelLength>0;
cut1.Enabled:=memo1.SelLength>0;
paste1.Enabled:=Clipboard.HasFormat((CF_TEXT);
Создайте кнопку для
Зачеркнутогошрифта(свойство Style – fsStrikeOut, т.е Tag=3)Сделайте всплывающие подсказки для всех кнопок
Добавьте на панель кнопку для добавления маркеров. В обработчике OnClick для новой кнопки поместите код:
if (sender as TSpeedButton).down then
txt.Paragraph.Numbering:=nsBullet else
txt.Paragraph.Numbering:=nsNone
Используя свойство ShortCut пунктов меню назначьте им комбинации горячих клавиш, например – Открыть – Ctrl+O, Сохранить - Ctrl+S и т.п
Создайте кнопку Undo, при нажатии которой будет отменено последнее действие. В обработчике кнопки поместите код:
Memo1.Undo.
Если отменять нечего, кнопка должна быть недоступной (для этого используйте свойство Memo1.CanUndo.
Добавьте в контекстное меню пункты Выделить все (метод SelectAll) и Удалить (ClearSelection). Если операции недоступны, пункты должны быть неактивными. В первом случае можно использовать значение txt.text<>’’.
