Учебные материалы по математике | Лекции по делфи | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Лекции по делфи


Массивы символов

Для работы с массивами символами предусмотрены тип указателей (это типа Pchar )это указатель, var

PMchar :Pchar= ….память 4 байта;

Если не инициализирую то значения будет null;

Если вы не задали значения переменное типа Pchar, то

Необходимо помнить о том что если мы будем записывать в перемен. Типа Pchar, то нужно позаботиться заранее о будущем размере строки!! нужно #0#0#0 итд сколкьо тебе нужно размер

Однако во многих задачах, приводиться работать с типом Pchar, во всех используются айпи функции, В этих функция очень часто в переменных строгого типа используют Pchar…

Строки разных типов могут присваиваться и смешиваться с разными типами :

Предположим что у нас куча переменных разного типа …

Var

S1:AnsiString;

P1: Pchar;

{инициализация}

S1:=Р1;{а вот обратное операция не допустимо!!!!Р1:=S1…тоесть я пытаюсь указателю присваиваю строку }

P1:= Pchar({и указал источник инфор..}Edit1.text)

Edit1.text:=P1;

………………….

Пример …..

…………………

Application. MessageBox

Function MessageBox(text, caption: Pchar;Flag:Longint):int;

….

S1{строковая переменая }

Application. MessageBox(Pchar(S1), Pchar(S2),MBICONExcemetation{подчеркивания })

Pchar – делать совместимости с айпи функциями

ФОРМАТИРОВАНИЯ ОКОН РЕДОКТИРОВАНИЯ

Формат текста свойством фонт (Font){изменения цвета и фона },Свойство Font доступна всегда!

Для изминения отрибутов

FontDialog(находиться в библиотеки в Dialogs)

Пентаграмма «F»-

Компоненты Dialog –

Как заставить обработчик событий который может изменять шрифты … основной метод которому больше всего обращаться это метод Execute, это функция возвращает либо True or False … стандартные обращении к Dialog if (имя компонента s. Execute) then (операторы использующие выбор пользователей )…

………………….

Пример…….

………………….

Тут типа заголовок!!!

1)  FontDialog1.Font. Assign(Memo1.Font);

2 ) if FontDialog1.Execute Then Memo1.Font. Assign(FontDialog1.Font);

Активизировать кнопку применить в окне диалога …на этапе проектирования нужно использовать свойство Optious (в этом свойстве находим FdAppLybutton)для кнопки нужно написать обработчик событий

Memo1.Font. Assign(FontDialog1.Font);

Окно редактирования RichEdit(на страницы win32)особенностью этой компоненты то что она может работать в расширение RTF, а вторая особенность в Мемо поле мы могли форматировать весь текст, а в этом можно и отдельные части !!…

Во многих окнах редактирования отличаться время выполнения!!!

Свойство:

1)SelLength(длинна выделенного текста )

2)SelStatr(адрес начало выделенного текста)

3)SelText(содержит весь выделенный текс)

В окне RichEdit, атрибуты выделенного текста определяться свойством SelAttributs

Обработчик событий который меняет шрифты в RichEdit

FontDialog1.Font. Assign(RichEdit1.SelAttributs)

If (Font. Dialog1.Execute) Then RichEdit1.SelAttributs. Assign(FontGialog1.Font)

Для того что бы форматировать нужно использовать свойства RichEdit параграф …если заняться выравнивания текста, то мы должны использовать под свойство

Alignment – выравнивания текста и принимает следующие значения …

1)taliftrustiby

2)taCenter

3)taPightHistily

Numbering-флаги, что типа такого 1!

1)NsNone

2)NsBullet

Значения под свойство параграф можете изменять только в момент изменения!!

ДИАЛОГИ ПОИСКА {/////}

ДИПЛОГИ С ПОЛЬЗОВАЛЕМ

FindDialog, ReplaceDialog-у этих общий родительский класс, по этому для удобство можно вести глобальную переменную типа TfindDialog (в которую будет записываться указатель на FindDialog1 или ReplaceDialog1(изменить ))….у всех этих вызов Execute …

SPOS –определяет позицию курсора в окне RichEdit…..

Обработчик событий найти и заменить!!

Procedure TForm1.BFintTat. Clec(///)

Begin

Sposs:=RichEdit1.SetStart;

If (Sender as Button)=BFindText

Then Dialog:=FindDialog1

Else Dialog:=ReplaceDialog1

With dialog do

Begin

FindText:=RichEdit1.SelText;

Execute ///end; end;

Если в RichEdit1 текст не выделен ….поместили 2 диалоговых окна …и 2 кнопки!!!

Для того чтоб в диалоговых областях найти и заменить, нужно выделить на форме FindDialog1 …

Procedure TForm1.BFindDialog1.Find(Sender:Tobject);

Var Оpt:TSearchTypes(-определяет параметры поиска и замены)

Begin

With dialog do

Begin

If stMatchCase in Options

Then Opt:=Opt+[stMatch. case]

If stWholeWord in Options;

Then Opt:=Opt+[stWholeWord]….

Spos:=RichEdit1.FinfText

(FindText, Spos, Length(RichEdit1.lines. Text),opt);

FindText-это метод является свойством в объекте диалог

If spos>=0 then

Begin

RichEdit1.Setstart:=Spos;

RichEdit1.SelLength:=length(FindText)

Inc(Spos);

If (Dialog=RepLaceDialog1)

And (ftReplaceAse in Options )

Begin then ReplaceDialog1.Replase(Sender);end;

Else

Begin

ShowMessogs(‘Поиск завершён’+FindText+’ ’+’не найден’);

CloseDialog;

End;

End;

Richedit1.SetFocus; end;

Обработчик событий заменить или создадим выполнил следующие операции …

Выделяем …что то там тыкнем и запишем …

Procedure Tform1PeplaceDialog1.Replece(sender:Tobject);

Begin

If RichEdit1.SelText<>’’

Then RichEdit1.SetText:=ReplaceDialog1.ReplaceText;

Если установлен флаг то удалить все!!!

If frReplaceAll in ReplaceDialog1.Options

Then

findDialog1.Find(Sender)

осталось написать 2 обработчика события от нажатия клавиш или нажатия мыши …выделяем RichEdit и щелкаем в заготовку обработчика вставить оператор определяющий позицию курсора в RichEdit…

срока Spos:=onMaus это для мыши …

Записи и списки

Записи обьявля-ся так же как и в Pascale

Самоадресубщая запись

first

Рассмотрим варианты линейного списка :

*очередь каждый новый эл. Добав-ся в хвост. Эл. Из такой очереди извл-ся из головы списка

FirctIFirstOut

Для работы с очередью, обычно созд-см нескол, казателелей , на голову на хвост (Tail)Можно ввести текущий.

-Дековая структура (вст-ть не в голову, а в текущий )

-Стек

Пример Use : преобраз-я в исчисл-ии каждый эл-т вст-ся в голову и извл-ся из головы

LastInFirstOut

Для работы со стеком иметь метод вталкивания push в голову списка. Нужно знать операцию извлег-я из списка pop, а также просматривать сод-е в голову списка peek

Обьекты класса TList

Прежний способ работы со списком, отд-е созд — е типов противоречит инкапсуляции ООП. Поэтому в Delphi создан специальный класс в методе Classes, кот-ый преды-м для хранения, укр-я списком указателей на любые обьекты (pointer)

Со-ва и методы класса Tlist позв-ют :

*создать любого типа список

*добав-ть

*удалять

*Сортировать

В приложении обьекты класса Tlist создается вызовом его конструктора

1 Описать обьект

2 Инициол-ть

1 Мlist: Tlist

В onCreatForm создать:

Мlist:= Tlist. Create;

А как удалить?

Мlist. Free;

Создается в обработчике события исп-ем ondestroy список

Зам-е: обьект это список истипизиров-х указ-ей …

Нетипиз-е указа-ли на эл. Списка хранятся в динамическом массиве и для доступа к эл. исп-ся св-ва items класса Tlist..Заголовок :

Property Items (Index:integer):pointer;

Для обра-я к эл.(исп-я его данных ) указатель нужно преобразовать к след. Типу нужно помнить, что счет начинается с 0 (нуля)

Сво-во Items это св-во умолч-ю. Мlist. Items[2]-обращаемся к 3-ему эл.

Мlist[2] , обо способа возможны

Если обращение к эл. Вне списка (индекс больше чем размер списка ), то в этом случа-е дофм-ся исключения ElistError

Для изм-я указателей в списке исп-ся сво-во count, это со-во дея-ст:

1)  возрв-ть текущие число указатели с списке ;

2)  может изм-ть это число.

n:= Mlist. Count; {кол-во указ-ей в списке}

Мlist. Count :=Mlist. Count-3;

Если добавим, толавые эле. Nil

Для анализа кл-во эл. Списке можно исп-ть CapaCity, кот-ое наказыв-ет общ. Кол-во в списке и в отлич. 0 и равных 0

При увели-ии числа эл-тов, когда оно начинает привышать CapaCity, оно увели-ся с запасом равлом 3м

Со-во CapaCity имеет смысла зад-ть сколько эл. С списке, такое зад-е ускоряет вып-е приложения

При удалении эл. , автоматически уменьшается значение count но значени-е CapaCity остаётся неизмен …

Можно и МList. CapaCity:=MList. Count если ув-ть не будем больше

Метод Expand

Этом метод также может увел-ть обьем списка при count = CapaCity в др. случае этой метод не расширяет список

·  Если CapaCity<4,то Expand увеличивает список на 4 эл. Expand без параметров.

·  Если 4<список<9 то на 8

·  Если список >8, то на 16

Причем

Function Expand :Tlist

(ук-ль на расма-ый список )часто исп-ся для созда-я дубликата имеющеюся

Mlist1:MlistExpond

Для работы с классом Tlist нужно изучить

Для работы с обьектами класса Tlist нужны методы

1.Класс Tlist непосредственный потомок TObject, след-но все методы на слетаются

Специф-е

Метод

Описание

Add

Function Add(item:pointer):integer

Добавл-ет эл. В сущ список возв-ет порядковый номер

Clear

Очищает список

Delete

Удаляет 1 эл. По индексу

Exchange

Процедура перестановки 2х эл. В списке

First

Ф-я возв-ет указатель на голову списка

IndexOf

Ф-я в-ет индекс первого вхожд-я список указате-ля, исходя из этого возв-ет число услого типа Если нет, то -1

Insert

Вставляет указатель в указную позицию

Last

Move

Процедура изм-ет позицию эл-та в списке

remove

Удаляет 1_е вхождение эл. В списке

Sort

Имеет параметр процедурного типа

Создать процедуру тип, множество типа

TlistSortCompare=function(Items1,Items2:pointer):integer

Procedure Sort(compore :TlistSortCompore )

Compare должен возв-ть отриц-ое число если Item1 раньше Item2 полож-е любое в противном равны 0

Расмотрим применение методов класса Tlist …Создадим приложение в котором хранится инф-я о студентах

Тип очеди;

Тип стека;

Создадим тип записи, кот-е будут хранить данные о студентах

Type {созд-ть тип-ый указать на эл. Списка}

TPstud=^TStud;{TStud –тип записи }

TStud=record

Fam, Name, Otch:String[20];

Year:integer;{combobox календарь}

Groop:string[15];

formTich:Boolean;

end;

В прил-им созд-м перем-ый типа записи и типа указателей

Var

MList:Tlist;

PStud:TPStud;

Для создания списка нужно вызвать конструктор create в классе OnCreate формы : инициализация обьекта Mlist

Mlist:=Tlist. Create;(создания пустого списка)

Для заполнения пустого списка нужно создать компалиту +добавл-е к списку сохр-е списка загрузку списка

Обработчик события кнопки «Запомнить»

{оси часть}

Nev(PStud); {выд-е память под узел, если что сделать исключение для памяти, если ее нехватает With PStud^ do

Begin

Fam:=InputBox(‘Введите ’,’Фамилию ’…)

Year:=strtoint(InputBox(//////))}

Узел готов, встав-ем его в список дав-е нав-ого эл.

Mlist. Add(PStud);{очередь}

Создать радиогруппу, в кот-ой выборы тпиа списка, в зависимости от его добавляет нужное

Фу-ция Add увели-т count на 1 и возв-ет Номер вставляемого

Можно в любую точку вставлять с помощью Insert. Все дали эл. Будут сдвинуты на 1 вниз …

RichEdit1.Lines. add(Tpstud(Mlist[i]))

TpStud(MList[i])^.поле

Удаление эл. из списка, весь списка

Для удал-я эл-та

MList. Delete(i);-удаляет из списка указатель, а память не освобождена

Значит до этого нужно отчистить память :

Dispose(Mlist[i]);

А потом удалить указатель что произходит с count и CopyCity

Тоже самое и для удаления всего списка + несколько методов сортировки

Сортировка по 1 ому из поелй

Фамилия

Метод sort умеет параметр процедурного типа. Значит нам нужно его дописать передаем в метод сортировки 2 указателя и этот метод возвращает целое положение знач-е, если 1 ый эл. Больше второго, -1 ,если 1-ый меньше и 0 если равны

Function compYear (Item1,Item2:pointer):integer;

Ver

Begin

If Tpstud(Item1)^ year>

Tpstud(Item2)^.year

Then Result:=1;

Else

If Tpstud(Item1)^ year<

Tpstud(Item2)^.year

Then Result:=-1;

Else Result:=0;

End;

Mlist. Sort(Comp. Year(1,2,))

Списки и строки

Tstrings. TsringList

Эти классы используют-ся для работы со строками, в частности метол Add и сво-во Lines Memo, Rich и т. д яв-ся св-вами класса Tstrings

Однако созд-ть обьект класса не можем, он абстрактный для него хор-но :Исп-е его св-в. Класс TstringList ;…..

{заполнения списко строк }

{обращения к эл. Строки }

Slist. Strings[i];

Исп-ся:count – сколько строк сейчас

Text

CapaCity – возможное количество строк

Св-во text сод-т все строки ввиде одной строки с раз-ем, но можно выбрать отд-ую строку …

Objects-позволяет обратиться к эл. Списка

Самим выписать методы какие то там!!!

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020