От Delphi 4 к Delphi 5 часть 27
От Delphi 4 к Delphi 5
Программный модуль Delphi состоит из раздела interface (интерфейс) и раздела implementation (реализации).
Идентификаторы, которые объявляются в разделе интерфейса, доступны всем другим модулям и программам, использующим данный модуль. Такие элементы программы, как константы, переменные, функции и процедуры, могут использоваться в области видимости, которая зависит от того места, в котором определен элемент.
Перед рассмотрением вопроса доступности идентификаторов в разделах программного модуля определимся кратко с константами, переменными и типами данных.
Константы.
Константы (постоянные величины), или константные выражения, – это имена для фиксированных значений, на которые происходит ссылка в программах. Константа дает возможность обращаться к этим значениям по имени. Значение их не меняется в течение выполнения вашего приложения.
Использование констант делает ваши программы читаемыми, применяя осмысленное имя для константы. Если в вашей программе используются большие числовые величины неоднократно, то вы будете на правильном пути, определяя эти величины как константы.
Синтаксис объявления констант следующий:
Const
ИмяКонстанты1=значение константы;
ИмяКонстанты2=константное выражение;
…
ИмяКонстантыN=значение константы;
Ключевое слово const стоит вначале блока. После него следует объявление констант. Оно состоит из имени константы, знака равенства и значения константы. В конце объявления ставится точка с запятой. В одном блоке может быть объявлена одна или несколько констант. Таких блоков объявлений может быть несколько.
Примеры объявления констант:
const
RSPi=1.7725; {корень квадратный из Pi -Root square from}
RCPi=1,4646; {корень кубический из Pi - Root cubic from}
ReportOnMistake='Произошла ошибка, введите изменения';
Первая и вторая константы, числовые константы, которые удобно использовать для вычислений. Третья константа строковая, значение которой можно использовать для вывода на печать или на экран монитора. Все три константы именованные.
Примеры константных выражений:
cos(180/Pi + 43);
Chr(64);
Ord('B');
Имеются предопределенные константы: True - истина, False - ложь, Nil - нулевой указатель.
Константное выражение может использовать константы, ранее объявленные именованные константы, арифметические операции, значения переменных типов, конструкторы множеств, а также следующие встроенные функции: Abs, Addr, ArcTan, Chr, Cos, Exp, Frac, Hi, High, Int, Lenght, Ln, Lo, Low, Odd, Ord, Pi, Pred, Round, Sin, SizeOf, Sqr, Sqrt, Succ, Swap, Trunc.
В объявлениях именованных констант допускаются многие, но не все вышеперечисленные функции и не с любыми константными выражениями в качестве параметров. Допуск зависит от версии компилятора. Записывайте выражение, если оно будет не верным, то компилятор выдаст сообщение.
Объявление именованной константы является указанием для компилятора произвести замену во всем тексте идентификатора константы его значением. Такое объявление делает текст более осмысленным.
Значения строковых констант заключаются в одинарные кавычки и содержат последовательность любых символов. При включении в текст строки одинарной кавычки необходимо кавычки повторить дважды.
const
MyText='Delphi -''5'';
Имеется такой вид констант, как строки ресурсов. Они включаются в проект с помощью ключевого слова resourcestring вместо const.
Пример строки ресурсов:
resourcestring
ThisGoodText=' Это хороший текст ';
Константы записи.
Для того чтобы объявлять константу записи, определите величину каждого значения. Величина с назначениями области разделяется круглыми скобками. Она должна представлять собой постоянное выражение. Области должны указываться в порядке, в котором они появляются в декларации типа записи и в поле вариантной записи.
type
TPoint=record
X, Y: Single;
end;
TVector=array[0..1] of TPoint;
TMonth=(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
TDate=record
D: 1..31;
M: TMonth;
Y: 1900..1999;
end;
const
Origin: TPoint=(X: 0.0; Y: 0.0);
Line: TVector=((X: -3.1; Y: 1.5), (X: 5.8; Y: 3.0));
SomeDay: TDate=(D: 2; M: Dec; Y: 1960);
Константы массива.
При объявлении констант массива величины элементов массива разделяются запятыми и заключаются круглыми скобками. Эти величины должны представляться постоянными выражениями. Например,
const Digits: array[0..9] of Char=('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
объявляется типизированная константа, с именем "цифры", которая содержит массив символов.
Более удобно это объявление можно представить как:
const Digits: array[0..9] of Char='0123456789';
Многомерные константы можно представить следующим образом:
type TCube=array[0..1, 0..1, 0..1] of Integer;
const Maze: TCube=(((0, 1), (2, 3)), ((4, 5), (6,7)));
Переменные.
Переменная – это именованный тип данных заранее определенного типа. С точки зрения технических подробностей, это область памяти, определенная программистом, где можно сохранять значения. Тип переменной определяет виды значений, которые вы можете там хранить.
Переменная имеет следующие характеристики.
Имя переменной – идентифицирует ее, дает возможность ссылаться на место памяти, где хранится переменная.
Тип переменной – определяет, какие виды значений являются для нее возможными и операции, которые допускаются для работы с переменными.
Перед тем, как использовать переменные, их необходимо объявить. Объявление сообщает компилятору размер области памяти, резервируемой для каждой переменной.
Объявление переменных производится с использованием ключевого слова var.
Синтаксис объявления имеет вид:
var
Имя1,
…
ИмяN: Type1;
ИмяN1;
…
ИмяNN: TypeN;
Блок объявлений переменных начинает ключевое слово var.
После него следуют объявления переменных. Каждое объявление состоит из имени переменной, двоеточия, типа переменной. Объявление завершается точкой с запятой. В блоке может быть одно или более объявлений переменных. Несколько переменных одного и того же типа могут использоваться вместе. Они отделяются запятыми, без повторения каждый раз имени типа.
Пример объявления переменных:
var
Summa: Integer;
Divident,
Divisor: Real;
BinaryNamber: Byte;
SurmameOfAuthor: String;
Переменные можно разделить на локальные и на глобальные.
Локальными переменными являются переменные, объявленные в процедурах и функциях. Они существуют только во время выполнения соответствующей процедуры или функции. Выделение памяти под локальные переменные происходит только при вызове процедуры или функции и освобождается при возврате в вызвавшую процедуру или функцию.
Переменные, которые объявляются вне процедур или функций, называются глобальными переменными.
Глобальные переменные можно инициализировать в их объявлениях, т.е. задавать им начальные значения.
Пример инициализации глобальной переменной:
var
I: Integer=5;
R: Real=180/Pi*43;
Локальные переменные инициализировать нельзя.
Можно создавать динамические переменные, выделяя для них место в динамически распределяемой области памяти heap (куча), с использованием процедур GetMem и New. Освобождение памяти производится процедурами FreeMem и Dispose. Можно также использовать для динамических переменных функции ReallocMem, Initialize, StrAlloc, StrDispose.
Типы данных.
Типы данных в Object Pascal можно разделить на предопределенные (встроенные) типы данных и типы данных, определяемые пользователем.
Данные - это информация, с которой работают компьютеры. На самом низком, машинном уровне это последовательность нулей и единиц. Языки высокого уровня позволяют работать с данными более абстрактным способом, игнорируя подробности реализации и физического хранения.
Тип данных - это множество значений вместе со всеми операциями, которые могут выполняться с этими значениями. Определение переменной связывает ее с уникальным типом. Т.е. значения, которые переменная может содержать, ограничиваются ее типом.
Язык программирования Object Pascal определяет ряд типов данных, называемых стандартными типами данных. К ним относятся следующие типы: целые, действительные или вещественные, символы, строки, указатели, булевы, variant.
Определяемые пользователем типы могут быть использованы или непосредственно в объявлении переменной, или должны быть объявлены с помощью ключевого слова type.
Это слово начинает раздел объявления типов, синтаксис объявления которых следующий:
<идентификатор типа>=<описание типа>;
type { Когда один идентификатор типа объявлен, используем другой идентификатор типа, без определения типа, оба обозначают тот же тип }
T1=Integer;
T2=T1;
T3=Integer;
T4=T2;
type TMyString=string; Объявление типа можно использовать для создания псевдонима встроенного типа }
type TMyInteger=type Integer; { Для того чтобы создавать четкий тип, повторите слово type в описании }
type MyString=string[10]; { определение переменных для введенного пользователем типа }
var
S1: MyString;
S2: MyString;
Целые типы данных.
Целые типы данных используются для представления целых чисел. Они относятся к целым порядковым типам.
Целые числа состоят только из цифр и знака "+" или "-". Если знак опущен и число не равно 0, то оно рассматривается как положительное, например:
0 {рассматривается как целое число}
22 {положительное целое число}
-55 {отрицательное целое число}
Ниже приведены значения, которые определены для Delphi 5.
Тип Byte, диапазон значений 0 255, размер 1 байт.
Тип Word, диапазон значений 0 65535, размер 2 байта.
Тип Longword, диапазон значений 0 4294967295, размер 4 байта
Тип ShortInt, диапазон значений -128 127, размер 1 байт.
Тип SmallInt, диапазон значений -32768 32767, размер 2 байта.
Тип Cardinal, диапазон значений 0 4294967295, размер 4 байта.
Тип Integer, диапазон значений -2147483648 2147483647, размер 4 байта.
Тип LongInt, диапазон значений -2147483648 2147483647, размер 4 байта.
Тип Int64, диапазон значений -2 63 (2 63 – 1), размер 8 байт.
Родовыми типами (т.е. обеспечивающими максимальную производительность) среди перечисленных выше являются Integer и Cardinal . В настоящий момент тип Integer эквивалентен типу LongInt, но в последующих версиях это может быть изменено.
Приведенные затраты памяти могут изменяться от версии к версии и от системы к системе. Поэтому если требуется достоверно знать затраты памяти для того или иного типа, следует пользоваться функцией SizeOf.
Попытка увеличения значения переменной, уже имеющей максимальное для данного типа значение, приведет к циклическому переходу на минимальное значение. Это произойдет, если не включена директива проверки диапазона целочисленных значений {$R+} и не установлена опция Range Checking в окне опций проекта. Иначе в процессе выполнения будет генерироваться исключение с сообщением "Range check error".
Рассмотрим пример использования целых типов в приложениях.
var
Minute,
Hour,
Day,
Year: Integer;
begin
Minute:=60;
Hour:=Minute*60;
Day:=24*Hour;
Year:=365*Minute*60*24;
end;
В данном примере объявляется четыре целые переменные Minute, Hour, Day, Year. После ключевого слова begin производится инициализация переменной Minute со значением 60, столько секунд содержится в минуте. Следующая строка вычисляет, сколько секунд содержится в часе, переменная Hour присваивается результат вычисления Minute * 60, т.е. увеличивается в 60 раз значение, хранящееся в переменной Minute. Результат помещается в переменную Hour, и так далее .
Булевы типы данных.
Переменные булевых типов данных представляют логические значения, например, true (истина) и false (ложь). Булевы типы относятся к целым порядковым типам. Ниже приведены основные булевы типы для Delphi 5 . Столь большое число одинаковых по смыслу типов связано с желанием обеспечить совместимость Delphi с другими системами. Предпочтительнее всегда использовать тип Boolean, кроме обращений к каким-нибудь процедурам, явным образом требующим другой тип.
Тип Boolean - булева величина в один байт.
Тип ByteBool - булева величина в один байт.
Тип WordBool - булева величина в одно слово.
Тип LongBool - булевая величина в два слова.
Булевы типы с определенным размером обычно используются для совместимости со средой Windows на низком уровне. Как правило, вы не будете испытывать в них потребности, пока не станете иметь дело с интерфейсами низкого уровня для Windows.
Рассмотрим пример использования булевых переменных.
var
Cell, Cell1: Boolean;
Result: Boolean;
begin
Cell:=True;
Cell1:=not Cell;
Result:=Cell and Cell1;
end;
В данном примере объявляется три переменные булевого типа. Переменные Cell и Cell1 объявлены вместе. Переменная Result объявлена отдельно. В первой строке после ключевого слова begin переменной Cell присвоено значение True. Во второй строке переменной Cell1 присвоено значение логически противоположное тому, которое имеет переменная Cell. Выражение not Cell значит: возьмите значение Cell и проинвертируйте его, т.е. сделайте отрицание. Следующая строка Result:=Cell and Cell1 означает: возьмите значение Cell и объедините его со значением Cell1, используя логический оператор and. Результат этого выражения присвойте значению Result.
Действительные типы данных.
Действительные типы данных предназначены для хранения чисел, имеющих дробную часть. Ниже приведены значения действительных типов данных для Delphi 5 и даются диапазоны их изменений.
Действительные или вещественные числа содержат целую и дробную части, например:
0.0 {интерпретируется как вещественное число}
277.5 { положительное вещественное число}
-0.375 { отрицательное вещественное число}
Вещественные числа могут быть представлены в двух формах: с фиксированной и плавающей точкой.
Форма с фиксированной точкой совпадает с обычной записью чисел: 299 {точка в конце числа опущена}, 3.14
Форма с плавающей точкой используется при работе с очень большими или малыми числами. В этой форме число, стоящее перед Е, умножается на 10 в степени, указанной в Е.
5.12Е +14 {5.12 *10 14 }
2.5E-7 {2.5 * 10 -7 }
3.14E00 {3.14 * 10 0 =3.14}
Тип Real 48, диапазон значений 2.9*10 –39 1.7*10 38, число значащих разрядов 11–12, размер 6 байт.
Тип Real, диапазон значений 5.0*10 -324 1.7*10 308, число значащих разрядов 15–16, размер 8 байт.
Тип Single, диапазон значений 1.5*10 -45 3.4*10 38, число значащих разрядов 7–8, размер 4 байта.
Тип Double, диапазон значений 5.0*10 -324 1.7*10 308, число значащих разрядов 15–16, размер 8 байт.
Тип Extended, диапазон значений 3.6*10 -4932 1.1*10 4392, число значащих разрядов 19–20, размер 10 байт.
Тип Comp, диапазон значений, -2 63 2 62, число значащих разрядов 19–20, размер 8 байт.
Тип Currency, диапазон значений -922337203685477.5808 922337203685477.5807, число значащих разрядов 19–20, размер 8 байт.
Родовым (т.е. обеспечивающим максимальную производительность) является тип Real, который в настоящий момент эквивалентен типу Double, но в последующих версиях это может быть изменено.
Наименьшую производительность обеспечивает тип Real48, сохраняемый только для обратной совместимости с более ранними версиями языка.
Рассмотрим пример использования действительных (вещественных) чисел.
const
DefaultDaily=300.00;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Hour: Real;
Day, Month: Single;
Annually: Double;
begin
Day :=DefaultDaily;
Hour :=Day/8;
Month:=Day*20;
Annually:=Month*12;
end;
end.
В данном примере производится вычисление почасовой оплаты, месячная и ежегодная заработная плата, исходя из данных о ежедневной заработной плате. Вначале производится определение константы с плавающей точкой DefaultDaily, которая является глобальным параметром программы, на котором основаны вычисления.
Объявлены четыре переменные действительного типа Real, Single, Double.
Символьные типы данных.
Символьные типы предназначены для хранения одного символа. Они относятся к целым порядковым типам. Ниже приведены значения символьных типов данных. Наличие двух разных типов - ANSIChar и WideChar связано с двумя различными множествами символов: ANSI, каждый символ которого занимает 1 байт, и Unicode, каждый символ которого занимает 2 байта. Первые 256 символов в этих множествах одинаковы и соответствуют символам ASCII от 0 до 255.
Тип ANSIChar, размер 1 байт, хранит один символ ANSI.
Тип WideChar, размер 2 байта, один символ Unicode.
Тип Char, размер 1 байт, хранит один символ. Сейчас эквивалентен ANSIChar . В будущих версиях Delphi, может быть, будет эквивалентен WideChar .
Родовым (т.е. обеспечивающим максимальную производительность) является тип Char . Именно тип Char имеет смысл использовать во всех случаях, кроме обращений к функциям, требующим другой тип символьных данных.
Для символьного типа предопределена функция Chr, возвращающая символ любого целого значения в пределах AnsiChar или WideChar. Например, Chr (65) возвращает букву "A". Поскольку символьные типы относятся к порядковым типам, для них предопределены такие функции и процедуры, как Ord, Pred, Succ, Inc, Dec и др. Функция Ord, возвращающая номер символа, противоположна по смыслу функции Chr . Т.е. Ord (Chr(65)) вернет 65, а Chr (Ord('A')) вернет символ "A".
Рассмотрим пример использования символов в приложении.
Он иллюстрирует, как необходимо объявлять и присваивать различные значения символьной переменной.
var
Tetta: Char;
Etta: Char;
begin
Tetta:='f';
Etta :='F';
end;
В программе объявлены две символьные переменные, Tetta и Etta. Переменной Tetta присвоено значение f. Переменной Etta присвоено значение F.
Тип данных строки.
Строки представляют собой последовательность символов. Ниже приведены значения типов строк.
Тип ShortString, максимальная длина 255, используется для обратной совместимости.
Тип AnsiString, максимальная длина 2 31 (2 Гб) символов ANSI .
Тип String, максимальная длина или 255, или до 2 Гб символов ANSI или Unicode .
Тип WideString, максимальная длина 2 30 (1 Гб) символов Unicode, используется в серверах COM и интерфейсах.
Родовым является тип String, который имеет разный смысл в зависимости от директивы компилятора $H. Если включена директива {$H+} (она включена по умолчанию), то String интерпретируется компилятором как тип AnsiString - длинная строка с нулевым символом в конце. Если же включить директиву {$H-}, то String интерпретируется компилятором как тип ShortString - короткая строка без нулевого символа в конце. Если в объявлении типа после ключевого слова String следует число символов в квадратных скобках (например, String[4]), то, независимо от директив компилятора, тип трактуется как строка без нулевого символа в конце с указанным числом символов.
Рассмотрим пример использования строк в приложении.
Когда вы объявляете переменную типа String, компилятор резервирует память достаточную для размещения в строке 255 символов. Однако вы можете определить длину вашей строки с целью сохранения памяти. Таким образом, вы должны внимательно подходить к определению длины строк и не резервировать большее количество памяти, чем это необходимо.
Пример иллюстрирует использование строк различной длины в операторах присваивания и выражениях.
var
SurName,
Name,
PatronymicName: String[15];
Buffer: String [45];
begin
SurName:='Skuratow';
Name :='Wladimir';
PatronymicName:='Petrowich';
Buffer:=Surname + Name + PatronymicName;
end;
Компонент Image.
Компонент Image предназначен для размещения на форме одного из поддерживаемых Delphi типов изображений: пиктограммы, растровой картинки или метафайла.
Данные изображения позволят украсить ваше приложение, например, иметь в приложении логотип вашей фирмы. Фотографии сотрудников могут заполнить базу данных вашего учреждения.
Поместите компонент Image со страницы Additional на форму. Центральное свойство этого компонента, которое может содержать изображение, — свойство Picture. Д ля того чтобы поместить изображение на форму, необходимо произвести двойной щелчок по компоненту Image или щелкнуть по кнопке с тремя точками справа от свойства Picture на странице Properties инспектора объекта. Откроется диалоговое окно Picture Editor, позволяющее загрузить в свойство Picture какой-нибудь графический файл. Для загрузки изображения щелкните по кнопке Load. Откроется диалоговое окно Load Picture (рисунок 1) . При перемещении по открытым графическим файлам в правом окне отображаются содержащиеся в них картинки, а над ним — цифры, характеризующие размер картинки (рисунок 2). Как видите, в Delphi 5 появилось удобное загрузочное окно, позволяющее предварительно просмотреть изображения картинок. Графические файлы в Delphi 4 расположены в каталоге Program Files \ Common Files \ Borland Shared. Графические файлы в Delphi 5 расположены в каталоге Program Files \ Common Files \ Borland \ Borland Shared. Можно использовать изображения из каталога Program Files \ Microsoft Office \ Clipart \ Popular.
Изображение после загрузки в ваше приложение сохраняется в нем. И у вас есть возможность поставлять ваше приложение без отдельно расположенного графического файла.
Вы можете создать рисунок самостоятельно, используя уже имеющиеся рисунки, например с использованием редактора Word . Редактор Word предлагает воспользоваться рисунками, которые уже созданы. Но просто вставленный рисунок может не удовлетворять вас по своему виду, цвету или по наличию или отсутствию отдельных элементов. Редактор Word предлагает вам преобразовывать рисунки к виду, которые могут быть очень далеки от их оригиналов, причем в лучшую сторону. Чтобы использовать имеющиеся рисунки, необходимо запустить текстовый редактор Word. В строке главного меню Microsoft Word выберите кнопку Вставка, щелкните по ней, из раскрывшегося меню выберите Рисунок и далее Картинки. Щелкните по команде Картинки. Раскроется диалоговое окно Microsoft Clip Gallery 3.0 (рисунок 3). Из предложенного раздела Графика выберите подраздел Хозяйство. Активизируйте, например, рисунок Часы и щелкните по кнопке Вставить. После этого рисунок Часы импортируется в ваш документ на место, указанное курсором (рисунок 4).
Ваше первое преобразование может быть сразу сведено, возможно, к уменьшению его размера. Произведите выделение рисунка: подведите курсор к значкам, выделяющим данный рисунок. И в момент превращения курсора в двойную стрелку, нажмите левую кнопку мыши и, изменяя положения мыши на коврике, измените размер вашего рисунка. На импортируемом рисунке часы показывают 7 часов 52 минуты, измените время, показываемое часами, на 9 часов. Измените положение часов в текстовом документе и цвет. Для этого подведите курсор к меню Microsoft Word, щелкните правой кнопкой мыши и из раскрывшегося меню выберите команду Рисование . Над панелью задач появится панель Рисование. Подведите маркер к рисунку Часы, и после того как он превратится в четырехстороннюю стрелку, щелкните кнопкой для выделения нашего рисунка. Не снимая выделения, нажмите кнопку Действия. В раскрывшемся меню выберите команду Разгруппировать. Данную процедуру повторите несколько раз, пока команда Разгруппировать не перестанет быть активной. Для данного рисунка необходимо 8 раз проделать данную процедуру, после чего рисунок будет разбит на отдельные составные части, с которыми вы и будете работать дальше.
После снятия выделения с элементов рисунка, для чего можно щелкнуть кнопкой в любой точке экрана, но не в области рисунка, выделите нужные отдельные элементы рисунка. Выделив элемент рисунка, дважды щелкните по нему, раскроется диалоговое окно, Формат объекта с предложением изменить цвет и тип линий элемента, изменить размер, положение и обтекание. Элементы, которые нам не нужны для дальнейшего использования, можно удалить.
Как видно из вновь полученного рисунка (рисунок 5), проведены изменения цветовой гаммы рисунка, изменен наклон часов, изменен цвет тени. А также устранена ошибка, так как на исходном рисунке, на часах цифра девять повторена два раза, удалено светлое пятно с изображения рисунка.
Возможно также преобразование рисунков, взятых из файлов. Для этого необходимо выйти на кнопку меню Microsoft Word, выбрать команду Рисунок и в раскрывшемся меню выбрать команду Из файла . Раскроется диалоговое окно Добавить рисунок с предложением выбрать папку с содержанием различных рисунков, которые можно преобразовывать способом, рассмотренным выше.
После преобразования рисунка произведите группирование отдельных элементов. Выделите созданный рисунок, скопируйте его в буфер обмена. Далее запустите графический редактор Paint, вставьте рисунок. Здесь можете произвести дополнительные преобразования, далее сохраните рисунок в выбранной папке с расширением . bmp.
Рассмотрим свойства компонента Image.
Если вы установите свойство AutoSize в True, то размер компонента Image будет автоматически подгоняться под размер помещенной картинки. Если свойство AutoSize установлено в False, то изображение может не поместиться в компонент, или наоборот, размер компонента может быть больше размера картинки.
Свойство Center указывает, нужно ли центрировать изображение в границах компонента. Игнорируется, если свойство AutoSize равно True или если свойство Stretch равно True и изображение не является пиктограммой (ICO).
Свойство Stretch позволяет подгонять не компонент под размер рисунка, а рисунок под размер компонента. Для этого установите свойство AutoSize в False, растяните или сожмите размер компонента Image и установите Stretch в True. Вы увидите, что рисунок займет всю площадь компонента, но здесь возможно искажение рисунка. Поэтому устанавливать размеры Image точно пропорционально размеру рисунка может иметь смысл только для изображений не подверженных искажениям (узоры, линии). Свойство Stretch не распространяется на пиктограммы, которые не изменяют своих размеров.
Свойство Transparent (прозрачность). Если свойство установлено в True, то изображение в Image становится прозрачным. Данное свойство можно использовать для наложения изображений друг на друга. Чтобы это увидеть, поместите два компонента Image на форму, загрузите в них картинки. Передвиньте компоненты друг на друга, установите для верхнего компонента Image свойство Transparent равное True. Вы увидите, верхняя картинка перестала заслонять нижнюю картинку (рисунок 6). Вы можете поэкспериментировать с данным свойством, возможно, получите оригинальные совмещенные изображения для вашего приложения.
Литература:
Марко Канту. Delphi 2 для Windows 95/NT. Москва. ООО "Малип". 1997 г. Джон Матчо. Дэвид Р. Фолкнер. Delphi. Москва. БИНОМ. 1995 г. Эндрю Возневич. Delphi. Освой самостоятельно. Москва. Восточная книжная компания. 1996 г. В.В.Фаронов. Delphi 5. Учебный курс. Москва. Издательство Нолидж. 2000 г. А. Я. Архангельский. Программирование в Delphi 5. Москва. ЗАО "Издательство Бином". 2000 г. Владимир Скуратов
(c) компьютерная газета
Программный модуль Delphi состоит из раздела interface (интерфейс) и раздела implementation (реализации).
Идентификаторы, которые объявляются в разделе интерфейса, доступны всем другим модулям и программам, использующим данный модуль. Такие элементы программы, как константы, переменные, функции и процедуры, могут использоваться в области видимости, которая зависит от того места, в котором определен элемент.
Перед рассмотрением вопроса доступности идентификаторов в разделах программного модуля определимся кратко с константами, переменными и типами данных.
Константы.
Константы (постоянные величины), или константные выражения, – это имена для фиксированных значений, на которые происходит ссылка в программах. Константа дает возможность обращаться к этим значениям по имени. Значение их не меняется в течение выполнения вашего приложения.
Использование констант делает ваши программы читаемыми, применяя осмысленное имя для константы. Если в вашей программе используются большие числовые величины неоднократно, то вы будете на правильном пути, определяя эти величины как константы.
Синтаксис объявления констант следующий:
Const
ИмяКонстанты1=значение константы;
ИмяКонстанты2=константное выражение;
…
ИмяКонстантыN=значение константы;
Ключевое слово const стоит вначале блока. После него следует объявление констант. Оно состоит из имени константы, знака равенства и значения константы. В конце объявления ставится точка с запятой. В одном блоке может быть объявлена одна или несколько констант. Таких блоков объявлений может быть несколько.
Примеры объявления констант:
const
RSPi=1.7725; {корень квадратный из Pi -Root square from}
RCPi=1,4646; {корень кубический из Pi - Root cubic from}
ReportOnMistake='Произошла ошибка, введите изменения';
Первая и вторая константы, числовые константы, которые удобно использовать для вычислений. Третья константа строковая, значение которой можно использовать для вывода на печать или на экран монитора. Все три константы именованные.
Примеры константных выражений:
cos(180/Pi + 43);
Chr(64);
Ord('B');
Имеются предопределенные константы: True - истина, False - ложь, Nil - нулевой указатель.
Константное выражение может использовать константы, ранее объявленные именованные константы, арифметические операции, значения переменных типов, конструкторы множеств, а также следующие встроенные функции: Abs, Addr, ArcTan, Chr, Cos, Exp, Frac, Hi, High, Int, Lenght, Ln, Lo, Low, Odd, Ord, Pi, Pred, Round, Sin, SizeOf, Sqr, Sqrt, Succ, Swap, Trunc.
В объявлениях именованных констант допускаются многие, но не все вышеперечисленные функции и не с любыми константными выражениями в качестве параметров. Допуск зависит от версии компилятора. Записывайте выражение, если оно будет не верным, то компилятор выдаст сообщение.
Объявление именованной константы является указанием для компилятора произвести замену во всем тексте идентификатора константы его значением. Такое объявление делает текст более осмысленным.
Значения строковых констант заключаются в одинарные кавычки и содержат последовательность любых символов. При включении в текст строки одинарной кавычки необходимо кавычки повторить дважды.
const
MyText='Delphi -''5'';
Имеется такой вид констант, как строки ресурсов. Они включаются в проект с помощью ключевого слова resourcestring вместо const.
Пример строки ресурсов:
resourcestring
ThisGoodText=' Это хороший текст ';
Константы записи.
Для того чтобы объявлять константу записи, определите величину каждого значения. Величина с назначениями области разделяется круглыми скобками. Она должна представлять собой постоянное выражение. Области должны указываться в порядке, в котором они появляются в декларации типа записи и в поле вариантной записи.
type
TPoint=record
X, Y: Single;
end;
TVector=array[0..1] of TPoint;
TMonth=(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
TDate=record
D: 1..31;
M: TMonth;
Y: 1900..1999;
end;
const
Origin: TPoint=(X: 0.0; Y: 0.0);
Line: TVector=((X: -3.1; Y: 1.5), (X: 5.8; Y: 3.0));
SomeDay: TDate=(D: 2; M: Dec; Y: 1960);
Константы массива.
При объявлении констант массива величины элементов массива разделяются запятыми и заключаются круглыми скобками. Эти величины должны представляться постоянными выражениями. Например,
const Digits: array[0..9] of Char=('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
объявляется типизированная константа, с именем "цифры", которая содержит массив символов.
Более удобно это объявление можно представить как:
const Digits: array[0..9] of Char='0123456789';
Многомерные константы можно представить следующим образом:
type TCube=array[0..1, 0..1, 0..1] of Integer;
const Maze: TCube=(((0, 1), (2, 3)), ((4, 5), (6,7)));
Переменные.
Переменная – это именованный тип данных заранее определенного типа. С точки зрения технических подробностей, это область памяти, определенная программистом, где можно сохранять значения. Тип переменной определяет виды значений, которые вы можете там хранить.
Переменная имеет следующие характеристики.
Имя переменной – идентифицирует ее, дает возможность ссылаться на место памяти, где хранится переменная.
Тип переменной – определяет, какие виды значений являются для нее возможными и операции, которые допускаются для работы с переменными.
Перед тем, как использовать переменные, их необходимо объявить. Объявление сообщает компилятору размер области памяти, резервируемой для каждой переменной.
Объявление переменных производится с использованием ключевого слова var.
Синтаксис объявления имеет вид:
var
Имя1,
…
ИмяN: Type1;
ИмяN1;
…
ИмяNN: TypeN;
Блок объявлений переменных начинает ключевое слово var.
После него следуют объявления переменных. Каждое объявление состоит из имени переменной, двоеточия, типа переменной. Объявление завершается точкой с запятой. В блоке может быть одно или более объявлений переменных. Несколько переменных одного и того же типа могут использоваться вместе. Они отделяются запятыми, без повторения каждый раз имени типа.
Пример объявления переменных:
var
Summa: Integer;
Divident,
Divisor: Real;
BinaryNamber: Byte;
SurmameOfAuthor: String;
Переменные можно разделить на локальные и на глобальные.
Локальными переменными являются переменные, объявленные в процедурах и функциях. Они существуют только во время выполнения соответствующей процедуры или функции. Выделение памяти под локальные переменные происходит только при вызове процедуры или функции и освобождается при возврате в вызвавшую процедуру или функцию.
Переменные, которые объявляются вне процедур или функций, называются глобальными переменными.
Глобальные переменные можно инициализировать в их объявлениях, т.е. задавать им начальные значения.
Пример инициализации глобальной переменной:
var
I: Integer=5;
R: Real=180/Pi*43;
Локальные переменные инициализировать нельзя.
Можно создавать динамические переменные, выделяя для них место в динамически распределяемой области памяти heap (куча), с использованием процедур GetMem и New. Освобождение памяти производится процедурами FreeMem и Dispose. Можно также использовать для динамических переменных функции ReallocMem, Initialize, StrAlloc, StrDispose.
Типы данных.
Типы данных в Object Pascal можно разделить на предопределенные (встроенные) типы данных и типы данных, определяемые пользователем.
Данные - это информация, с которой работают компьютеры. На самом низком, машинном уровне это последовательность нулей и единиц. Языки высокого уровня позволяют работать с данными более абстрактным способом, игнорируя подробности реализации и физического хранения.
Тип данных - это множество значений вместе со всеми операциями, которые могут выполняться с этими значениями. Определение переменной связывает ее с уникальным типом. Т.е. значения, которые переменная может содержать, ограничиваются ее типом.
Язык программирования Object Pascal определяет ряд типов данных, называемых стандартными типами данных. К ним относятся следующие типы: целые, действительные или вещественные, символы, строки, указатели, булевы, variant.
Определяемые пользователем типы могут быть использованы или непосредственно в объявлении переменной, или должны быть объявлены с помощью ключевого слова type.
Это слово начинает раздел объявления типов, синтаксис объявления которых следующий:
<идентификатор типа>=<описание типа>;
type { Когда один идентификатор типа объявлен, используем другой идентификатор типа, без определения типа, оба обозначают тот же тип }
T1=Integer;
T2=T1;
T3=Integer;
T4=T2;
type TMyString=string; Объявление типа можно использовать для создания псевдонима встроенного типа }
type TMyInteger=type Integer; { Для того чтобы создавать четкий тип, повторите слово type в описании }
type MyString=string[10]; { определение переменных для введенного пользователем типа }
var
S1: MyString;
S2: MyString;
Целые типы данных.
Целые типы данных используются для представления целых чисел. Они относятся к целым порядковым типам.
Целые числа состоят только из цифр и знака "+" или "-". Если знак опущен и число не равно 0, то оно рассматривается как положительное, например:
0 {рассматривается как целое число}
22 {положительное целое число}
-55 {отрицательное целое число}
Ниже приведены значения, которые определены для Delphi 5.
Тип Byte, диапазон значений 0 255, размер 1 байт.
Тип Word, диапазон значений 0 65535, размер 2 байта.
Тип Longword, диапазон значений 0 4294967295, размер 4 байта
Тип ShortInt, диапазон значений -128 127, размер 1 байт.
Тип SmallInt, диапазон значений -32768 32767, размер 2 байта.
Тип Cardinal, диапазон значений 0 4294967295, размер 4 байта.
Тип Integer, диапазон значений -2147483648 2147483647, размер 4 байта.
Тип LongInt, диапазон значений -2147483648 2147483647, размер 4 байта.
Тип Int64, диапазон значений -2 63 (2 63 – 1), размер 8 байт.
Родовыми типами (т.е. обеспечивающими максимальную производительность) среди перечисленных выше являются Integer и Cardinal . В настоящий момент тип Integer эквивалентен типу LongInt, но в последующих версиях это может быть изменено.
Приведенные затраты памяти могут изменяться от версии к версии и от системы к системе. Поэтому если требуется достоверно знать затраты памяти для того или иного типа, следует пользоваться функцией SizeOf.
Попытка увеличения значения переменной, уже имеющей максимальное для данного типа значение, приведет к циклическому переходу на минимальное значение. Это произойдет, если не включена директива проверки диапазона целочисленных значений {$R+} и не установлена опция Range Checking в окне опций проекта. Иначе в процессе выполнения будет генерироваться исключение с сообщением "Range check error".
Рассмотрим пример использования целых типов в приложениях.
var
Minute,
Hour,
Day,
Year: Integer;
begin
Minute:=60;
Hour:=Minute*60;
Day:=24*Hour;
Year:=365*Minute*60*24;
end;
В данном примере объявляется четыре целые переменные Minute, Hour, Day, Year. После ключевого слова begin производится инициализация переменной Minute со значением 60, столько секунд содержится в минуте. Следующая строка вычисляет, сколько секунд содержится в часе, переменная Hour присваивается результат вычисления Minute * 60, т.е. увеличивается в 60 раз значение, хранящееся в переменной Minute. Результат помещается в переменную Hour, и так далее .
Булевы типы данных.
Переменные булевых типов данных представляют логические значения, например, true (истина) и false (ложь). Булевы типы относятся к целым порядковым типам. Ниже приведены основные булевы типы для Delphi 5 . Столь большое число одинаковых по смыслу типов связано с желанием обеспечить совместимость Delphi с другими системами. Предпочтительнее всегда использовать тип Boolean, кроме обращений к каким-нибудь процедурам, явным образом требующим другой тип.
Тип Boolean - булева величина в один байт.
Тип ByteBool - булева величина в один байт.
Тип WordBool - булева величина в одно слово.
Тип LongBool - булевая величина в два слова.
Булевы типы с определенным размером обычно используются для совместимости со средой Windows на низком уровне. Как правило, вы не будете испытывать в них потребности, пока не станете иметь дело с интерфейсами низкого уровня для Windows.
Рассмотрим пример использования булевых переменных.
var
Cell, Cell1: Boolean;
Result: Boolean;
begin
Cell:=True;
Cell1:=not Cell;
Result:=Cell and Cell1;
end;
В данном примере объявляется три переменные булевого типа. Переменные Cell и Cell1 объявлены вместе. Переменная Result объявлена отдельно. В первой строке после ключевого слова begin переменной Cell присвоено значение True. Во второй строке переменной Cell1 присвоено значение логически противоположное тому, которое имеет переменная Cell. Выражение not Cell значит: возьмите значение Cell и проинвертируйте его, т.е. сделайте отрицание. Следующая строка Result:=Cell and Cell1 означает: возьмите значение Cell и объедините его со значением Cell1, используя логический оператор and. Результат этого выражения присвойте значению Result.
Действительные типы данных.
Действительные типы данных предназначены для хранения чисел, имеющих дробную часть. Ниже приведены значения действительных типов данных для Delphi 5 и даются диапазоны их изменений.
Действительные или вещественные числа содержат целую и дробную части, например:
0.0 {интерпретируется как вещественное число}
277.5 { положительное вещественное число}
-0.375 { отрицательное вещественное число}
Вещественные числа могут быть представлены в двух формах: с фиксированной и плавающей точкой.
Форма с фиксированной точкой совпадает с обычной записью чисел: 299 {точка в конце числа опущена}, 3.14
Форма с плавающей точкой используется при работе с очень большими или малыми числами. В этой форме число, стоящее перед Е, умножается на 10 в степени, указанной в Е.
5.12Е +14 {5.12 *10 14 }
2.5E-7 {2.5 * 10 -7 }
3.14E00 {3.14 * 10 0 =3.14}
Тип Real 48, диапазон значений 2.9*10 –39 1.7*10 38, число значащих разрядов 11–12, размер 6 байт.
Тип Real, диапазон значений 5.0*10 -324 1.7*10 308, число значащих разрядов 15–16, размер 8 байт.
Тип Single, диапазон значений 1.5*10 -45 3.4*10 38, число значащих разрядов 7–8, размер 4 байта.
Тип Double, диапазон значений 5.0*10 -324 1.7*10 308, число значащих разрядов 15–16, размер 8 байт.
Тип Extended, диапазон значений 3.6*10 -4932 1.1*10 4392, число значащих разрядов 19–20, размер 10 байт.
Тип Comp, диапазон значений, -2 63 2 62, число значащих разрядов 19–20, размер 8 байт.
Тип Currency, диапазон значений -922337203685477.5808 922337203685477.5807, число значащих разрядов 19–20, размер 8 байт.
Родовым (т.е. обеспечивающим максимальную производительность) является тип Real, который в настоящий момент эквивалентен типу Double, но в последующих версиях это может быть изменено.
Наименьшую производительность обеспечивает тип Real48, сохраняемый только для обратной совместимости с более ранними версиями языка.
Рассмотрим пример использования действительных (вещественных) чисел.
const
DefaultDaily=300.00;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Hour: Real;
Day, Month: Single;
Annually: Double;
begin
Day :=DefaultDaily;
Hour :=Day/8;
Month:=Day*20;
Annually:=Month*12;
end;
end.
В данном примере производится вычисление почасовой оплаты, месячная и ежегодная заработная плата, исходя из данных о ежедневной заработной плате. Вначале производится определение константы с плавающей точкой DefaultDaily, которая является глобальным параметром программы, на котором основаны вычисления.
Объявлены четыре переменные действительного типа Real, Single, Double.
Символьные типы данных.
Символьные типы предназначены для хранения одного символа. Они относятся к целым порядковым типам. Ниже приведены значения символьных типов данных. Наличие двух разных типов - ANSIChar и WideChar связано с двумя различными множествами символов: ANSI, каждый символ которого занимает 1 байт, и Unicode, каждый символ которого занимает 2 байта. Первые 256 символов в этих множествах одинаковы и соответствуют символам ASCII от 0 до 255.
Тип ANSIChar, размер 1 байт, хранит один символ ANSI.
Тип WideChar, размер 2 байта, один символ Unicode.
Тип Char, размер 1 байт, хранит один символ. Сейчас эквивалентен ANSIChar . В будущих версиях Delphi, может быть, будет эквивалентен WideChar .
Родовым (т.е. обеспечивающим максимальную производительность) является тип Char . Именно тип Char имеет смысл использовать во всех случаях, кроме обращений к функциям, требующим другой тип символьных данных.
Для символьного типа предопределена функция Chr, возвращающая символ любого целого значения в пределах AnsiChar или WideChar. Например, Chr (65) возвращает букву "A". Поскольку символьные типы относятся к порядковым типам, для них предопределены такие функции и процедуры, как Ord, Pred, Succ, Inc, Dec и др. Функция Ord, возвращающая номер символа, противоположна по смыслу функции Chr . Т.е. Ord (Chr(65)) вернет 65, а Chr (Ord('A')) вернет символ "A".
Рассмотрим пример использования символов в приложении.
Он иллюстрирует, как необходимо объявлять и присваивать различные значения символьной переменной.
var
Tetta: Char;
Etta: Char;
begin
Tetta:='f';
Etta :='F';
end;
В программе объявлены две символьные переменные, Tetta и Etta. Переменной Tetta присвоено значение f. Переменной Etta присвоено значение F.
Тип данных строки.
Строки представляют собой последовательность символов. Ниже приведены значения типов строк.
Тип ShortString, максимальная длина 255, используется для обратной совместимости.
Тип AnsiString, максимальная длина 2 31 (2 Гб) символов ANSI .
Тип String, максимальная длина или 255, или до 2 Гб символов ANSI или Unicode .
Тип WideString, максимальная длина 2 30 (1 Гб) символов Unicode, используется в серверах COM и интерфейсах.
Родовым является тип String, который имеет разный смысл в зависимости от директивы компилятора $H. Если включена директива {$H+} (она включена по умолчанию), то String интерпретируется компилятором как тип AnsiString - длинная строка с нулевым символом в конце. Если же включить директиву {$H-}, то String интерпретируется компилятором как тип ShortString - короткая строка без нулевого символа в конце. Если в объявлении типа после ключевого слова String следует число символов в квадратных скобках (например, String[4]), то, независимо от директив компилятора, тип трактуется как строка без нулевого символа в конце с указанным числом символов.
Рассмотрим пример использования строк в приложении.
Когда вы объявляете переменную типа String, компилятор резервирует память достаточную для размещения в строке 255 символов. Однако вы можете определить длину вашей строки с целью сохранения памяти. Таким образом, вы должны внимательно подходить к определению длины строк и не резервировать большее количество памяти, чем это необходимо.
Пример иллюстрирует использование строк различной длины в операторах присваивания и выражениях.
var
SurName,
Name,
PatronymicName: String[15];
Buffer: String [45];
begin
SurName:='Skuratow';
Name :='Wladimir';
PatronymicName:='Petrowich';
Buffer:=Surname + Name + PatronymicName;
end;
Компонент Image.
Компонент Image предназначен для размещения на форме одного из поддерживаемых Delphi типов изображений: пиктограммы, растровой картинки или метафайла.
Данные изображения позволят украсить ваше приложение, например, иметь в приложении логотип вашей фирмы. Фотографии сотрудников могут заполнить базу данных вашего учреждения.
Поместите компонент Image со страницы Additional на форму. Центральное свойство этого компонента, которое может содержать изображение, — свойство Picture. Д ля того чтобы поместить изображение на форму, необходимо произвести двойной щелчок по компоненту Image или щелкнуть по кнопке с тремя точками справа от свойства Picture на странице Properties инспектора объекта. Откроется диалоговое окно Picture Editor, позволяющее загрузить в свойство Picture какой-нибудь графический файл. Для загрузки изображения щелкните по кнопке Load. Откроется диалоговое окно Load Picture (рисунок 1) . При перемещении по открытым графическим файлам в правом окне отображаются содержащиеся в них картинки, а над ним — цифры, характеризующие размер картинки (рисунок 2). Как видите, в Delphi 5 появилось удобное загрузочное окно, позволяющее предварительно просмотреть изображения картинок. Графические файлы в Delphi 4 расположены в каталоге Program Files \ Common Files \ Borland Shared. Графические файлы в Delphi 5 расположены в каталоге Program Files \ Common Files \ Borland \ Borland Shared. Можно использовать изображения из каталога Program Files \ Microsoft Office \ Clipart \ Popular.
Изображение после загрузки в ваше приложение сохраняется в нем. И у вас есть возможность поставлять ваше приложение без отдельно расположенного графического файла.
Вы можете создать рисунок самостоятельно, используя уже имеющиеся рисунки, например с использованием редактора Word . Редактор Word предлагает воспользоваться рисунками, которые уже созданы. Но просто вставленный рисунок может не удовлетворять вас по своему виду, цвету или по наличию или отсутствию отдельных элементов. Редактор Word предлагает вам преобразовывать рисунки к виду, которые могут быть очень далеки от их оригиналов, причем в лучшую сторону. Чтобы использовать имеющиеся рисунки, необходимо запустить текстовый редактор Word. В строке главного меню Microsoft Word выберите кнопку Вставка, щелкните по ней, из раскрывшегося меню выберите Рисунок и далее Картинки. Щелкните по команде Картинки. Раскроется диалоговое окно Microsoft Clip Gallery 3.0 (рисунок 3). Из предложенного раздела Графика выберите подраздел Хозяйство. Активизируйте, например, рисунок Часы и щелкните по кнопке Вставить. После этого рисунок Часы импортируется в ваш документ на место, указанное курсором (рисунок 4).
Ваше первое преобразование может быть сразу сведено, возможно, к уменьшению его размера. Произведите выделение рисунка: подведите курсор к значкам, выделяющим данный рисунок. И в момент превращения курсора в двойную стрелку, нажмите левую кнопку мыши и, изменяя положения мыши на коврике, измените размер вашего рисунка. На импортируемом рисунке часы показывают 7 часов 52 минуты, измените время, показываемое часами, на 9 часов. Измените положение часов в текстовом документе и цвет. Для этого подведите курсор к меню Microsoft Word, щелкните правой кнопкой мыши и из раскрывшегося меню выберите команду Рисование . Над панелью задач появится панель Рисование. Подведите маркер к рисунку Часы, и после того как он превратится в четырехстороннюю стрелку, щелкните кнопкой для выделения нашего рисунка. Не снимая выделения, нажмите кнопку Действия. В раскрывшемся меню выберите команду Разгруппировать. Данную процедуру повторите несколько раз, пока команда Разгруппировать не перестанет быть активной. Для данного рисунка необходимо 8 раз проделать данную процедуру, после чего рисунок будет разбит на отдельные составные части, с которыми вы и будете работать дальше.
После снятия выделения с элементов рисунка, для чего можно щелкнуть кнопкой в любой точке экрана, но не в области рисунка, выделите нужные отдельные элементы рисунка. Выделив элемент рисунка, дважды щелкните по нему, раскроется диалоговое окно, Формат объекта с предложением изменить цвет и тип линий элемента, изменить размер, положение и обтекание. Элементы, которые нам не нужны для дальнейшего использования, можно удалить.
Как видно из вновь полученного рисунка (рисунок 5), проведены изменения цветовой гаммы рисунка, изменен наклон часов, изменен цвет тени. А также устранена ошибка, так как на исходном рисунке, на часах цифра девять повторена два раза, удалено светлое пятно с изображения рисунка.
Возможно также преобразование рисунков, взятых из файлов. Для этого необходимо выйти на кнопку меню Microsoft Word, выбрать команду Рисунок и в раскрывшемся меню выбрать команду Из файла . Раскроется диалоговое окно Добавить рисунок с предложением выбрать папку с содержанием различных рисунков, которые можно преобразовывать способом, рассмотренным выше.
После преобразования рисунка произведите группирование отдельных элементов. Выделите созданный рисунок, скопируйте его в буфер обмена. Далее запустите графический редактор Paint, вставьте рисунок. Здесь можете произвести дополнительные преобразования, далее сохраните рисунок в выбранной папке с расширением . bmp.
Рассмотрим свойства компонента Image.
Если вы установите свойство AutoSize в True, то размер компонента Image будет автоматически подгоняться под размер помещенной картинки. Если свойство AutoSize установлено в False, то изображение может не поместиться в компонент, или наоборот, размер компонента может быть больше размера картинки.
Свойство Center указывает, нужно ли центрировать изображение в границах компонента. Игнорируется, если свойство AutoSize равно True или если свойство Stretch равно True и изображение не является пиктограммой (ICO).
Свойство Stretch позволяет подгонять не компонент под размер рисунка, а рисунок под размер компонента. Для этого установите свойство AutoSize в False, растяните или сожмите размер компонента Image и установите Stretch в True. Вы увидите, что рисунок займет всю площадь компонента, но здесь возможно искажение рисунка. Поэтому устанавливать размеры Image точно пропорционально размеру рисунка может иметь смысл только для изображений не подверженных искажениям (узоры, линии). Свойство Stretch не распространяется на пиктограммы, которые не изменяют своих размеров.
Свойство Transparent (прозрачность). Если свойство установлено в True, то изображение в Image становится прозрачным. Данное свойство можно использовать для наложения изображений друг на друга. Чтобы это увидеть, поместите два компонента Image на форму, загрузите в них картинки. Передвиньте компоненты друг на друга, установите для верхнего компонента Image свойство Transparent равное True. Вы увидите, верхняя картинка перестала заслонять нижнюю картинку (рисунок 6). Вы можете поэкспериментировать с данным свойством, возможно, получите оригинальные совмещенные изображения для вашего приложения.
Литература:
(c) компьютерная газета
Компьютерная газета. Статья была опубликована в номере 36 за 2001 год в рубрике программирование :: delphi