Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба2.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.62 Mб
Скачать

Методы класса tApplication

    Рассмотрим некоторые методы объекта Application. Методы Initialize - инициализация объекта, и Run - запуск выполнения приложения, включаются в каждый проект автоматически. Это можно увидеть в файле проекта (пункт менюProject | View Source). Там же размещается метод создания форм CreateForm для всех автоматически создаваемых форм проекта. Общий вид этого метода следующий:

Application.CreateForm (<класс создаваемой формы>,

<ссылка на создаваемый объект (имя объекта)>); .

    При выполнении метода:

Application.CreateForm (TForm2, Form2);

будет создана форма с именем Form2 как экземпляр класса TForm2.

    Метод Terminate завершает выполнение приложения. Если нужно завершить приложение из главной формы, то вместо метода Application.Terminate можно использовать метод Close главной формы. Но если требуется закрыть приложение из какой-нибудь вторичной формы (например, из окна диалога), то нужно применить методApplication.Terminate.

    Метод Minimize сворачивает приложение, помещая его пиктограмму на панель задач. Метод Maximizeразворачивает приложение на весь экран.

    К оглавлению

События класса tApplication и их обработка

    Объект класса TApplication создается только при выполнении приложения, значит на этапе разработки приложения все его события недоступны. Поэтому нельзя использовать Инспектор объектов (Object Inspector) для создания обработчиков событий. Однако в некоторых случаях требуется создавать обработчики событий этого класса. Приведем общий способ создания обработчиков событий класса TApplication.

    Сначала опишем обработчик события. Поскольку событие распознается и запускается объектом, обработчик должен быть методом объекта. Он также должен соответствовать соглашению о вызовах события, которое обычно описано в справочной системе. Например, из файлов справки можно узнать, что событие OnActivate типа TNotifyEvent является наиболее общим типом. Его описание выглядит так:

TNotifyEvent = procedure (Sender: TObject) of Object;

    Это описание говорит о том, что обработчик должен получать параметр TObject, который позволяет определить, какой именно объект распознал и отослал событие.

    Создадим новое приложение и модифицируем описание TForm1:

type

TForm1 = class(TForm)

private

{Закрытые объявления.}

Protected {Защищенные объявления.}

//Заголовок обработчика.

procedure OnActivateHandler(Sender: TObject);

public

{Открытые объявления.}

end;

    Описание обработчика как protected не несет особой нагрузки и принято по умолчанию. Важно лишь, чтобы он был методом класса.

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

procedure TForm1.OnActivateHandler(Sender:

TObject);

begin

MessageDlg('Привет всем!!!', mtInformation,[mbOk], 0);

end;

    При выполнении этого обработчика на экран выводится диалоговое окно с сообщением: Привет всем!!!, кнопкой OKи картинкой с символом i.

    Наконец, назначим обработчик событию. Обычно это выполняется в событии OnCreate главной формы. Измените обработчик события OnCreate класса TForm1 следующим образом:

procedure TForm1.FormCreate(Sender: TObject);

begin

Application.OnActivate:= OnActivateHandler;

end;

    Эта конструкция означает, что при возникновении события Application.OnActivate будет выполняться процедураOnActivateHandler.

    В результате выполнения этого приложения на экране будет следующая "картинка":

Рис.2. Внешний вид приложения

другой способ обработки событий класса TApplication.

    В классе TApplication определено множество событий, которые бывают полезными для организации приложения. Начиная с Delphi 5, разработчиками был введен компонент ApplicationEvents (вкладка Additional), который облегчил использование событий этого класса. Этот компонент перехватывает события объекта Application, поэтому обработчики этих событий теперь можно писать как обработчики событий невизуального компонентаApplicationEvents. На каждой форме приложения можно разместить свой компонент ApplicationEvents. События объекта Application будут передаваться всем этим компонентам. Если требуется передавать событие, прежде всего, какому-то одному из них, то нужно применить к нему метод Activate, который поставит его в начало очереди компонентов ApplicationEvents. Если не требуется, чтобы другие компоненты ApplicationEvents получали события, нужно применить к этому привилегированному компоненту метод CancelDispatch. Тогда после обработки события в данном компоненте другие компоненты ApplicationEvents вообще не будут реагировать на эти события.

    Во многие обработчики событий компонента ApplicationEvents передается по ссылке параметр Handled. По умолчанию его значение равно False. Если событие уже обработано и не требуется его дальнейшая обработка другими компонентами ApplicationEvents, то в обработчике нужно установить Handled в True. В противном случае это событие будут пытаться обработать другие компоненты ApplicationEvents (если они есть). Если событие так и останется необработанным, то его будет пытаться обработать активный компонент, а если не обработает - то активная форма. Предотвратить обработку события другими компонентами можно, используя метод CancelDispatch.

    Ниже приведена таблица событий компонента ApplicationEvents с их краткими описаниями.

   

Таблица 1. События компонента ApplicationsEvents

Событие

Описание

propertyOnActionExecute: TActionEvent;

Возникает при выполнении (Execute) некоторого действия, объявленного в компоненте, но не обработанного им (не написан соответствующий обработчик). Инициализация этого события может быть, например, выполнена методом Application.ExecuteAction(<имя действия>). Если событие не обработано в соответствующем компоненте, то оно может быть обработано на уровне приложения. В этот обработчик передается параметр Action(действие) и по ссылке передается параметр Handled.

propertyOnActionUpdate: TActionEvent;

Возникает при обновлении (Update) некоторого действия, объявленного в компоненте, но не обработанного им (не написан соответствующий обработчик). Если событие не обработано в соответствующем компоненте, то оно может быть обработано на уровне приложения. В этот обработчик передается параметр Action (действие) и по ссылке передается параметр Handled.

propertyOnActivate: TNotifyEvent;

Возникает, когда приложение является активным. Это происходит при начале выполнения и в случаях, когда пользователь, перейдя к другим приложениям, вернулся в данное. Если это событие обработано в ApplicationEvents, то предотвратить его дальнейшую обработку можно методом CancelDispatch.

propertyOnDeactivate: TNotifyEvent;

Возникает перед тем моментом, когда приложение перестает быть активным (пользователь переключается на другое приложение). Если это событие обработано в ApplicationEvents, то предотвратить его дальнейшую обработку можно методом CancelDispatch.

propertyOnException: TExceptionEvent; typeTExceptionEvent = procedure(Sender: TObject; E: Exception) of object;

Возникает, когда в приложении сгенерировано исключение, которое нигде не обработано. В обработчик передается параметр Sender - источник исключения, и параметр E типаException - объект исключения. Параметр E помогает определить тип исключения. Например: if (E is EDivByZero) then .... В этом обработчике можно предусмотреть нестандартную обработку исключений на уровне приложения, например, русифицировать стандартные сообщения об исключениях и дать какие-то рекомендации. Введение обработчика OnExeption отключит стандартную реакцию приложения на исключительные ситуации.

property OnHint: TNotifyEvent;

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

property OnIdle: TIdleEvent; type TIdleEvent = procedure(Sender: TObject;var Done: Boolean) of object;

Возникает, когда приложение начинает простаивать, ожидая, например, действий пользователя. В обработчик передается по ссылке параметр Done, который по умолчанию равен True. Если оставить его без изменения, то по окончании работы обработчика данного события будет вызвана функция WaitMessage API Windows, которая займется в период ожидания другими приложениями. Если придать этому параметру значение False, то эта функция вызываться не будет. Это может снизить производительность Windows.

propertyOnMessage: TMessageEvent; typeTMessageEvent =procedure (varMsg: TMsg; varHandled: Boolean) of object;

Возникает, когда приложение получает сообщение Windows (но не переданное функциейSendMessage API Windows). В обработчике этого события можно предусмотреть нестандартную обработку сообщения. Сюда передается параметр Msg - полученное сообщение и по ссылке передается параметр Handled. В Windows передаются тысячи сообщений в секунду, так что обработчик этого события может серьезно снизить производительность приложения.

propertyOnMinimize: TNotifyEvent;

Возникает при сворачивании приложения.

propertyOnRestore: TNotifyEvent;

Возникает при восстановлении ранее свернутого приложения.

propertyOnShortCut: TShortCutEvent;

Возникает при нажатии пользователем клавиши. Событие возникает до того, как возникло стандартное событие OnKeyDown компонента или формы. Обработчик позволяет предусмотреть нестандартную реакцию на нажатие какой-то клавиши. В него передается параметр сообщения Windows Msg, поле CharCode которого (Msg.CharCode) содержит виртуальный код нажатой клавиши. Передается также по ссылке параметр Handled. Если задать ему значение True, то стандартные события OnKeyDown, OnKeyPress, OnKeyUp не наступят.

propertyOnShowHint: TShowHintEvent; typeTShowHintEvent = procedure(var HintStr: string; varCanShow: Boolean; varHintInfo: THintInfo) of object;

Возникает, когда приложение собирается отобразить ярлычок с текстом подсказки Hint. В обработчик передается по ссылке параметр HintStr - первая часть свойства Hintкомпонента, ярлычок которого должен отображаться. В обработчике этот текст можно изменить. Также по ссылке передается параметр CanShow. Если в обработчике установить его значение равным False, то ярлычок отображаться не будет. Следующий параметр, передаваемый по ссылке - HintInfo. Это структура, поля которой содержат информацию о ярлычке: его координаты, цвет и т.п. В частности, имеется поле HintControl - компонент, сообщение которого должно отображаться в ярлычке, и поле HintStr - отображаемое сообщение. По умолчанию HintInfo.HintStr - первая часть свойства Hint компонента. Но в обработчике это значение можно изменить.

    Приведем примеры использования событий компонента ApplicationsEvents.

    Пример 1. Расположим на форме компоненты TApplicationsEvents (вкладка Additional), TStatusBar (вкладка Win32) и два компонента TEdit (вкладка Standart). В свойства Hint компонентов TEdit поместите соответственно следующий текст: "Подсказка 1", "Подсказка 2". В свойства Text этих компонентов поместите "длинный" текст, например: "Это пример длинного текста", "Еще один пример длинного текста". Свойство SimplePanel компонента TStatusBarустановите в True.

Рис.1. Внешний вид приложения

    Обработчик события OnHint компонента TApplicationsEvents:

procedure TForm1. ApplicationEvents1Hint(Sender: TObject);

begin

StatusBar1.SimpleText:= Application.Hint;

end;

отображает в строке состояния StatusBar1 значение свойства Hint любого компонента, в котором определено этой свойство и над которым перемещается курсор мыши. Отображение происходит независимо от значения свойстваShowHint компонента.

    Для дальнейшей работы установите у компонентов TEdit свойство ShowHint в True. Обработчик событияOnShowHint:

procedure TForm1.ApplicationEvents1ShowHint(var HintStr: String;

var CanShow: Boolean; var HintInfo: THintInfo);

begin

if (HintInfo.HintControl.ClassName='TEdit') then

begin

//Размещение в подсказке текста из компонента.

HintStr:=(HintInfo.HintControl as TEdit).Text;

//Отмена дальнейшей обработки.

ApplicationEvents1.CancelDispatch;

end;

end;

подменяет для строк редактирования типа TEdit текст ярлычков на текст, содержащийся в этих строках редактирования. Такой прием позволяет пользователю, подведя курсор мыши к строке редактирования, увидеть во всплывающем окне полный текст, который может не быть виден обычным образом, если он длинный и не помещается полностью в окне редактирования.

    Текст этого примера можно взять здесь.

    Пример 2. Расположите на форме компоненты TLabel (вкладка Standart) и TApplicationsEvents (вкладкаAdditional). Для последнего компонента создайте обработчики событий OnActivate и OnDeactivate:

procedure TForm1.ApplicationEvents1Activate(Sender: TObject);

begin

Label1.Caption:='Ура! Я работаю!';

end;

procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);

begin

Label1.Caption:='Увы! Меня покинули!';

end;

    Эти обработчики обеспечивают появление в метке Label1 соответствующей надписи каждый раз, когда пользователь переключается из данного приложения в другое и возвращается назад.

 На этом шаге мы рассмотрим свойства, методы и события класса TScreen

    Класс TScreen инкапсулирует состояние экрана или выводимой области. Delphi во время работы автоматически создаст экземпляр класса TScreen. Для его использования в раздел uses нужно включить модуль Forms.

    В любом месте приложения можно использовать такие свойства этого класса, как Height (высота экрана) и Width(ширина экрана). Это может потребоваться, например, тогда, когда нужно сделать размеры формы приложения постоянными и равными половине размеров экрана при любом разрешении монитора. Для автоматического масштабирования формы можно в обработчик события OnCreate формы поместить такой код:

Form1.Width:=Screen.Width div 2;

Form1.Height:=Screen.Height div 2; .

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

    Класс TScreen имеет свойство Forms, содержащее список форм, отображаемых в данный момент на экране, и свойство FormCount, где находится количество таких форм. Можно использовать эти свойства для того, чтобы гарантировать, что на данном типе монитора размеры ни одной формы не превысят размеров экрана. Соответствующей код может выглядеть так:

With Screen Do

For i:=0 to FormCount-1 do

Begin

If Forms[i].Height > Height Then

Forms[i].Height:= Height;

If Forms[i].Width > Width Then

Forms[i].Width:= Width;

End;

    Аналогичным способом можно получить доступ к соответствующим модулям данных. Свойство DataModulesсодержит список всех существующих на текущий момент модулей данных приложения, а свойство DataModuleCountуказывает число таких модулей. Значения этих свойств можно использовать, например, для поиска требуемой информации в модулях данных.

    Свойство Fonts типа TStrings содержит список шрифтов, доступных на данном компьютере. Его можно использовать в приложении, чтобы проверять, имеется ли на компьютере тот или иной шрифт. Например, можно поместить в приложении компонент TComboBox (поле со списком) и в обработчике события OnCreate формы поместить туда перечень всех доступных шрифтов:

ComboBox1.Items:=Screen.Fonts;

ComboBox1.ItemIndex:=0;

    Тогда в нужный момент можно выбрать подходящий шрифт из списка. Для этого в обработчик события OnClick илиOnChange списка можно вставить следующий оператор:

Memo1.Font.Name:=ComboBox1.Items[ComboBox1.ItemIndex]; .

    Проиллюстрируем это в следующем приложении:

Рис.1. Внешний вид приложения

    В обработчик события OnCreate формы поместим первые два оператора, заполняющие компонент TConboBoxперечнем доступных шрифтов, а в обработчик события OnClick компонента TButton поместим оператор установки выбранного шрифта в компонент TMemo.

    Текст этого примера можно взять здесь.

    Свойство Cursor класса TScreen определяет вид курсора. Если это свойство равно crDefault, то вид курсора при перемещении над компонентом определяется установленным у него значением свойства Cursor. Но если это свойство имеет другое значение, то соответствующее значение свойства компонента отменяется и курсор имеет глобальный вид, заданный свойством Cursor класса TScreen. Этим можно воспользоваться, например, для вывода "песочных часов" при выполнении каких-либо длительных операций:

Screen.Cursor:=crHourglass; //Задание вида "песочных часов".

<Выполнение каких-либо "длинных" действий.>

Screen.Cursor:=crDefault; //Отмена глобального курсора.

    Если в приложении в какие-то отрезки времени используется отличный от crDefault глобальный вид курсора, то приведенный код можно изменить, чтобы по окончании длинных операций восстановить прежнее глобальное значение:

Var

OldCursor: TCursor;

Begin

OldCursor:=Screen.Cursor; //Запомнили старое значение курсора.

Screen.Cursor:=crHourglass; //Задание вида "песочных часов".

<Выполнение каких-либо "длинных" действий.>

Screen.Cursor:= OldCursor; //Восстановление старого значения.

End;

    Имеется также свойство Cursors, которое представляет собой список доступных приложению курсоров. Можно создать и использовать свой собственный курсор. Для создания курсора можно воспользоваться встроенным в DelphiРедактором Изображений (Image Editor). Регистрация созданного курсора осуществляется с помощью функцииLoadCursor. Приведем общую схему реализации этой задачи.

    Пусть, например, имеется созданный курсор, включенный в ресурс приложения под именем MyCursor1. Тогда в приложении можно объявить глобальную константу, обозначающую этот курсор. Например:

implementetion

const crMyCursor = 1;

. . . . .

    Значение этой константы может лежать в пределах от -32768 до 32767. Важно, чтобы она не совпадала с предопределенными значениями стандартных курсоров, лежащих на промежутке от -22 до 0.

    В обработчике события OnCreate формы можно разместить оператор, регистрирующий курсор в свойстве Cursors:

Screen.Cursors[crMyCursor]:=LoadCursor(HInstance,'MyCursor1'); .

    Тогда в нужный момент можно установить этот курсор в качестве глобального оператором:

Screen.Cursor:=crMyCursor; .

    Приведем исходный текст приложения. Содержание файла проекта:

program Pr_cur;

uses

Forms,

Un_cur in 'Un_cur.pas' {Form1};

{$R *.res}

{$R cur.res} //Подключение файла ресурсов.

//Здесь находится созданный курсор.

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

    Содержание файла модуля:

unit Un_cur;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms, Dialogs;

type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

const crMyCursor = 1; //Описание константы.

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

//Регистрация созданного курсора.

Screen.Cursors[crMyCursor]:=LoadCursor(HInstance,'MyCursor1');

//Установка глобального курсора.

Screen.Cursor:=crMyCursor;

end;

end.

    Текст этого примера можно взять здесь.

    Примечание. Можно использовать зарегистрированный курсор как локальный. Например, для панели Panel1:

Panel1.Cursor:=crMyCursor; .

    Используя свойство ActiveForm (типа TForm), можно получить доступ к активной в данный момент форме. Если пользователь переключился на какое-то другое приложение, то значение этого свойства показывает, какая из форм будет активной, когда приложение получит фокус. В качестве примера используем свойство для создания мигающего заголовка формы, чтобы привлечь внимание пользователя. Функция Windows API, предназначенная для этой цели, должна получить дескриптор окна:

FlashWindow(Screen.ActiveForm.Handle,False); .

    Аналогично с помощью свойства ActiveControl (типа TWinControl) можно получить доступ к активному в данный момент оконному компоненту на активной форме.

    Класс TScreen предоставляет два основных события, извещающих программу об изменении фокуса ввода. Подобно классу TApplication, доступ к свойствам и событиям класса TScreen возможен лишь при выполнении приложения.

    Событие OnActiveControlChange возникает при передаче фокуса ввода от одного управляющего элемента к другому. Свойство ActiveControl обновляется непосредственно перед вызовом события. Можно использовать это событие, например, для вывода текста подсказки в строке состояния.

    Событие OnActiveFormChange генерируется при создании новой формы или передаче фокуса ввода от одной формы к другой. Обычно это событие используется в MDI-приложениях для обновления доступных функций меню и кнопок-ускорителей.

свойства, методы и события класса TList.

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

  1. property Items [Index: Integer]:Pointer; - возвращает указатель на содержимое элемента списка с номеромIndex.

  2. property Count: Integer; - определяет число элементов в списке.

  3. property Сараcity: Integer; - определяет максимальное число элементов в списке. Оно может изменяться как явно (пользователем), так и при добавлении элементов в список, в том случае, когда Count>=Capacity. Максимальная емкость списка - 16380 элементов.

Остальные свойства наследуются от базового класса TObject.

    Перечислим основные методы этого класса.

  1. function Add (Item:Pointer): Integer; - добавляет в конец списка элемент, который будет равен Item.

  2. function Remоve (Item: Pointer): Integer; - удаляет из списка элемент, который равен Item.

  3. procedure Insert (Index: Integer; Item: Pointer); - вставляет элемент, равный Item, перед элементом с индексом Index.

  4. proocedure Delete (Index: Integer); - удаляет из списка элемент с индексом Index.

  5. procedure Сlear; - очищает список, устанавливая величины Count и Capacity в 0.

  6. procedure Exchange (Index1, Index2: Integer); - меняет местами элементы списка с индексами Index1 иIndex2.

  7. function Expand: TList; - при соблюдении равенства Count=Capacity расширяет список. При емкости списка менее пяти элементов, он по умолчанию расширяется на четыре элемента, при пяти-восьми - на восемь, более восьми - на шестнадцать.

  8. function First: Pointer; function Last: Pointer; - возвращают значения первого и последнего (с индексомCount-1) элементов списка.

  9. function IndexOf (Item: Pointer): Integer; - возвращает индекс элемента, равного Item.

  10. procedure Mоve(CurIndex, NewIndex Integer); - перемещает элемент списка с положения CurIndex в положение NewIndex.

  11. procedure Pack; - упаковывает список., сдвигая элементы к началу на пустующие места.

Прокомментируем некоторые из приведенных методов.

    Методы Add и Insert получают указатель на вставляемый элемент. Чтобы воспользоваться ими, программист должен сам разместить в куче данные и получить соответствующий указатель. Точно так же методы Delete, Removeи Clear не уничтожают распределенные в памяти данные, которые программист должен, если это необходимо, уничтожить сам. Например:

var

List: TList;

Item: Pointer;

Value: AnyType;

begin

List:=TList.Create; // Создадим список.

Item:=New(Value); // Размещаем в куче данные.

List.Add(Item); // Добавляем элемент к списку.

List.Remove(Item); // Удаляем элемент из списка.

Dispose(Item); // Удаляем его из кучи.

List.Free; // Удаляем ненужный список.

end;

    Метод Sort сортирует список по критерию, устанавливаемому функцией Compare. Тип TListSortCompare определен следующим образом:

TListSortCompare = function (Item1, Item2: Pointer): Integer; .

    Таким образом, функция Compare получает указатели на два элемента списка. Результат сравнения:

  • любое отрицательное число, если Item1<Item2;

  • 0, ecли Item1=Item2;

  • любое положительное число, если Item1>Item2.

    Критерий сравнения данных устанавливается программистом и реализуется в функции Compare.

    В следующем примере в список TList помещается 20 случайных вещественных чисел из диапазона от 0 до 1. По нажатию на кнопку TButton список сортируется по возрастанию чисел и отображается в компоненте TMemo:

Рис.1. Внешний вид приложения

unit Un_list;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Memo1: TMemo;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

type

pDouble=^Double; //Тип "указатель на вещественное число".

//С помощью этой функции реализуется сортировка чисел.

function Comp(Item1,Item2:Pointer):Integer;

begin

if pDouble(Item1)^ < pDouble(Item2)^ then Result:=-1

else

if pDouble(Item1)^ = pDouble(Item2)^ then Result:=0

else

if pDouble(Item1)^ > pDouble(Item2)^ then Result:=1;

end;

//Обработчик нажатия кнопки выполняет основную работу.

procedure TForm1.Button1Click(Sender: TObject);

var

k:Integer;

List: TList;

pD:pDouble;

begin

List:=TList.Create; //Создание списка.

for k:=1 to 20 do //Наполнение списка.

begin

New(pD); //Резервируем память.

pD^:=Random; //Помещаем случайное число.

List.Add(pD); //Добавляем к списку.

end;

List.Sort(Comp); //Сортируем список.

Memo1.Lines.Clear; //Очищаем компонент Memo1.

//Наполняем Memo1 и уничтожаем элементы списка.

for k:=0 to List.Count-1 do

begin

pD:=List[k]; //Берем очередное число.

Memo1.Lines.Add(FloatToStr(pD^)); //Помещаем в Memo1.

Dispose(pD); //Уничтожаем число.

end;

List.Free; //Уничтожаем список.

end;

end.

   

свойства, методы и события класса TStrings

    Многофункциональный класс, предназначенный для хранения текстовых строк и связанных с ними объектов (любых потомков TObject). TStrings - абстрактный класс; он только описывает методы работы с наборами строк и сопутствующих им объектов, но как именно они хранятся, на его уровне не определено. Его потомки очень многочисленны; они играют основную роль в компонентах-списках (TListBox, TComboBox), редакторе (TMemo) и других.

    Так что чаще всего приходится иметь дело с TStrings как со свойством одного из компонентов. В дальнейшем экземпляры этого класса и порожденных от него классов будем называть наборами строк. Для создания собственных наборов строк вне компонентов предназначен потомок TStrings - TStringList, который будет рассмотрен на следующем шаге.

    Таким образом, класс TStrings содержит методы и свойства, позволяющие манипулировать со списками строк:

  • добавлять и удалять строки в указанных позициях;

  • переставлять и упорядочивать последовательности строк;

  • получать доступ к конкретным строкам;

  • читать и записывать списки строк в файлы и потоки;

  • связывать с каждой строкой некоторый объект.