Для компиляции программы с последующим ее выполнением можно нажать клавишу <F9>, щелкнуть на кнопке Run панели инструментов или выполнить команду меню Run ð Run.
Файл программы, созданный в результате компиляции, будет назван в соответствии с именем файла проекта, в данном случае— Notebook.ехе.
7. Файл ð Close All.
8. Выполните самостоятельно:
8.1. Поместите на форму компонент Panel, присвойте свойству Align значение alTop. Удалите строку из свойства Caption.
8.2.. Поместите на Panel четыре компонента Button (кнопка) и присвойте их свойству Caption соответственно значения &Open, &Save, Save &As …, E&xit. Определите свойство Font для панели из кнопок как «жирный »
8.3.. Измените заголовок формы (свойство Caption) –, My Editor
8.4. Каждый пункт меню кроме Новый свяжите с уже существующим методом OnClick для соответствующих кнопок. Например, кнопка Open имеет имя Button1, поэтому на странице Events окна Object Inspector для пункта меню Open вы щелкните на клавише открытия списка, расположенной рядом с OnClick и выберите Button1.Click.
8.5. Добавьте еще один пункт меню Цвет, и в нем два подпункта Цвет фона и Цвет текста.
8.6. Поместите на форму компонент ColorDialog, находящийся в палитре Dialogs.
8.7. В обработчик пункта меню Цвет фона вставьте следующий код:
with ColorDialog1 do
if Execute then
memo1.Color:=color;
8.8. В обработчик пункта меню Цвет текста вставьте следующий код:
with ColorDialog1 do
if Execute then
memo1.Font.Color:=color;
8.9. Создайте для формы обработчик события OnCloseQuery:
if txt .Modified then
case MessageDlg('Файл'+ExtractFileName(SaveDialog1.FileName)+
'был изменен. Сохранить?',mtConfirmation,mbYesNoCancel,0) of
idYes: button2Click(Sender);
idNo:;
idCancel:CanClose:=false;
end;
8.10. Установитена панели 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 уже равно тому состоянию, которое примет кнопка в результате щелчка на ней.
8.11. В свойства Caption этих кнопок введите буквы Ж (жирный), К (курсив), П (подчеркнутый) соответствующим образом изменив тип начертания в свойстве Font.
8.11.1. Выделите все три кнопки и установите их свойство AllowAllUp установим True.
8.11.2. Установите следующие свойства:
Компонент | GroupIndex | Tag |
SpeedButton1 | ||
SpeedButton2 | ||
SpeedButton3 |
8.11.3. В обработчик события 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;
8.11.4. События OnClick для оставшихся двух кнопок свяжите с событием SpeedButton1Click при помощи Инспектора объектов, как в случае с пунктами меню.
8.12. Поместите на панель еще одну кнопку SpeedButton. В свойство Caption ничего не вводить. Выполните два щелчка на свойстве Glyph. В появившемся диалоговом окне выберите команду Load и из каталога Program Files/Common Files/Borland Shared/Images/Buttons загрузите файл Font.bmp или любой другой.
8.12.1. В обработчике OnClick написать следующий код:
with fontdialog1 do
if execute then memo1.Font:=font;
8.13. Поместите на панель еще три кнопки SpeedButton, которые будут отвечать за выравнивание текста по левому краю, по правому краю и по центру.
8.14. Задайте их свойства следующим образом:
Компонент | GroupIndex | Tag |
SpeedButton5 | ||
SpeedButton6 | ||
SpeedButton7 |
8.15. В свойствах Caption введите «<», «>» и «=» соответственно.
8.15.1. Для 1-й кнопки создайте обработчик OnClick:
with sender as tspeedbutton do
memo1.Paragraph.Alignment:=TAlignment(tag)
8.15.2. Обработчики этого события для остальных кнопок свяжите с SpeedButton5Click
8.16. Сделайте так, чтобы файлы сохранялись в формате rtf
Компонент Memo позволяет хранить информацию только в формате txt, поэтому при закрытии файла все элементы форматирования пропадут. Поэтому замените компонент на позволяющий сохранять текст в формате rtf.
Для чего необходимо нажать Alt+F12. На экране появится окно с содержимым файла Unit1.dfm (данный файл ресурсов формы содержит все настройки формы, сделанные с помощью Инспектора объектов). Найдите в этом файле описание компонента object Memo1: T Memo и замените его на Memo1: TRichEdit. Затем снова нажмите Alt+F12. При компиляции согласитесь с тем, что вам предложит Delphi.
8.17. Установите на форму компонент StatusBar, находящийся в палитре Win32. Два раза щелкните на компоненте, чтобы перейти в окно редактирования StatusBar. В окне редактирования три раза нажмите кнопку Добавить, чтобы получить три панели на компоненте. На первых двух будет отображаться текущее состояние клавиш CapsLock и NumLock. На третьей – системное время.
8.18. Добавьте на форму компонент Timer, расположенный на палитре System. добавьте в список глобальных переменных KS: Tkeyboardstate
8.19. Создать обработчик 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;
8.20. Чтобы не было секундной задержки после загрузки программы, для обработчика OnCreate формы выберем Timer1Timer.
8.21. Создайте контекстное меню.
8.21.1. Установите на форму компонент PopupMenu.
8.21.2. Создайте пункты – Cut, Copy, Paste.
8.21.3. В обработчики событий OnClick введите соответственно следующий код:
Для пункта Copy: Memo1. CopyToClipboard;
Для пункта Cut: Memo1. CutToClipboard;
Для пункта Paste: Memo1.PasteFromClipboard;
В свойстве Memo1 (txt) PopUpMenu выберем PopUpMenu1
Для того, чтобы недоступные команды (если текст не выделен или буфер пуст) выделялись серым цветом сделаем следующее. В список uses добавим модуль Clipbrd (он обеспечивает доступ к объекту Clipboard – буферу обмена).
8.21.4. Создадим обработчик OnPopUp для PopUpMenu
copy1.Enabled:=memo1.SelLength>0;
cut1.Enabled:=memo1.SelLength>0;
paste1.Enabled:=Clipboard.HasFormat((CF_TEXT);
8.22. Создайте кнопку для Зачеркнутого шрифта (свойство Style – fsStrikeOut, т.е Tag =3)
8.23. Сделайте всплывающие подсказки для всех кнопок
8.24. Добавьте на панель кнопку для добавления маркеров. В обработчике OnClick для новой кнопки поместите код:
if (sender as TSpeedButton).down then
txt.Paragraph.Numbering:=nsBullet else
txt.Paragraph.Numbering:=nsNone
8.25. Используя свойство ShortCut пунктов меню назначьте им комбинации горячих клавиш, например – Открыть – Ctrl+O, Сохранить - Ctrl+S и т.п
8.26. Создайте кнопку Undo, при нажатии которой будет отменено последнее действие. В обработчике кнопки поместите код:
Memo1.Undo.
Если отменять нечего, кнопка должна быть недоступной (для этого используйте свойство Memo1.CanUndo.
8.27. Добавьте в контекстное меню пункты Выделить все (метод SelectAll) и Удалить (ClearSelection). Если операции недоступны, пункты должны быть неактивными. В первом случае можно использовать значение txt.text<>’’.
Калькулятор.
Разработаем программу калькулятора. Это будет не инженерный, а обычный калькулятор, поэтому над оформлением формы сильно мучаться не придется — она будет содержать всего лишь одно текстовое поле и 16 кнопок.
9. Создайте новый проект приложения: выполните команду меню File ðNew ð Application.
9.1. Разработка формы.
Присвойте значения некоторым свойствам формы Forml согласно таблице.
Свойство | Значение | Пояснение |
Caption | Калькулятор | Заголовок формы |
BorderStyle | bsDialog | Граница формы не позволяет изменять ее размеры — как у диалоговых окон |
Height | Высота формы | |
Width | Ширина формы |
9.2. Теперь разместим на форме компонент Edit (текстовое поле) со вкладки Standard палитры компонентов.
Присвоим свойствам компонента Editl значения согласно таблице.
Свойство | Значение | Пояснение |
Text | Очищаем содержимое текстового поля | |
Left | Отступ слева | |
'Гор | Отступ сверху | |
Width | Ширина поля |
9.3. Настал черед кнопок. Для этого можно было бы использовать обычный компонент Button со вкладки Standard, но вместо него мы воспользуемся компонентом BitBtn со вкладки Additional, чтобы надписи на кнопках можно было сделать цветными.
9.3.1. Разместим вначале на форму кнопку, соответствующую цифре 7, и присвоим ее свойствам BitBtn1 значения согласно таблице.
Свойства | Значение | Пояснение |
Caption | Надпись на кнопке | |
Left | Отступ слева | |
Top | Отступ сверху | |
Width | Ширина кнопки | |
Font.Size | Делаем шрифт надписи крупнее | |
Font.Color | c1Blue | Выделяем надпись синим цветом |
9.3.2. Разместим на форме остальные кнопки, соответствующие цифрам калькулятора. Для этого можно просто выделить уже созданную кнопку, скопировать ее в буфер обмена (например, нажав комбинацию клавиш <Ctrl+C>) или выполнив команду меню Edit ð Copy), а затем вставить из буфера обмена требуемое количество раз, нажав комбинацию клавиш <Ctrl+V> или выполнив команду меню Edit ð Paste.
9.3.3. Присвоим свойству Caption каждой кнопки соответствующее значение, а значения свойств Left и Тор установим, руководствуясь таблицей Координат цифровых кнопок калькулятора
Caption | |||||||||
Left | |||||||||
Top |
9.3.4. Разместим на форме кнопки, соответствующие сбросу ("СЕ") и знаку равно ("="). Изменим их свойства Caption, а также Left (для кнопки СЕ - 40, для кнопки = - 76) и Тор (116). Свойству Font.Color присвоим значение clRed (надписи будут выделены красным цветом).
9.3.5. Напоследок разместим на форме еще четыре кнопки BitBtn, соответствующие арифметическим действиям сложения (свойство Caption = +), вычитания (Caption = -), деления (Caption — /) и умножения (Caption = *). Свойству Width каждой из кнопок присвоил значение 37, свойству Left значение 124, а свойству Font.Color — значение clNavy(сиреневый). Значения свойства Тор соответствуют цифровым кнопкам калькулятора (32, 60, 88 и 116).
Объявление переменных.
Теперь перейдем в редактор кода. Клавиша F12. Первым делом объявим все переменные, которые будем использовать в программе. Переменные объявляются в разделе var:
…
var
Form1: TForm1
…
numl, num2: integer; //для хранения первого и второго числа
doit: string; //действие, которое надо выполнить с числами