Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Топ:
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Оснащения врачебно-сестринской бригады.
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2019-07-12 | 133 |
5.00
из
|
Заказать работу |
Цель: Изучение компонентов Panel, Memo, OpenDialog, SaveDialog, MainMenu, PopupMenu, SpeedButton
Краткие теоретические сведения.
Компоненты Memo является окнами редактирования многострочного текста. Они так же, как и окно Edit, снабжены многими функциями, свойственными большинству редакторов. В них предусмотрены типичные комбинации «горячих» клавиш: Ctrl-C — копирование выделенного текста в буфер обмена Clipboard (команда Copy), Ctrl-X — вырезание выделенного текста в буфер Clipboard (команда Cut), Ctrl-V — вставка текста из буфера Clipboard в позицию курсора (команда Paste), Ctrl-Z — отмена последней команды редактирования.
В компоненте Memo формат (шрифт, его атрибуты, выравнивание) одинаков для всего текста и определяется свойством Font. Если вы сохраните в файле текст, введенный или отредактированный пользователем, то будет создан текстовый файл, содержащий только символы и не содержащий элементов форматирования. При последующем чтении этого файла в Memo формат будет определяться текущим состоянием свойства Font компонента Memo, а не тем, в каком формате ранее вводился текст.
Свойства Alignment и WordWrap определяют выравнивание текста и допустимость переноса длинных строк. Установка свойства ReadOnly в true задает текст только для чтения.
Основное свойство Memo — Lines, содержащее текст окна в виде списка строк и имеющее тип TStrings. Начальное значение текста можно установить в процессе проектирования, нажав кнопку с многоточием около свойства Lines в окне Инспектора Объектов.
Во время выполнения приложения вы можете заносить текст в окно редактирования с помощью методов свойства Lines типа TStrings. Доступ к отдельной строке текста вы можете получить с помощью свойства Strings[Index: Integer]. Индексы, как и везде в Delphi, начинаются с 0. Так что Memo1.Lines.Strings[0] — это текст первой строки. Свойство только для чтения Count указывает число строк в тексте. Для очистки текста в окне надо выполнить процедуру Clear. Этот метод относится к самому окну, а не к его свойству Lines.
Для занесения новой строки в конец текста окна редактирования можно воспользоваться методами Add или Append свойства Lines. Для загрузки текста из файла применяется метод LoadFromFile. Сохранение текста в фале осуществляется методом SaveToFile.
В Delphi имеется два компонента, представляющие меню: MainMenu — главное меню, и PopupMenu — всплывающее меню. Оба компонента расположены на странице Standard. Эти компоненты имеют много общего. Это невизуальные компоненты, т.е. место его размещения на форме в процессе проектирования не имеет никакого значения для пользователя — он все равно увидит не сам компонент, а только меню, сгенерированное им.
Основное свойство компонента — Items. Его заполнение производится с помощью Конструктора Меню, вызываемого двойным щелчком на компоненте или нажатием кнопки с многоточием рядом со свойством Items в окне Инспектора Объектов.
Контекстное меню (PopUpMenu) привязано к конкретным компонентам. Оно всплывает, если во время, когда данный компонент в фокусе, пользователь щелкнет правой кнопкой мыши. Оконные компоненты: панели, окна редактирования, а также метки и др. имеют свойство PopupMenu, которое по умолчанию пусто, но куда можно поместить имя того компонента PopupMenu, с которым будет связан данный компонент.
В приложениях часто приходится выполнять стандартные действия: открывать и сохранять файлы, задавать атрибуты шрифтов, выбирать цвета палитры, производить контекстный поиск и замену и т.п. Разработчики Delphi позаботились о том, чтобы включить в библиотеку простые для использования компоненты, реализующие соответствующие диалоговые окна. Они размещены на странице Dialogs.
Компоненты OpenDialog — диалог «Открыть файл» и SaveDialog — диалог «Сохранить файл как...», пожалуй, используются чаще всего, в большинстве приложений. Основное свойство, в котором возвращается в виде строки выбранный пользователем файл, — FileName. Типы искомых файлов, появляющиеся в диалоге в выпадающем списке Тип файла, задаются свойством Filter. В процессе проектирования это свойство проще всего задать с помощью редактора фильтров, который вызывается нажатием кнопки с многоточием около имени этого свойства в Инспекторе Объектов. Свойство FilterIndex определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога.
Свойство InitialDir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения.
Свойство DefaultExt определяет значение расширения файла по умолчанию. Если значение этого свойства не задано, пользователь должен указать в диалоге полное имя файла с расширением. Если же задать значение DefaultExt, то пользователь может писать в диалоге имя без расширения. В этом случае будет принято заданное расширение. Свойство Title позволяет вам задать заголовок диалогового окна. Свойство Options определяет условия выбора файла.
Кнопки 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 уже равно тому состоянию, которое примет кнопка в результате щелчка на ней.
Ход работы
1. Поместить на форму компонент Panel, присвоить свойству Align значение alTop. Удалить строку из свойства Caption.
2. Поместить на Panel четыре компонента Button (кнопка) и присвоить их свойству Caption соответственно значения &Open, &Save, Save &As…, E&xit. Определить свойство Font для панели из кнопок как «жирный»
3. Изменить заголовок формы (свойство Caption) – например, My Editor
4. Поместить на форму компонент Memo и установить его свойства следующим образом:
Align – alClient, Scroll bar – ssBoth, Lines (убрать текст из свойства, выполнив щелчок на свойстве Lines, и затем на кнопке с тремя точками).
5. Поместить на форму компонент OpenDialog, который находится на странице Dialog и присвоить его свойствам значения:
DefaultExt | TXT |
Title | Открыть файл |
Options.ofFileMustExist | True |
Options.ofNoReadOnlyReturn | True |
6. Открыть окно редактора фильтров, для чего дважды щелкнуть на свойстве Filter. Заполнить две первые строки в колонке Имя фильтра названиями фильтров: текстовые файлы и все файлы, а в колонке Фильтр ввести соответствующие маски: *.txt и *.*
7. Поместить на форму компонент SaveDialog и присвоить ему значения:
DefaultExt | TXT |
Title | Сохранить файл |
Options.ofOverwritePrompt | True |
Options.ofNoReadOnlyReturn | True |
8. Открыть окно редактора фильтров, для чего дважды щелкнуть на свойстве Filter. Заполнить две первые строки в колонке Имя фильтра названиями фильтров: текстовые файлы и все файлы, а в колонке Фильтр ввести соответствующие маски: *.txt и *.*
9. Создадим обработчик события OnClick для кнопки Open:
with OpenDialog1 do
if execute then
begin
memo1.Lines.LoadFromFile(FileName);
Memo1.Modified:=false;
Caption:='My Editor -'+ExtractFileName(FileName);
SaveDialog1.FileName:=FileName;
FileName:='';
end;
10. Создадим обработчик OnClick для кнопки Save As..:
with SaveDialog1 do
if Execute then
begin
memo1.Lines.SaveToFile(FileName);
Memo1.Modified:=false;
Caption:='My Editor -'+ExtractFileName(FileName);
end;
11. Создадим обработчик OnClick для кнопки Save:
if SaveDialog1.FileName='' then
Button3Click(Sender)
else
begin
Memo1.Lines.SaveToFile(SaveDialog1.Filename);
Memo1.Modified:=false;
end;
12. Создадим обработчик события OnClick для кнопки Exit:
Case MessageDlg('Закрыть редактор?', mtConfirmation,mbYesNoCancel,0) of
idYes: form1.Close;
idNo:;
idCancel:;
end;
13. Расположить на форме компонент MainMenu и создать пункты меню следующим образом:
Редактор меню вызывается двойным щелчком по компоненту. Для создания разделительной черты в свойстве Caption, необходимо ввести символ «-» (Минус)
14. Каждый пункт меню кроме New свяжем с уже существующим методом OnClick для соответствующих кнопок. Например, кнопка Open имеет имя Button1, поэтому на странице Events окна Object Inspector для пункта меню Open вы щелкните на клавише открытия списка, расположенной рядом с OnClick и выберите Button1.Click.
15. В обработчик события OnClick пункта меню New поместим код:
if Memo1.Modified then
case MessageDlg('Ôàéë'+ExtractFileName(SaveDialog1.FileName)+
'áûë èçìåíåí. Ñîõðàíèòü?',mtConfirmation,mbYesNoCancel,0) of
idYes:button2Click(Sender);
idNo:;
idCancel:Exit
end;
memo1.Clear;
SaveDialog1.FileName:='';
Caption:='My Editor';
16. Двойным щелчком отредактируем компонент-меню и добавим еще один пункт меню Color, и в нем два подпункта ColorBackGround и ColorText.
Поместим на форму компонент ColorDialog, находящийся в палитре Dialogs.
В обработчик пункта меню ColorBackGraund вставить следующий код:
with ColorDialog1 do
if Execute then
memo1.Color:=color;
В обработчик пункта меню ColorText вставить следующий код:
with ColorDialog1 do
if Execute then
memo1.Font.Color:=color;
17.Создать для формы обработчик события OnCloseQuery:
if Memo1.Modified then
case MessageDlg('Файл'+ExtractFileName(SaveDialog1.FileName)+
'был изменен. Сохранить?',mtConfirmation,mbYesNoCancel,0) of
idYes: button2Click(Sender);
idNo:;
idCancel:CanClose:=false;
end;
18. Установим на панели три кнопки SpeedButton. В свойства 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 при помощи Инспектора объектов, как в случае с пунктами меню.
17. Поместить на панель еще одну кнопку SpeedButton. В свойство Caption ничего не вводить. Выполнить два щелчка на свойстве Glyph. В появившемся диалоговом окне выбрать команду Load и из каталога Program Files/Common Files/Borland Shared/Images/Buttons загрузим файл Font.bmp или любой другой.
В обработчике OnClick написать следующий код:
with fontdialog1 do
if execute then memo1.Font:=font;
18. Компонент Memo позволяет хранить информацию только в формате txt, поэтому при закрытии файла все элементы форматирования пропадут. Поэтому мы заменим компонент на позволяющий сохранять текст в формате rtf. Для этого необходимо нажать Alt+F12. На экране появится окно с содержимым файла Unit1.dfm (данный файл ресурсов формы содержит все настройки формы, сделанные с помощью Инспектора объектов). Найдите в этом файле описание компонента object Memo1: T Memo и замените его на Memo1: TRichEdit. Затем снова нажмите Alt+F12. При компиляции согласитесь с тем, что вам предложит Delphi.
19. Поместим на панель еще три кнопки 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
20. Установить на форму компонент StatusBar, находящийся в палитре Win32. Два раза щелкнуть на компоненте, чтобы перейти в окно редактирования StatusBar. В окне редактирования три раза нажать кнопку Добавить, чтобы получить три панели на компоненте. На первых двух будет отображаться текущее состояние клавиш CapsLock и NumLock. На третьей – системное время.
21. Добавить на форму компонент 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.
22. Создадим контекстное меню. Установить на форму компонент PopupMenu. Создадим пункты – Cut, Copy, Paste. В обработчики событий OnClick ввести соответственно следующий код:
Для пункта Copy: Memo1. CopyToClipboard;
Для пункта Cut: Memo1. CutToClipboard;
Для пункта Paste: Memo1.PasteFromClipboard;
В свойстве Memo1 PopUpMenu выберем PopUpMenu1
Для того, чтобы недоступные команды (если текст не выделен или буфер пуст) выделялись серым цветом сделаем следующее. В список uses добавим модуль Clipbrd (он обеспечивает доступ к объекту Clipboard – буферу обмена).
Создадим обработчик OnPopUp для PopUpMenu
copy1.Enabled:=memo1.SelLength>0;
cut1.Enabled:=memo1.SelLength>0;
paste1.Enabled:=Clipboard.HasFormat((CF_TEXT);
Выполнить самостоятельно:
1. Создать кнопку для Зачеркнутого шрифта (свойство Style – fsStrikeOut, т.е Tag=3)
2. Сделать всплывающие подсказки для всех кнопок.
3. Добавить на панель кнопку для добавления маркеров. В обработчике OnClick для новой кнопки поместить код:
if (sender as TSpeedButton).down then
memo1.Paragraph.Numbering:=nsBullet else
memo1.Paragraph.Numbering:=nsNone
4. Используя свойство ShortCut пунктов меню назначить им комбинации горячих клавиш, например – Open – Ctrl+O, Save - Ctrl+S и т.п.
5. Создать кнопку Undo, при нажатии которой будет отменено последнее действие. В обработчике кнопки поместить код:
Memo1.Undo.
Если отменять нечего, кнопка должна быть недоступной (для этого используем свойство Memo1.CanUndo).
6. Добавить в контекстное меню пункты Выделить все (метод SelectAll) и Удалить (ClearSelection). Если операции недоступны, пункты должны быть неактивными. В первом случае можно использовать значение memo1.text<>’’.
7. Создать пункт меню О программе.
Создать новую форму. Изменить ее заголовок. Поместить на нее компонент Memo. Установить свойство компонента ReadOnly в True. Щелкнуть два раза по свойству Lines и ввести текст. Изменить произвольным образом свойства Color и Font компонента Memo.
В обработчике события OnClick пункта меню О программе написать код:
Form2.showmodal
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!