Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Текстовый редактор





 

Цель: Изучение компонентов 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    
SpeedButton2    
SpeedButton3    

 

В обработчик события 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    
SpeedButton6    
SpeedButton7    

 

В свойствах 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

Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.

 


Date: 2015-12-12; view: 459; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.011 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию