28804-1 (663134), страница 2

Файл №663134 28804-1 (Программирование. Delphi) 2 страница28804-1 (663134) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Ниже приведено описание класса TTPerson, в которое включены директивы управления доступом.

TTPerson = class

private

Fname:TName; { значение св-ва Name }

Faddress:TAddress; ( значение св-ва Address)

protected

Constructor Create (Name :TName);

Function GetName :TName ;

Function GetAddress:TAddress;

Procedure SetAddress(NewAddress:TAddress);

Property Name:Tname

read GetName;

Property Address :Taddress

read GetAddress

write SetAddress;

end;

Замечание

Если надо чтобы элементы класса были полностью скрыты, то определение класса следует поместить в отдельный модуль.

Полиморфизм и виртуальные методы

Полиморфизм - это возможность использовать одинаковые имена для методов, входящих в различные классы. Концепция полиморфизма обеспечивает при применении метода к объекту использование именно того метода, который соответствует классу объекта.

Пусть определены три класса, один из них является базовым для двух других.

type // базовый класс

TPerson=class

fname: string; { имя }

constructor Create (name: string);

function info: string;

virtual;

end;

// производный от базового Tperson

TStud=class (TPerson)

fgr: integer; { номер группы }

constructor Create (name: string; gr: integer) ;

function info: string; override;

end;

// производный от базового Tperson

Tprof=class (TPerson)

fdep: string; { название кафедры }

constructor Create(name:string;dep:string);

function info: string; override;

end;

В каждом из этих классов определен метод info. В базовом классе при помощи директивы virtual метод info объявлен виртуальным. Объявление метода виртуальным дает возможность дочернему классу произвести замену виртуального метода своим собственным. В каждом дочернем классе определен свой метод info, который замещает соответствующий метод родительского класса (метод порожденного класса, замещающий виртуальный метод родительского класса, помечается директивой override). Ниже приведено определение метода info для каждого класса.

function TPerson.info: string;

begin

result=’’ ;

end;

function TStud.info:string;

begin

result :=fname+' гp. '+IntTostr(fgr) ;

end;

function TProf.info: string;

begin

result :=fname+' каф. '+fdep;

end;

В программе список людей можно представить массивом объектов класса TPerson.

list:array[1..SZL]of TPerson;

Замечание

Здесь следует вспомнить, что объект - это указатель.

Объявить подобным образом список можно потому, что Object Pascal позволяет указателю на родительский класс присвоить значение указателя на дочерний класс. Поэтому элементами массива list могут быть как объекты класса TStud, так и объекты класса Tprof.

Вывод списка можно осуществить применением метода info к элементам массива, например, так:

st:=’’;

for i:=l to SZL do // SZL - размер массива-списка

if list[i] <> NIL

then st:=st+info.list[i]+#13; ShowMessage(st);

Во время работы программы каждый элемент массива может содержать как объект типа TStud, так и объект типа Tprof. Концепция полиморфизма обеспечивает применение объекту именно того метода, который соответствует типу объекта.

Процедура TForml.Button1click, которая запускается в результате щелчка на кнопке Добавить (Button1), создает объект list[n] класса TStud или TProf. Класс создаваемого объекта определяется состоянием радиокнопки студент (RadioButton1),

Процедура TForml.Button2Click, которая выполняется в результате щелчка на кнопке Список (Button2), применяя метод info к каждому объекту списка (элементу массива), формирует строку, представляющую собой весь список.

Классы и объекты Delphi

Для реализации интерфейса Delphi использует библиотеку классов, которая -содержит большое количество разнообразных классов, поддерживающих форму и различные компоненты (командные кнопки, поля редактирования и т. д.).

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

type

Tform1 = class (TForm)

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: Tform1

Это описание класса исходной, пустой, формы приложения и объявление объекта - формы приложения.

Когда программист, добавляя необходимые компоненты, создает нужную форму, Delphi формирует описание класса формы. Когда программист создает функцию обработки события формы или ее компонента, Delphi добавляет объявление метода в описание класса формы приложения.

Помимо классов визуальных компонентов в библиотеку классов входит класс обработки исключительных ситуаций (ошибок), класс общего управления приложением и другие. Рассмотрение этих классов в задачу данной книги не входит.

Создание простого текстового редактора

1. Поместите компонент Bevel (на странице Additional) на новую форму и присвойте его свойству Align значение alTop.

2. На компонент Bevel поместите четыре кнопки. Озаглавьте их &0реn..., &Save, Save &As... и E&xit.

Многоточие в конце имени представляет собой секретный код Windows, означающий, что щелчок на кнопке вызовет еще один диалог, а не приведет к немедленному выполнению некоторого действия.

3. Поместите на форму компонент Memo и установите следующим образом его свойства:

Свойство Значение

Align alClient

ScrollBars ssBoth

Lines (пусто)

4. Измените заголовок формы на My Editor. Затем поместите на форму компонент OpenDialog и присвойте его свойствам следующие значения:

Свойство Значение

Default Ext ТХТ

Options.ofHideReadOnly True

Options.ofFileMustExist True

Options.ofNoReadOnlyReturn True

Title Open Text File

5. Для того чтобы открыть окно Filter Editor (Редактор фильтра), дважды щелкните на свойстве Filter.

6. Заполните две первые строки в колонке Filter Name (Имя фильтра) названиями фильтров Text files и All files, а в колонке Filter (Фильтр) введите соответствующие фильтры: *.ТХТ и *.*.

7. Поместите на форму компонент SaveDialog и установите для его свойств такие значения:

Свойство Значение

Default Ext ТХТ

Options.ofHideReadOnly True

Options.ofOverwritePrompt True

Options.ofNoReadOnlyReturn True

Title Save Text File

8. Введите тот же набор фильтров, что и для диалога открытия файла.

9. Создайте обработчик события OnClick для кнопки Exit, содержащий одну команду Close;

10. Для обработчика события OnClick кнопки Open используйте следующие строки:

WITH OpenDialog1 DO

IF Execute THEN

BEGIN

Memo1.Lines.LoadFromFile(Filename);

HistoryList.Add(Filename);

Caption:='My Editor-'+

ExtractFilename(Filename);

SaveDialog1.Filename:=Filename;

Filename:=’’;

End;

11. Дважды щелкните на кнопке Save и введите следующую строку в качестве ее обработчика события OnClick: .

Memo1.Lines.SaveToFile( SaveDialog1.Filename);

12. Наконец, для кнопки Save As укажите следующее:

WITH SaveDialog1 DO

IF Execute THEN

BEGIN

Memo1.Lines.SaveToFile(Filename);

Caption:='My Editor - ' +

ExtractFilename(Filename);

End;

Мы создали простой текстовый редактор. Он позволяет загружать, редактировать и сохранять небольшие и средние файлы. Возможности этого редактора приблизительно такие же, как и у приложения Notepad (Блокнот) Windows. Можно вырезать, копировать и вставлять текст, используя стандартные комбинации клавиш Windows. Имя каждого открытого файла добавляется в список диалога открытия файла на случай, если вам потребуется открыть его снова. Этот проект нам еще понадобится, поэтому сохраним его. Назовем модуль MYEDITU.PAS, а главный проект - MYEDIT.PRJ.

Диалог выбора шрифта.

Загрузите опять проект MyEdit и поместите на форму компонент FontDialog. Переместите кнопку Exit вправо и вставьте кнопку с заголовком &Font между кнопками Save As и Exit. В обработчик события OnClick новой кнопки поместите следующий код:

WITH FontDialog1 DO

IF Execute THEN

BEGIN

Memo1.Font:= Font;

Следующую строку поместите в обработчик события OnApply компонента FontDialog:

Memo1.Font:= FontDialog1. Font;

Запустите программу и загрузите файл. С помощью кнопки Font выберите какой-нибудь шрифт. Используя все возможности, создайте самый необычный вариант. Содержимое файла будет отображаться выбранным вами шрифтом с применением указанного размера, стиля и цвета. Опять откройте диалог выбора шрифта и переместите его так, чтобы он не закрывал самого окна редактора. Внесите несколько изменений в окне диалога и щелкните на кнопке Apply (Применить). Изменения станут действительными немедленно, а диалог Font (Шрифт) не закроется. Это упрощает испытание различных возможностей. Обратите внимание, что в этом примере программы, после того как была использована кнопка Apply (Применить), вы никак не сможете отменить внесенные изменения. С другой стороны, это не такая уж и большая беда - если не устраивает только что выбранный шрифт, можно вернуть шрифт, использовавшийся раньше.

Сохраните обновленный проект MyEdit, обладающий теперь возможностью изменять шрифты.

Компонент Memo не обладает способностью отображать больше одного шрифта сразу. Для этого существуют другие компоненты.

Добавим в свою программу диалог выбора цвета.

1. Поместите на новую форму диалог выбора цвета (компонент ColorDialog) и присвойте его свойству Color значение clWhite.

2. Установите свойство Ctl3D формы в False, а в качестве константы цвета также выберите clWhite.

3. Поместите на форму новую кнопку, назовите её Color.

В обработчик события OnClick формы поместите следующие строки:

IF ColorDialog1.Execute THEN

Form1.Color := ColorDialog1.Color;

4. Запустите программу.

Диалог выбора принтера.

Загрузите опять проект MyEdit и поместите на него диалог настройки принтера компонент PrinterSetupDialog). Компонент Bevel расположите таким образом, чтобы осталось место для второго ряда кнопок, где разместите две новые кнопки, оза-аавленные &Print... и P&rint Setup.... Создайте обработчик события OnClick кнопки Print Setup с единственной строкой кода:

PrinterSetupDialog1.Execute;

Запустите программу и щелкните на кнопке Print Setup (кнопка Print пока еще делать ничего не может). Появится диалог.

Подготовка к печати.

Диалог Print Setup (Настройка принтера) используется для выбора и конфигурации принтера. Когда дело дойдет до печати, в действие вступит диалог Print (Печать).

В проект MyEdit добавьте компонент PrintDialog, оставив все его свойства со значениями, установленными по умолчанию. Дважды щелкните на кнопке Print, и замените пару begin-end следующим кодом:

VAR

POutput: TextFile;

N : LongInt;

BEGIN

IF PrintDialog1.Execute THEN

BEGIN

AssingPrn (POutput);

Rewrite (POutput);

Printer.Canvas.Font: = Memo1.Font;

FOR N: = 0 to Memo1.Lines.Count – 1 DO

Writeln(POutput, Memo1.Lines [N]);

CloseFile (POutput);

END;

END;

Перейдите в верхнюю часть модуля и добавьте Printers в оператор uses. (Найдите строку в начале файла, начинающуюся со слова uses. После этого слова добавьте имя модуля и запятую.) Выберите на форме компонент FontDialog и присвойте его свойству Device значение fdBoth, чтобы ограничить выбор шрифтами, которые годятся и для экрана, и для принтера.

Мы только что добавили в ваш редактор возможность печати. Этот редактор не позволяет печатать несколько копий или направлять их в подбор, но вы сможете распечатать содержимое редактора любым шрифтом. А с помощью диалога Print Setup (Выбор принтера) вы сможете выбрать принтер, ориентацию бумаги и параметры конфигурации, соответствующие вашему принтеру.

Диалог поиска и замены текста.

Загрузите проект MyEdit и установите свойство HideSelection компонента Memo в False. На форме разместите компоненты FindDialog и ReplaceDialog и выберите их оба. Дважды щелкните на свойстве Options и установите frHideMatchCase, frHideWholeWord и frHideUpDown в True. Добавьте во второй ряд кнопки с заголовками Fi&nd... и &Replace... Для события OnClick кнопки Find используйте следующую строку:

FindDialogl.Execute;

а для кнопки Replace следующую строку:

ReplaceDialogl.Execute;

Выберите компонент FindDialog, перейдите на страницу Events и дважды щелкните на событии OnFind. Вставленную Delphi пару begin-end замените следующим блоком кода:

VAR

Buff, P, FT: Pchar;

BuffLen : Word;

begin

WITH Sender AS TFindDialog DO

BEGIN

GetMem (FT, Length (FindText) + 1);

StrPCopy (FT, FindText);

BuffLen := Memo1.GetTextLen + 1;

GetMem (Buff, BuffLen);

Memo1.GetTextBuff (Buff, BuffLen);

P: = Buff + Memo1.SelStart + Memo1.SelLength;

P: = StrPos (P, FT);

Характеристики

Тип файла
Документ
Размер
154,36 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7027
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее