end.
Имеется возможность передавать в процедуру открытый массив разнотипных переменных. Такой параметр должен быть описан как array of const. Он может передаваться как по имени (т. е. по указателю на массив), так и по значению (т. е. делается его копия). Внутри процедуры элементы массива рассматриваются как записи типа TVarRec, описанные в модуле System, причем имеется поле типа VType, позволяющее идентифицировать тип фактического параметра.
Пример функции, возвращающей строковое значение переменного числа параметров, а заодно и демонстрирующей не слишком последовательную методику преобразования выражений разных типов в строку:
function AllToStr(const MyParameters:array of const):string;
const
BString:array[Boolean] of string=('False','True');
var
i:Integer;
S:String;
begin
Result:='';
for i:=Low(MyParameters)to High(MyParameters)do
with TVarRec(MyParameters[i])do
begin
case VType of
vtInteger: s:=IntToStr(VInteger);
vtBoolean: s:=Bstring(Vboolean);
vtChar: s:=VChar;
vtEXtended: s:=FloatToStr(VExtended^);
vtString: s:=vString^;
vtPointer: s:=IntToHex(Longint(VPointer),8);
vtPChar: s:=StrPas(VPChar);
vtObject: s:=vObject. ClassName;
vtClass: s:=vClass. ClassName;
end{/case};
Result:=Result+s;
end; {/with...do}
end{/AllToStr};
При вызове
AllToStr([1,'+2','=3,',1e6,'>',1.5e-10,'is',1e6>1.5e-10,'.'])
возвратит строковое значение
1+2=3,1E6>1.5E-10 is true.
4.17.7. Переменные типа variant.
Иногда удобно писать процедуры общего назначения, которые должны выглядеть одинаково для параметров с переменными разного типа. В этом случае целесообразно вместо нескольких процедур использовать одну с параметрами типа variant.
Для переменных типа variant действуют особые правила присваивания: переменной
aMyVar:Variant;
можно присваивать выражения любых типов независимо от текущего значения переменной:
begin
...
aMyVar:=1;
...
aMyVar:=true;
...
aMyVar:='SomeString';
...
end;
При присваивании строковой переменной (или участии в строковом выражении) переменная вариантного типа возвращает строку с соответствующим значением. В предыдущем примере это было бы '1','true' и 'SomeString', соответственно.
Приведение типов для других случаев описывать не будем. Информацию по этому вопросу можно найти в специальной документации среды Delphi.
Работа с переменными типа variant гораздо медленнее чем для обычных, т. к. проверки и приведения типов во время исполнения программы занимают много времени. Кроме того, жесткость диагностики для этого случая значительно снижена, что может привести к возникновению не отслеживаемых компилятором ошибок. Поэтому, по мере возможностей, лучше избегать применения переменных variant. Их целесообразно использовать только в случае вызова DLL (Dynamic Link Libraries), написанных на языке С, для обеспечения совместимости по типу с параметрами функции из этих библиотек.
5. Визуальное проектирование в среде Delphi.
Перед началом работы обычно надо настроить пути к библиотеке Delphi, а в Delphi 3.0 также установить пакеты. Это связано с тем, что Windows 95 (и, тем более, NT 4.0) имеет индивидуальные настройки для каждого пользователя. При установке Delphi все настройки выполняются автоматически, но только для Desktop того пользователя, который производил установку пакета. Помимо упомянутых настроек рекомендуется указать пути для директорий, в которых будут создаваться выходные и вспомогательные файлы.
5.8. Создание экранных форм. Инспектор объектов.
При входе в Delphi автоматически открывается проект "по умолчанию". Изначально это проект с пустой экранной формой, на которой пунктиром показана сетка, к которой идет привязка для выравнивания размеров и положений компонентов на форме. Для того, чтобы создать на форме новый компонент, надо "мышью" щелкнуть на соответствующем компоненте из палитры компонентов, а затем щелкнуть "мышью" на том месте экранной формы, где необходимо расположить компонент. Перетаскивание по форме компонента осуществляется либо "мышью" по технологии "хватай и тащи" (drag and drop), либо с помощью инспектора объектов путем задания значений свойств top и left (расстояний от верхнего и левого краев формы). Если во время проектирования вы случайно закрыли форму (нажали на "крестик" в правом верхнем углу формы), следует открыть project manager в опции view в меню Delphi. Менеджер покажет имена всех форм и модулей, имеющихся в проекте. Двойной щелчок на имени приведет к "всплыванию" наверх соответствующей формы или модуля.
5.9. Палитра компонентов.
Мы будем описывать только наиболее важные свойства и события для компонентов и перечислим только наиболее часто используемые компоненты из стандартных библиотек Delphi 3.0. Для Delphi 2.0 практически все далее сказанное также справедливо. Существенным отличием является более развитая справочная система в Delphi 3.0, позволяющая в режиме on-line получать практически всю необходимую информацию, что резко облегчает работу. Поэтому приводимые далее описания компонентов дают лишь общее знакомство с палитрой.
5.9.4. Метка (tLabel).
Этот компонент предназначен для показа в некотором месте формы статического или изменяющегося в процессе работы приложения текста. Свойство font позволяет выбирать тип, стиль, размер и цвет фонта, а height и width — задавать размеры отведенного под метку места. Свойство caption ("титр", "подпись под картинкой") позволяет вводить в инспекторе объектов (object inspector) или присваивать программно в процессе работы строку с текстом длинной до 255 символов. Свойство WordWrap дает возможность автопереноса текста на следующую строку при превышении шириной строки значения Width. Свойство AutoSize, напротив, вызывает автоматическое установление значения Width по длине строки.
Метка не может захватывать фокус, поэтому на нее невозможно установить курсор. В результате кусок текста на экране, созданный с помощью tLabel, невозможно выделить и скопировать в буфер обмена (clipboard), что бывает крайне неприятно для пользователей программ. Поэтому вместо tLabel рекомендуется использовать компонент tEdit в режиме запрета редактирования текста и с цветом, совпадающим с цветом формы.
5.9.5. Кнопка (tButton) и кнопка с картинкой (tBitButton).
Свойство caption задает надпись на кнопке, а событие onClick позволяет выполнить необходимые действия в случае нажатия кнопки. Компонент tBitButton (потомок tButton) дает возможность вывода на кнопке рядом с текстом картинки, имя картинки задается свойством Glyph ("наклейка"). Картинка должна быть в формате Bitmap. Существует возможность в одном. bmp-файле по очереди (слева направо) располагать до 6 картинок. Обычно используют 2 (для свойства enabled, установленного в true и false соответственно). При enabled=false текст на кнопке становится "пассивным" (более серым, чем обычно), и рисуется соответствующая картинка, которую также обычно изображают "более серой". Другие пары — для состояний кнопки "нажата/не нажата". Кнопку tBitButton можно использовать вместо tButton без всяких изменений, если не задавать имя картинки. Это дает дополнительные возможности: в tBitButton можно установить цвет текста на кнопке, а в tButton нельзя.
5.9.6. Однострочный пункт ввода-вывода и редактирования текста (tEdit).
Помимо своей обычной функции может служить полной заменой однострочной метке при соответствующих установках свойств (цвет фона как у компонента, на котором расположен пункт, enabled=false и т. д.). При enabled=true возможен захват фокуса пунктом. В этом случае при Readonly=true можно выделять и копировать в буфер выделенный текст, а при Readonly=false текст можно также редактировать. Свойство text позволяет возвращать или устанавливать строку текста для пункта. Свойство MaxLength позволяет устанавливать максимальную длину вводимого текста в пределах от 1 до 255 символов. Если MaxLength=0 (по умолчанию), это эквивалентно 255 (autosize). AutoSelect=true позволяет тексту в пункте автоматически становиться выделенным при входе в пункт.
5.9.7. Многострочный пункт ввода-вывода и редактирования текста (tMemo).
Аналогичен компоненту tEdit, но с произвольным количеством строк. Свойство Alignment задает режим выравнивания текста внутри компонента (по центру, левому или правому краю). Длина текста не должна превышать 64Kb. WordWarp задает режим переноса слов. ScrollBars позволяет показывать (или не показывать) внутри компонента линейки прокрутки по вертикали и горизонтали.
Вводимый/выводимый текст доступен либо как единый объект через свойство Text, либо через свойство Lines — как массив строк. Поскольку строки tMemo хранятся в объекте типа tStrings, к ним применимы все методы этого класса, например:
tMemo1.Lines. Add('эта строка добавляется в конец текста');
5.9.8. Выпадающий список (tComboBox).
Потомок tEdit. Выглядит так же, но имеет "стрелку вниз" справа от поля ввода-вывода текста. При нажатии на нее выпадает список строк, из которых можно выбрать нужную, которую обычно и показывают после этого в поле ввода-вывода. Доступ к выпадающим строкам идет через свойство Items, у которого, в свою очередь, есть свойство Strings. Доступ к видимому в "свернутом" состоянии тексту идет, как и в tEdit, через свойство Text. Добавление новой строки в список пунктов (Items) может производиться так:
ComboBox1.Items. Add('Добавленная строка');
5.9.9. Пункт независимого выбора (tCheckBox).
Это маленький квадратик с расположенной рядом меткой. У данного пункта может быть три состояния: Checked (отмечен), noChecked (не отмечен) и Grayed (затемнен, что обычно подразумевает, что он недоступен для изменения). В случае Checked в квадратике рисуется крестик или галочка, noChecked — квадратик пустой, Grayed — рисуется более темным фоном.
5.9.10. Пункты зависимого выбора — "радиокнопки" (tRadioButton).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |


