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

Свойства класса tStrings

    Ниже приведен список основных свойств, определенных в TStrings.

Таблица 1. Свойства класса TStrings

Свойство

Описание

propertyCapacity: Integer;

Указывает число строк, которые может содержать список. В классе TStrings чтение Capacityвозвращает значение Count, а запись значения Capacity ничего не изменяет в списке. Но в некоторых классах, производных от TStrings, свойство Capacity позволяет заранее выделить память для добавления нескольких строк.

propertyCommaText:String;

Возвращает текст, в котором отдельные строки объединены в одну строку формата SDF (System Data Format). Отдельные исходные строки разделяются в итоговой строке запятыми. Каждая строка, если в ней имеются пробелы, заключается в двойные кавычки. Если в исходных строках были двойные кавычки, то они дублируются (получается два следующих друг за другом символа).

propertyCount: Integer;

Число строк в списке. Свойство только для чтения.

propertyNames [Index: Integer]: String;

Применяется для списков, имеющих структуру "Имя=Значение". Такую структуру имеют, например, файлы INI. Свойство Names возвращает Имя, использованное в строке с указанным индексом. Если строка не имеет форму "Имя=Значение", то возвращается пустая строка. Свойство только для чтения.

propertyObjects [Index: Integer]: TObject;

Возвращает объект, связанный с указанной строкой свойства Strings. В классе TStringsсвойство Objects не используется, но может применяться в некоторых классах, производных отTStrings.

propertyStrings[Index: Integer]:String;

Текст строки с указанным индексом. Индекс первой строки равен 0.

propertyText: String;

Представляет весь список как одну строку, внутри которой используются разделители CR/LF("перевод строки - возврат каретки").

propertyValues [constName:String]:String;

Применяется для списков, имеющих структуру "Имя=Значение". Такую структуру имеют, например, файлы INI. Свойство Values возвращает Значение, использованное в строке с указанным именем Name. Если заданное имя Name не найдено, то возвращается пустая строка. При записи: если строка, содержащая параметр Name, найдена - ее значение после знака "=" заменяется новым значением, если нет - строка, добавляется. Если существующему параметру присваивается пустая строка (Values[Name]:='';), то он удаляется из набора строк.

    К оглавлению

   

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

    Методы класса приведены в следующей таблице:

   

Таблица 2. Методы класса TStrings

Метод

Описание

procedure AddStrings (Strings: TStrings);

Добавляет в список группу строк из другого объекта Strings типа TStrings.

procedure Assign (Source: TPersistent);

Уничтожает прежнее содержимое набора и подставляет вместо него Source, если источник имеет тип TStrings. В противном случае возникает исключительная ситуация EConvertError.

procedure BeginUpdate; procedure EndUpdate;

Пара процедур, которые устанавливают и сбрасывают флаг обновления набора. Между ними, для ускорения работы, нужно заключать все операции по копированию, удалению и т. д. большого количества элементов.

procedure Clear;

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

procedure Insert (Index: Integer; const S: string);

Вставляет строку S под номером Index.

procedure Delete (Index: Integer);

Удаляет строку с номером Index.

function IndexOf (const S:string): Integer;

Возвращает индекс (номер в наборе) строки S. Если она не найдена, функция возвращает -1.

function IndexOfObject (AObject: TObject): Integer;

Возвращает индекс первой строки, связанной с заданным объектом. Если такой строки нет в списке, возвращается -1.

function IndexOfName (const Name: String): Integer;

Применяется для списков, имеющих структуру "Имя=Значение". Возвращает номер строки, в которой Имя равно заданному значению Name. Если такой строки нет в списке, возвращается -1.

function Equals (Strings: TStrings): Boolean;

Сравнивает строки вызвавшего его объекта со строками объекта Strings и возвращает True в случае равенства (сравниваются число строк и все строки попарно).

function Add (const S:string): Integer;

Добавляет строку S в конец набора и в случае успеха возвращает присвоенный ей индекс (он должен быть равен значению Count до добавления строки).

function AddObject (constS: string; AObject: TObject): Integer;

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

procedure Append (constS: string);

Добавляет строку в конец списка. Метод аналогичен Add, но не возвращает индекс строки.

procedure Exchange (Index1, Index2: Integer);

Меняет местами пары "строка-объект" с индексами Index1 и Index2.

procedure Move (CurIndex, NewIndex: Integer) ;

Перемещает пару "строка-объект" с позиции CurIndex в позицию NewIndex.

procedure InsertObject (Index: Integer; const S:string; AObject: TObject);

Вставляет объект AObject и соответствующую ему строку S в набор под индексомIndex.

    Следующие шесть методов предназначены для экспорта/импорта наборов строк:

  • в поток:

    • procedure LoadFromStream (Stream: TStream); - заполняет список строками текста из указанного потокаStream;

    • procedure SaveTоStream (Stream: TStream); - сохраняет значение свойства Text в указанном потоке;

  • в файл (создавая поток и вызывая два предыдущих метода):

    • procedure LoadFromFile(const FileName: string); - заполняет список строками текста из указанного файла FileName;

    • procedure SaveToFile (const FileName: string); - сохраняет строки списка в файле с указанным именем;

  • в данные в формате текстового редактора (подряд расположенные строки, оканчивающиеся парой символовCR/LF (16-ричные коды $0D/$0A)). При этом метод:

  • function GetText: PChar;

выгружает строки в единый массив, где они разделены парами символов CR/LF; в конце такого массива ставится нулевой байт. Размер массива не может превышать 65520 байт; поэтому строки выгружаются до тех пор, пока их суммарная длина не превосходит этого значения.

    Метод:

procedure SetText (Text: PChar);

читает строки из массива Text. Строки в массиве должны быть отделены друг от друга парой символов CR/LF; допускается и один символ LF (16-ричньй код $0А). Символы с кодами 0, $1A (<Ctrl>+<Z>) воспринимаются как конец текста. При этом прежнее содержимое набора уничтожается.

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

    Этот класс объединяет в себе свойства TStrings и TList простейшим способом: указатель на объект и соответствующая строка объединяются в запись, указатель на которую хранится в списке. В классе переопределены многие виртуальные методы TStrings: Add, Clear, Delete, Exchange, IndexOf, Insert. Он являетсяполностью функциональным: можно создавать экземпляры TStringList в своей программе для работы с наборами строк и объектов (помимо тех, которые уже есть в компонентах).

    Перечислим новые возможности этого класса:

  • сортировка строк в списке;

  • запрещение хранения дубликатов строк;

  • реакция на изменение содержания списка.

    Кроме унаследованных от TStrings, определены дополнительно следующие полезные свойства.

  1. property Sorted: Boolean; - указывает, должны ли строки в списках автоматически сортироваться по алфавиту.

  2. property Duplicates: TDuplicates;  TDuplicates = (dupIgnore, dupAccept, dupError); - свойство определяет, что происходит при попытке добавить в список дубликат уже имеющейся строки:

    • dupIgnore - добавление игнорируется (отклоняется);

    • dupError - добавление приводит к созданию исключительной ситуации EListEiror;

    • dupAccept - одинаковые строки разрешены. В этом случае при поиске в не отсортированном списке не определено, которая из строк будет найдена первой.

  3. property OnChange: TNotifyEvent; property OnChanging: TNotifyEvent; - два свойства, предусмотренные для определения пользователем своей реакции на изменение данных. Событие OnChanging вызывается во многих рассмотренных выше методах до внесения первого изменения, OnChange - после последнего.

    Кроме унаследованных от TStrings, определены дополнительно полезные методы.

  1. function Find (const S: string; var Index; Integer): Boolean; - метод ищет в наборе строку S и в случае успеха возвращает результат True, а в параметре Index - ее индекс.

  2. procedure Sort; - метод осуществляет сортировку списка. Попытка добавить или вставить элемент в отсортированный список вызывает исключительную ситуацию EListError. В этом случае до выполнения добавления свойству Sorted нужно присвоить значение False.

    Приведем пример приложения, где используются компоненты класса TStringList. Внешний вид приложения показан на рисунке 1:

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

    На форме расположен компонент TMemo, который используется для отображения списка. Компонент TEditпредназначен для размещения строки, которая затем добавляется в список. Обратите внимание, что после сортировки списка, его необходимо снова отобразить в компоненте TMemo.

   Приведем тексты обработчиков событий:

Unit Un_23_1;

interface

uses

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

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Memo1: TMemo;

Edit1: TEdit;

Label1: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Label2: TLabel;

Label3: TLabel;

Button4: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

List: TStringList; //Указатель на список.

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

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

end;

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

procedure TForm1.Button1Click(Sender: TObject);

begin

List.Append(Edit1.Text); //Добавление строки в список.

Edit1.Text:=''; //Очистка строки.

Edit1.SetFocus; //Передача фокуса.

end;

//Обработчик события заполнения компонента TMemo.

procedure TForm1.Button2Click(Sender: TObject);

var

k: Integer;

begin

Memo1.Lines.Clear; //Очистка TMemo.

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

Memo1.Lines.Add(List.Strings[k]);

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Edit1.SetFocus; //Передача фокуса.

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

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

end;

//Поиск заданной строки в списке.

procedure TForm1.Button3Click(Sender: TObject);

var

Index: Integer;

begin

if List.Find(Edit1.Text, Index) Then //Есть такая строка.

Label3.Caption:=' '+IntToStr(Index)

else //Неуспешный поиск.

Label3.Caption:=' Такой строки нет!!!';

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

List.Sort; //Сортировка списка.

end;

end.

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

    TStream является абстрактной моделью совокупности данных, обладающей двумя свойствами - длиной Size (типInt64, только для чтения) и положением текущего элемента Position (тип Int64).

    От TStream порождены дочерние объекты, позволяющие пользоваться потоками при работе с файлами, блоками памяти и т. п. Так, в модуле CLASSES описаны классы TMemoryStream и TFileStream.

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

function Read(var Buffer; Count: LongInt) : LongInt; virtual; abstract;

function Write(const Buffer; Count: LongInt) : LongInt; virtual; abstract;

    Метод:

function Seek(Offset: LongInt; Origin: Word): LongInt; virtual; abstract;

позиционирует поток. В зависимости от значения параметра Origin новая позиция выбирается так: 0 - новая позиция равна Offset; 1 - текущая позиция смещается на Offset байт к концу потока от текущего положения. Значение должно быть неотрицательно; 2 - новая позиция находится на Offset байт от конца потока. Значение должно быть неположительно.

    Методы:

procedure ReadBuffer (var Buffer;Count: LongInt);

procedure WriteBuffer (const Buffer; Count: LongInt);

представляют собой оболочки над Read/Write, вызывающие в случае неудачи операции исключительные ситуацииEReadError/EWriteError.

 На этом шаге мы продолжим изучение некоторых событий и методов класса TControl. Полный перечень свойств, методов и событий приведен на шаге 16

    Активность элемента позволяет ему получать и обрабатывать сообщения от клавиатуры, мыши и таймера. Она определяется свойством:

property Enabled: Boolean; .

    Значение True делает управляющий элемент активным. При смене состояния Enabled выполняется перерисовка его на экране, при которой пассивные элементы, как правило, изображаются серым цветом.

    Свойство, определяющее возможность видимости элемента во время исполнения:

property Visible: Boolean; .

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

procedure Show;

procedure Hide; .

    Напомним, что, так как Visible является свойством, то выражение:

Visible:=True;

не является простым присваиванием. Оно неявно содержит все необходимые операции для показа элемента управления. Это же касается всех остальных свойств компонентов, реакция на изменение которых должна произойти немедленно.

    Почему выше была применена формулировка "возможность видимости", а не "видимость"? Чтобы элемент был виден на экране, одного значения свойства Visible недостаточно. Нужно, чтобы видимыми были все предки элемента в иерархии. Реально видимость элемента можно узнать, пользуясь свойством:

property Showing: Boolean; .

    Это свойство устанавливается при изменении свойства Visible. Оно доступно только для чтения. Нужно иметь в виду, что при изменении видимости родительского элемента Showing не изменяется и может в какой-то момент не соответствовать истинному состоянию. Обновляет состояние свойства Showing для компонента метод:

procedure UpdateControlState; .

    Отрисовкой (изменением изображения на экране) элемента управления "заведуют" следующие методы:

  • procedure Invalidate; - отрисовывает компонент, вызывая функцию API InvalidateRect;

  • procedure Update; - предусматривает дополнительные операции, необходимые Windows при отрисовке окна. Для компонентов-окон, например, в ней вызывается функция UpdateWindow;

  • procedure Repaint; - этот метод объединяет два предыдущих. Если элемент управления непрозрачный (имеет флаг csOpaque), занимаемый им прямоугольник предварительно очищается;

  • procedure Refresh; - представляет собой вызов Repaint. Рекомендуется для отрисовки.

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

    Рассмотрим более подробно некоторые свойства класса TForm.

    1) property Active: Boolean; - определяет, имеет ли форма фокус ввода. Если имеет, оно возвращает True, если нет - FalseWindows выводит заголовок активной формы цветом, отличающимся от цвета неактивных.

    Примечание. Неактивные окна продолжают получать сообщения о перемещении и выборе мыши.

    Независимо от типа приложения в каждый момент времени может быть активной только одна форма. Обратите внимание на то, что заголовок родительской формы в MDI-приложении изображен "активным" цветом. Однако свойствоActive родительского MDI-окна, никогда не бывает равным True.

Примечание. Свойство ActiveForm класса TScreen возвращает форму, которая в данный момент имеет фокус ввода.

    2) property ActiveControl: TWinControl; - указывает на потомка TWinControl, имеющего в настоящий момент фокус ввода. Значение этого свойства можно установить во время создания программы, определив, какой элемент будет иметь фокус ввода при инициализации формы. Назначение ActiveControl во время работы программы - установка фокуса ввода в поле с некорректно введенными данными. Приведенный ниже фрагмент кода позволяет проверить текст, введенный в элемент editCustName перед закрытием формы:

procedure TDataEntryForm.FormCloseQuery(Sender: TObject;

var CanClose: Boolean);

begin

if editCustNme.Text = '' then {Проверяем, введен ли текст в элемент.}

begin

CanClose:=False; {Запрещаем закрытие.}

{Устанавливаем фокус в поле с некорректными данными.}

ActiveControl:= editCustName;

end;

end;

Примечание. Метод SetFocus потомков TWinControl устанавливает фокус ввода и обновляет свойствоActiveControl. Большинство событий передает параметр Sender своему обработчику. Этот параметр определяет, какой элемент обнаружил событие и запустил обработчик на выполнение.

    3) property AutoScroll: Boolean; property HorzScrollBar: TControlScrollBar; property VertScrollBar: TControlScrollBar. Свойство AutoScroll управляет появлением полос прокрутки в форме, размеры которой не позволяют вывести все ее элементы одновременно. Если свойство равно True, и размеры формы были изменены так, что не все элементы стали видны, то в форме автоматически появляются полосы прокрутки. Если же значение свойства равно False, то будет потерян доступ к элементам формы, не поместившимся на экране.

Примечание. Компонент ТScrollВаr (вкладка Standard), позволяет прокручивать форму независимо от значения свойства AutoScroll.

    Можно управлять полосами прокрутки с помощью свойств HorzScrollBar и VertScrollBar. Это весьма полезно в программах, реализующих свойство распахивания окна. Поскольку размеры, например, выводимой диаграммы могут быть больше размеров формы, а ее вывод осуществляется самостоятельно, AutoScroll не активизируется, и поэтому прокрутку и рисование должен обеспечить сам программист. Вот пример такого кода, обеспечивающего прокрутку в двойном размере формы:

. . . . . .

{Устанавливаем диапазон вертикальной прокрутки.}

VertScrollBar.Range:= Height*2;

{Показываем вертикальную полосу прокрутки.}

VertScrollBar. Visible:= True;

{Устанавливаем диапазон горизонтальной

прокрутки.}

HorzScrollBar.Range:= Width*2;

{Показываем горизонтальную полосу прокрутки.}

HorzScrollBar.Visible:=True;

. . . . . .

    4) property BorderStyle: TFormBorderStyle; - определяет общий вид окна и операции с ним, которые разрешено выполнять пользователю. Это свойство может принимать следующие значения:

  • bsSizeable - обычный вид окна Windows с полосой заголовка, с возможностью для пользователя изменять размеры окна с помощью кнопок, расположенных в заголовке или с помощью мыши. Это значение задается по умолчанию;

  • bsDialog - неизменяемое по размерам окно (диалоговое окно);

  • bsSingle - окно, размер которого пользователь не может изменить, потянув курсором мыши за край окна, но может менять кнопками в полосе заголовка;

  • bsToolWindow - то же, что и bsSingle, но с полосой заголовка меньшего размера;

  • bsSizeToolWin - то же, что и bsSizeable, но с полосой заголовка меньшего размера и отсутствием в ней кнопок изменения размера;

  • bsNone - без строки заголовка. Окно не только не допускает изменения размера, но и не позволяет переместить его по экрану.

    По умолчанию свойство BorderStyle имеет значение bsSingle, создающее обычное окно с изменяемыми размерами. Такое окно имеет стандартную строку заголовка и не имеет ограничений на расположение в ней кнопок. Примеры таких окон - программы Explorer (Проводник) и Notepad (Блокнот).

    Значение bsDialog создает диалоговое окно, которое используется, когда программа требует ответа для продолжения выполнения программы или для вывода какой-либо другой информации. Видимое различие между стандартными и диалоговыми окнами заключается в том, что последнее не может изменять размеры.

Примечание. Значения biMinimize и biMaximize свойства BorderIcons не будут работать, если свойствоBorderStyle установлено равным bsDialog.

    Третий по популярности стиль окон - bsSingle, создающий форму, которая не может изменять размеры во время работы. В отличие от bsDialogbsSingle не запрещает установку любых пиктограмм. Единственное ограничение состоит в том, что кнопка сворачивания окна, будучи выведенной, является недоступной (блокированной). Примep такой программы - Calculator (Калькулятор).

    Панель инструментов (Toolbar) позволяет быстро получить доступ к сгруппированным функциям. В Delphi можно сконструировать панель инструментов, поместив группу компонентов TSpeedButton в форму, имеющую стильbsSizeToolWin или bsToolWindow. Окно в стиле bsSizeToolWin может изменять размеры и не имеет кнопок минимизации и максимизации. Окно в стиле bsToolWindow действует так же, но не позволяет изменять свои размеры.

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

Примечание. Если для свойства BorderStyle было установлено значение, создающее окно с разрешенным изменением размеров, Delphi автоматически установит значение AutoScroll равным True. Формы со стилямиbsDialog и bsNone не могут иметь строки меню.

    5) property BorderIcons: TBorderIcons; - определяет набор кнопок, которые имеются в полосе заголовка.

    6) property Height: Integer; property Width: Integer; - определяют высоту и ширину формы в пикселях и обычно используются для изменения размеров формы во время работы на дисплеях разной разрешающей способности. Вот пример увеличения размеров формы до размеров всего экрана:

. . . . .

{Перемещаем форму в верхний левый угол

экрана.}

Left:= 0;

Тор:= 0;

{Изменяем размеры формы.}

Width:=Screen.Width;

Height:= Screen.Height;

. . . . .

    Приведенный код будет работать плохо, так как требуется четыре обновления формы. Для этих целей лучше использовать метод SetBounds, определенный у потомков TWinControl:

procedure SetBounds(ALeft, ATop, AWidth, AHeight:

Integer); .

    7) property ClientHeight: Integer; property ClientWidth: Integer;. Окно состоит из двух частей - клиентской инеклиентской. Обычно приложение выводит изображения только в клиентской области, размер которой возвращается через свойства ClientHeight и ClientWidth. Обычно эти свойства используются для того, чтобы убедиться, что в форме может выводиться весь объект определенного размера. Показанный ниже текст приводит размер клиентской области формы в соответствие размерам изображения, содержащегося в компоненте TImage с именем imgPicture:

. . . . .

with imgPicture.Picture do

beqin {Изменение размера.}

ClientWidth:= Width;

ClientHeight:= Height;

end;

. . . . .

    Неклиентская область обычно прорисовывается Windows и включает строку заголовка, меню и рамку окна. B этой части окна можно рисовать, перехватив сообщение WM_NCPAINT.

    8) property FormStyle: TFormStyle; - задает тип формы.

    9) property Icon: TIcon; - определяет пиктограмму, выводимую Windows при сворачивании формы до кнопки на панели задач.

    10) property KeyPreview: Boolean;. Объект TForm наследует от класса TWinControl обработку событийOnKeyDownOnKeyUp и OnKeyPress, и свойство KeyPreview определяет ситуации, в которых эти сообщения запускаются. Если значение KeyPreview равно False, события клавиатуры пересылаются только тому управляющему элементу, который имеет фокус ввода. В неординарном случае, когда в форме нет управляющих элементов, событие передается форме. Если же значение свойства установлено равным True, событие сначала пересылается форме, а затем - управляющему элементу, имеющему фокус ввода.

Примечание. Поскольку клавиша TAB используется для передачи фокуса другому управляющему элементу, она не вызывает генерации события.

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

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

    При этом все нажатия клавиш отсылаются обработчикам событий OnKeyDown, OnKeyUp и OnKeyPressавтоматически, и для "отлова" нажатия функциональной клавиши надо написать только один обработчик событияOnKeyDown формы. Вот пример закрытия формы при нажатии клавиши F2.

procedure TForm1. FormKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

{Проверить, нажата ли клавиша F2.}

if Key =VK_F2 then Close; {Закрыть форму.}

end;

    Рассматривая принцип работы этого кода, имейте в виду, что события OnKeyDown и OnKeyUp используютвиртуальные коды (все они перечислены в файле WINDOWS.PAS).

    11) property Menu: TMainMenu; - определяет компонент TMainMenu, который предоставляет главное меню формы. Свойство Menu позволяет сделать меню контекстно-зависимым и часто используется в OLE-приложениях при замене исходного меню на меню приложения-сервера. Для изменения свойства Menu просто присвойте ему новое значение.

    12) property Position: TPosition; - определяет положение формы на экране. Возможные значения:

  • poDesigned - первоначальные размеры и положение окна во время выполнения те же, что во время проектирования. Это значение принимается по умолчанию, но обычно его следует изменить;

  • poScreenCenter - окно располагается в центре экрана. Размер окна тот, который был спроектирован. В мультимедийных приложениях, работающих одновременно с несколькими мониторами (начиная с Delphi 4) эта центральная позиция может быть несколько изменена;

  • poDesktopCenter - это значение предусмотрено, начиная с Delphi 4. Окно располагается в центре экрана. Размер окна тот, который был спроектирован. Этот режим не используется в приложениях со множеством мониторов;

  • poDefault - местоположение и размер окна определяет Windows, учитывая размер и разрешение экрана. При последовательных показах окна его положение сдвигается немного вниз и вправо;

  • poDefaultPosOnly - местоположение окна определяет Windows. При последовательных показах окна его положение сдвигается немного вниз и вправо. Размер окна - спроектированный;

  • poDefaultSizeOnly - размер окна определяет Windows, учитывая размер и разрешение экрана. Положение окна - спроектированное;

  • poMainFormCenter - это значение предусмотрено, начиная с Delphi 5. Окно располагается в центре главной формы. Размер окна тот, который был спроектирован. Этот режим не приспособлен к приложениям со множеством мониторов. Используется только для вторичных форм. Для главной формы действует так же, какpoScreenCenter.

Примечание. Рассмотренные свойства работают тогда, когда WindowState=wsNormal.

    Таким образом, значение по умолчанию (poDesigned) заставляет форму выводиться в месте, определенном при разработке приложения. Положение и размер формы при этом берутся из свойств Left, Top, Height и Width. Поскольку заранее неизвестно, в какой системе будет запущено приложение, то может оказаться, что на мониторе с низким разрешением при использовании этого значения свойства будет видна только часть формы.

    Более полезно значение poScreenCenter, которое использует заданные при создании приложения значения Width иHeight, но оно так изменяет Left и Тор, что форма выводится в центре экрана.

    Если свойство Position равно poDefault Windows автоматически установит размеры и положение формы, но при этом нельзя будет контролировать ее размеры. Можно создать форму размером 200x200 точек, которая будет выведена как 640x480 точек. Из-за этого, в частности, не допускается применение данного значения для MDI-форм.

    Значение poDefaultPosOnly более полезно, так как оно автоматически определяет расположение формы, но не ее размеры (а потому рекомендуется для MDI-форм, в которых требуются определенные размеры дочерних форм).

    Значение свойства (poDefaultSizeOnly) автоматически определяет размер, но не расположение формы. Это значение может использоваться там, где важно положение формы на экране, а не ее размер.

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

    Приведем код приложения с комментариями.

procedure TForm1.FormDestroy(Sender: TObject);

var

sAppPath: String;

iniSettings: TINIFile;

begin

//Получаем путь к EXE-файлу приложения.

sAppPath:= ExtractFilePath(Application.EXEName);

//Создаем объект TINIFile.

iniSettings:=TINIFile.Create(sAppPath+'SETTINGS.INI');

try

//Записываем свойства в INI-файл.

iniSettings.WriteInteger(Name, 'Left',Left) ;

iniSettings.WriteInteger(Name,'Top', Top);

iniSettings.WriteInteger(Name,'Width',Width);

iniSettings. WriteInteger (Name, 'Height',Height) ;

finally

iniSettings.Free; //Удаляем объект TINIFile.

end;

end;

    Примечание. Для компиляции примера не забудьте включить в раздел uses модуль INIFiles.

    После выполнения приложения INI-файл будет содержать строки такого типа:

[Form1]

Left=52

Top=46

Width=696

Height=480

    Примечание. Для строки раздела используется свойство Name формы.

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

procedure TForm1.FormCreate (Sender: TObject);

const

cNOTFOUND = -1;

var

sAppPath: String;

iniSettings: TINIFile;

liValue: Longint;

begin

//Получаем путь к EXE-файлу приложения.

sAppPath:= ExtractFilePath(Application.ExeName);

//Создаем объект TINIFile.

iniSettings:= TINIFile.Create(sAppPath+'SETTINGS.INI');

try

//Пытаемся прочитать значение свойства Left.

liValue:= iniSettings.ReadInteger(Name, 'Left', cNOTFOUND);

//Проверяем, считано ли значение.

if liValue = cNOTFOUND then

begin

//Значение не считано - центрируем форму.

Left:= (Screen.Width - Width) div 2;

Top:= (Screen.Height - Height) div 2;

end

else

begin

//Считываем значения из INI-файла.

Left:= iniSettings.ReadInteger(Name,'Left',Left);

Top:= iniSettings.ReadInteger(Name,'Top',Top);

Height:= iniSettings.ReadInteger(Name,'Height', Height);

Width:= iniSettings.ReadInteger(Name,'Width', Width);

end;

finally

iniSettings.Free;

end;

end;

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

    13) property WindowState: TWindowState; - определяет вид, в котором окно первоначально предъявляется пользователю при выполнении приложения. Имеет следующие значения:

  • wsNormal - нормальный вид окна (значение по умолчанию). При этом окно выводится в состоянии, определяемом свойствами Position, Left, Top, Height и Width;

  • wsMinimized - окно свернутое;

  • wsMaximized - окно, развернутое на весь экран.

рассмотрим вкладку Standard

    Вкладка Standard имеет следующий общий вид:

Рис.1.Палитра компонентов Standard

    Дадим краткую характеристику компонентов, находящихся на этой вкладке:

Таблица 1. Основные компоненты

Компонент

Описание

Курсор - это не компонент, а просто кнопка для быстрой отмены выбора какого-либо объекта.

Компонент Frame (Фрейм) создается как производный класс от типа TFrame. Фрейм, подобно форме, является контейнером для других компонентов. Но помимо этого фреймы могут вкладываться в форму или другие фреймы и могут сохраняться на палитре компонентов для многократного использования.

Компонент TMainMenu (Меню) предназначен для добавления к программе главного меню, без которого не обходится практически ни одно из приложений Windows. TMainMenu объединяет строку меню и раскрывающийся список в форме. Меню предоставляет возможность объединения меню нескольких форм.

Компонент TPopupMenu (Всплывающее меню) предназначен для создания контекстного меню. Создается TPopupMenu аналогично главному меню.

Компонент TLabel (Надпись) используется для отображения текста в форме, который нельзя изменять непосредственно через графический интерфейс пользователя, хотя в программе с помощью надписи можно выводить любой текст, что часто и делается.

В компоненте TEdit (Поле ввода) хранится текст, который можно помещать в данный компонент, как во время проектирования, так и во время выполнения программы.

Компонент TMemo (Область просмотра) предназначен для вывода на экран нескольких строк текста.

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

Компонент TCheckBox (Флажок) используется для того, чтобы пользователь мог указать свое решение типа да/нет или да/нет/не уверен.

Компонент TRadioButton (Переключатель) предназначен для выбора одного значения из ряда возможных. Переключатели всегда используются группами.

Компонент TListBox (Список) очень часто применяется в программах для Windows. Он позволяет выбрать одну или несколько строк в списке. Строки могут содержать как текст, так и рисунки.

Компонент TComboBox (Комбинированный список) представляет собой вариант списка с присоединенным дополнительным полем, в котором отображается выбранный элемент списка.

Компонент TScrollBar (Полоса прокрутки) обычно используется как вспомогательный инструмент в других элементах управления: списках, текстовых областях и т.д.

Компонент TGroupBox (Групповой блок) необходим для объединения нескольких компонентов и представляет собой стандартный групповой блок Windows.

Компонент TRadioGroup (Группа переключателей) используется аналогично TGroupBox для группировки объектов TRadioButton.

Компонент TPanel (Панель) используется для объединения нескольких компонентов, подобно компоненту типа TGroupBox (Групповой блок). Но при этом панель представляет дополнительные возможности графического оформления.

Компонент TActionList (Список действий) позволяет объединить все реакции на действия пользователя (события) в одном месте, что повышает эффективность проектирования.

рассмотрим компонент Frame

    Компонент Frame (Фрейм) создается как производный класс от типа TFrame.

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

    Фреймы удобны для организации групп элементов управления, которые используются в различных местах приложения. Например, если в нескольких формах используется одно и то же растровое изображение, то использование фрейма с изображением позволит создать единственный ресурс, используемый многократно, и не расходовать память. Также можно описать несколько полей редактирования, предназначенных для редактирования таблиц, в одном фрейме и использовать их во всех случаях для ввода данных в таблицы.

    Для создания пустого фрейма выберите команду меню File | New | Frame или команду File | New | Other и дважды щелкните на пиктограмме Frame. Затем можете размещать во фрейме необходимые компоненты.

    Обычно лучше сохранять фреймы, хотя это и не обязательно, как часть проекта. Для создания проекта, который содержит только фреймы и не включает форм, выберите команду File | New | Application, закройте форму и модуль без сохранения, затем выберите команду File | New | Frame и сохраните проект.

    При сохранении фреймов не используйте имена, создаваемые по умолчанию (Unit1Project1 и т.д.), так как при использовании фрейма в дальнейшем может возникнуть конфликт имен.

    Во время проектирования можно легко отобразить любой фрейм, включенный в проект, используя пункты меню View | Forms и выбрав необходимый фрейм. Так же как и для формы, можно выбирать режим отображения в виде формы (пункт View as Form контекстного меню) или в виде текста (View as Text).