Word delphi тип данных
Библиотеки типов — это составные документы OLE, в которых содержится информация об объектах СОМ, элементах управления ActiveX и объектах автоматизации. Информация о типах включает перечисления, свойства и методы интерфейсов.
Библиотека типов предназначена для предоставления другим приложениям и средам программирования информации о составных объектах, которые в ней содержатся. В процессе разработки элементов управления ActiveX и объектов автоматизации Delphi сохраняет информацию о типах в файле с расширением TLB, который в качестве ресурса компонуется в модуль DLL или ЕХЕ.
В следующих разделах будут коротко описаны возможности редактора библиотек типов Delphi и типы, которые создаются для элементов управления ActiveX, форм ActiveForm, объектов автоматизации и т.п.
Редактор библиотек типов
Редактор библиотек типов Delphi используется для просмотра и редактирования библиотек типов. Основой интерфейса редактора является панель Object List (рис. 3.1), с помощью которой пользователь может изменять, добавлять и удалять элементы библиотеки типов. Элементами библиотек типов являются составные классы, свойства и методы интерфейсов и перечисления. Панель Object List представляет элементы в виде дерева объектов. В зависимости от типа элемента, выбранного в панели Object List, в правой части редактора библиотек типов появляются различные вкладки. Возможно, это будут вкладки Attributes, Members и Uses.
Для редактирования библиотеки типов текущего проекта выполните команду View/Type Library. Чтобы просмотреть библиотеку типов, не являющуюся частью проекта, выберите пункт меню File/Open. После этого в списка File of type выберите строку Type Library (*.tlb;*.dll;*.ocx;*.exe;*.olb), чтобы вывести все файлы, которые могут содержать информацию о типах.
Теперь более детально рассмотрим каждый элемент библиотеки типов. Начнем с информации о библиотеке.
Информация о библиотеке типов
Каждая библиотека типов включает раздел, описывающий саму библиотеку, — элемент библиотеки типов. Когда этот элемент выбран в панели Object List (см. рис. 3.1), в правой части экрана редактора библиотеки типов появляются две вкладки: Attributes и Uses. Два следующих раздела описывают назначение вкладок Attributes и Uses в элементе библиотеки типов.
Вкладка Attributes в описании библиотеки типов
Во вкладке Attributes (атрибуты) содержится общая информация и характеристики библиотеки типов. Показанные ниже атрибуты и флаги появляются в этой вкладке, когда в панели Object List выбран элемент библиотеки типов (см. рис. 3.1). В табл. 3.1 перечислены все атрибуты, а в табл. 3.2 — все флаги библиотеки типов.
-
Таблица 3.2. Флаги библиотеки типов
Флаг | Описание |
None | Флаги не установлены |
Restricted | Запрещает использовать библиотеку типов в средах программирования макросов, таких как Visual Basic |
Control | Указывает, что библиотека содержит элемент управления, который будет использован на стороне сервера для порождения новых библиотек типов и классов составных объектов (CoClass) |
Hidden | Указывает, что библиотека существует, но не должна быть показана в пользовательских броузерах |
Перечисления (Enum) в библиотеках типов
Перечисления в библиотеках типов практически не отличаются от перечислений языка Object Pascal. Перечисление в библиотеке типов — это коллекция связанных констант, используемая как тип данных во всех остальных элементах библиотеки для определения свойств или методов. Кроме того, в зависимости от среды программирования константы перечисления могут использоваться с объектом ActiveX внутри среды программирования. В следующих двух разделах рассматривается назначение вкладок Attributes и Members в описании перечислений.
Вкладка Attributes в описании перечисления
На рис. 3.2 показано перечисление (Enum), выбранное в окне редактора библиотек типов Delphi с вкладкой Attributes в правой части окна редактора. В табл. 3.3 перечислены все возможные атрибуты, которые можно использовать с перечислением.
Настоятельно рекомендуется указывать строку описания для членов перечисления, так как приложения, использующие ваш объект СОМ, могут зависеть от строк описания. На рис. 3.3 показана вкладка Members описания перечисления.
Рис. 3.3. Редактирование элементов перечисления в библиотеке типов
Элементы Interface и Displnterface в библиотеках типов
Интерфейс в библиотеке типов — это коллекция определении свойств и методов. Клиент может получить доступ к интерфейсам либо посредством таблицы виртуальных методов, либо с помощью специального интерфейса OLE I Dispatch, который позволяет использовать свойства и методы объектов через уникальный идентификатор или DispID. Элемент Displnterface определяет интерфейс, доступ к которому можно получить только через интерфейс IDispatch. Двойной интерфейс (dual interface) — это интерфейс, доступ к которому можно получить и через таблицу виртуальных методов, и через интерфейс IDispatch. В следующих двух разделах рассматривается назначение вкладок Attributes и Members в описании интерфейсов.
Вкладка Attributes в описании интерфейса
На рис. 3.4 показан интерфейс, выбранный в окне редактора библиотек типов, с вкладкой Attributes в правой части окна редактора. В табл. 3.4 перечислены все возможные атрибуты, которые можно использовать в описании интерфейса, а в табл. 3.5 — все флаги, используемые в описании интерфейса.
Таблица 3.5. Флаги интерфейсов в библиотеках типов
Флаг | Описание |
Displnterface | Элемент описывает методы и свойства объекта, доступ к которому можно получить только через метод Invoke интерфейса Idispatch |
Hidden | Указывает, что интерфейс существует, но не должен быть показан в пользовательских броузерах |
Nonextensible | Указывает, что реализация интерфейса IDispatch включает только те свойства и методы, которые показаны в описании интерфейса |
Dual | Указывает, что интерфейс предоставляет методы и свойства через интерфейс IDispatch и таблицу виртуальных методов |
OLE Automation | Указывает, что интерфейс может использовать только совместимые с автоматизацией типы данных. С элементом Displnterface этот флаг использовать нельзя, так как данный элемент совместим с автоматизацией по определению |
Вкладка Members в описании интерфейса
Вкладка Members в описании интерфейса содержит свойства интерфейса и методы, определенные в этом интерфейсе. За исключением незначительных отличий, синтаксис объявлений констант и методов совпадает с синтаксисом языка Object Pascal. Первое отличие проявляется в том, что после описания каждого свойства и метода должен следовать уникальным идентификатор или DispID. Обычно значения DispID начинаются с 1 и увеличиваются на 1 для каждого следующего элемента. Вторым отличием являются ключевые слова readonly и writeonly, которые позволяют запрещать запись и чтение свойств соответственно. Ниже показан пример определения методов и свойств.
property FrameCount: Integer; readonly; dispid 1;
property Play(FromFrame, ToFrame: Smallint; Count: Integer); dispid 2;
property OpenDatabase[DatabaseName, TableName, UserName, Password : WideString]: WordBool; dispid 3;
Последним является определение параметризованного свойства с разрешением только чтения. В примере это свойство использовано не только для демонстрации такого типа свойств, но и потому, что некоторые серверы ActiveX предпочитают использовать параметризованные свойства вместо методов. На рис. 3.5 показана вкладка Members описания интерфейса в редакторе библиотек типов Delphi.
Рис. 3.5. Редактирование членов интерфейса в библиотеке типов
Если для описания интерфейса используется инструкция Displnterface, то для определения методов и свойств интерфейса можно использовать только совместимые с автоматизацией OLE типы данных. Совместимыми с OLE являются следующие типы данных: Byte, Smallint, Integer, Single, Double, Currency, TDateTime, WideString, WordBool и OleVariant. Для передачи многомерных структур данных можно использовать массивы данных типа OleVariant.
Вкладка Attributes в описании свойств и методов интерфейса
На рис. 3.6 показано свойство интерфейса, выбранное в окне редактора библиотек типов, с вкладкой Attributes в правой части окна редактора. В табл. 3.6 перечислены все атрибуты, которые используются в определении членов интерфейса, а в табл. 3.7 — все возможные флаги.
Вкладка Attributes в описании классов составных объектов
В табл. 3.8 перечислены все атрибуты, а в табл. 3.9 — флаги, которые используются в описаниях составных классов.
Вкладка Members в описании составного класса
Во вкладке Members в описании составного класса можно добавлять и удалять интерфейсы и перечисления, которьк составляют класс СОМ. В рассматриваемой вкладке содержится следующая информация.
Теперь обсудим типы данных Delphi, которые программист использует при написании программы. Любая программа на Delphi может содержать данные многих типов:
- целые и дробные числа,
- символы,
- строки символов,
- логические величины.
Целый тип Delphi
Библиотека языка Delphi включает в себя 7 целых типов данных: Shortint, Smallint, Longint, Int64, Byte, Word, Longword, характеристики которых приведены в таблице ниже.
Вещественный тип Delphi
Кроме того, в поддержку языка Delphi входят 6 различных вещественных типов (Real68, Single, Double, Extended, Comp, Currency), которые отличаются друг от друга, прежде всего, по диапазону допустимых значений, по количеству значащих цифр, по количеству байт, которые необходимы для хранения некоторых данных в памяти ПК (характеристики вещественных типов приведены ниже). Также в состав библиотеки языка Delphi входит и наиболее универсальный вещественный тип — тип Real, эквивалентный Double.
Символьный тип Delphi
Кроме числовых типов, язык Delphi располагает двумя символьными типами:
Тип Ansichar — символы c кодировкой ANSI, им ставятся в соответствие числа от 0 до 255;
Тип Widechar — символы с кодировкой Unicode, им ставятся в соответствие числа от 0 до 65 535.
Строковый тип Delphi
Строковый тип в Delphi обозначается идентификатором string. В языке Delphi представлены три строковых типа:
Тип Shortstring — присущ статически размещаемым в памяти ПК строкам, длина которых изменяется в диапазоне от 0 до 255 символов;
Тип Longstring — этим типом обладают динамически размещаемые в памяти ПК строки с длиной, ограниченной лишь объемом свободной памяти;
Тип WideString — тип данных, использующийся для того, чтобы держать необходимую последовательность Интернациональный символов, подобно целым предложениям. Всякий символ строки, имеющей тип WideString, представляет собой Unicode-символ. В отличие от типа Shortstring, тип WideString является указателем, который ссылается на переменные.
Логический тип Delphi
Логический тип соответствует переменным, которые могут принять лишь одно из двух значений: true, false. В языке Delphi логические величины обладают типом Boolean. Вам были представлены основные типы данных Delphi. Движемся дальше.
Andrew Fionik
дата публикации 09-04-2004 15:57
урок из цикла: Азы Delphi.
Итак, в предыдущей лекции мы примерно представили что из себя представляют типы данных и какие они бывают. В этой лекции мы более подробно разберем встроенные в Delphi типы данных.
Pascal, Object Pascal а за ними и Delphi всегда являлись строго типизированными языками, а это очень важное и полезное свойство языка. Когда для переменных определен тип данных к которому они принадлежат, компилятор имеет возможность проверить правильность операций производимых над этими переменными на этапе компиляции. Таким образом, компилятором производится как-бы первичное тестирование вашего кода. Однако, будучи языком строго типизированным, Delphi имеет механизмы позволяющие программисту определить "свои правила игры" и проинструктировать компилятор чтобы тот трактовал переменные не так, как положено их трактовать согласно их типу, а так, как указывает программист. Такой подход чем-то напоминает электрическую мясорубку. Запихивайте туда мясо согласно инструкции и она благополучно выплюнет фарш из которого ваша мамочка, жена или подруга нажарит вкуснючих котлет. Но если снимете предохранительный кожух и неловко дернетесь, то фарш будет из ваших пальцев.
Целочисленные типы данных
Переменные целочисленных типов данных способны содержать целые значения. Все они принципиально отличаются только двумя параметрами - свойствами значений которые они могут содержать и размером памяти, занимаемым переменными. Третье свойство неявное и на первый взгляд незаметное - скорость работы с данными проистекающее из количества требуемой переменными памяти и внутреннего их формата, однако на этом мы не будем заострять особое внимание.
NB! Целочисленные типы данных наиболее примитивные и наиболее быстро и легко обрабатываемые процессором. Всегда, если вам нужно обрабатывать численную информацию, старайтесь хранить ее и обрабатывать в целочисленном виде.
Вся масса целочисленных типов разделяется на две части - знаковые и беззнаковые типы данных. Знаковые типы данных позволяют хранить значения со знаком, точнее со знаком "-", т.е. отрицательные значения. Беззнаковые типы данных всегда хранят только значения больше или равно нулю.
Общие целочисленные типы
Integer
Тип данных Integer общий (generic) знаковый тип. Если помните предыдущую лекцию, то там объяснялось что общие типы данных - платформозависимые. Так вот и Integer на разных платформах имеет разный диапазон значений и занимает разный объем памяти, соответствующий одному машинному слову. На 32-ух разрядных системах Integer может содержать содержать значения от -2147483648 до 2147483647. Почему именно такой диапазон? Все очень просто, это минимальное и максимальные значения которые можно выразить (закодировать) 32-мя бинарными разрядами.Далее, когда снова попадется общий тип данных, я буду указывать его параметры именно для 32-ух разрядных систем. Какими они были на старых системах не очень-то и интересно, а какими они будут сами догадаетесь, не маленькие уже.
Cardinal
Общий (чуете что это значит?) беззнаковый тип. Может содержать значения от 0 до 4294967295.
Фундаментальные целочисленные типы
У прочих встроенных типов данных нет каких-либо особенностей, поэтому ниже я дам просто сводную таблицу в которой будут описаны эти типы данных.
Сводная таблица типов
- Хранение целочисленных значений.
- Различные математические вычисления.
Вещественные типы данных
Переменные вещественных типов данных, как следует из их названия, могут хранить значения с десятичной запятой. Все вещественные типы делятся на типы с плавающей или фиксированной запятой.
NB! Тут следует обратить внимание на некоторые расхождения в терминологии. У нас считается что дробную часть от целой разделяет запятая. У "них" (америкосов) - точка. Соответственно по отношению к вещественным типам данных говорится floating point (плавающая точка) и fixed point (фиксированная точка). В частности в Delphi, для записи вещественных значений в тексте программы, используется именно точка а не запятая. Однако, внутренний формат записи вещественных чисел никак не относится к их представлению пред ясны очи пользователя у которого согласно давней доброй традиции целая часть от десятичной в его родной зимбабве может отделяться буквой "зю".
Для вещественных чисел с плавающей точкой данные хранятся в экспоненциальном формате. Т.е. хранятся мантисса и экспонента (не помню уже преподают это в школе или нет, но на всякий случай объясню). Например число 12345.6789 хранится в виде 1.23456789*10^4 (1.23456789 умножить на десять в степени 4). Мантисса это число 1.23456789 а экспонента это 4, то в какую степень возводится 10.
Вы спросите: "Что за тавтология!? Опять-же записываем десятичную дробь с помощью десятичной точки. Та же фигня только в профиль".
Отвечаю: "А компьютер про десятичную точку на самом деле ничего не знает, он просто хранит у себя 123456789 и 4 (упакованные конечно в бинарную форму, в один блок памяти фиксированного размера). И всегда считается что десятичная точка находится после первой цифры - в нашем случае между 1 и 2".
Из способа хранения вещественных данных с плавающей точкой следует один неприятный вывод. Поскольку количество памяти отведенное для хранения одного значения ограничено, то запомнить мы сможем мантиссу ограниченной длины, а значит точность наших вычислений ограничена количеством значащих цифр - длиной мантиссы.
Пример. Пусть количество значащих цифр 7. Тогда записывая число 987654321 мы сможем записать только 7 цифр из этого числа для представления его в компьютере. Таким образом записать наше число сможем только в приблизительном виде: 9.876543E+8. Все последующие операции с этим значением будут выполнятся уже как с 987654300 а не как с 987654321. Попробуем прибавить к такому числу 1 и получим не 987654322 и не 987654301 а все то-же 987654300 т.к. результат все равно не может быть выражен таким ограниченным количеством значащих цифр.
Второе следствие такого способа хранения вещественных значений - особенности совместного хранения таких значений. Предположим что у нас есть два типа данных, один из которых позволяет хранить 7 значащих цифр а второй 12. Присвоим переменным этих типов значение 123456789. Значение одной переменной будет 1.234567E8 а второй 1.23456789E8. Т.е. получается что значения в этих переменных уже не равны, хотя мы и присваивали им одно и то-же значение.
Ну и третье следствие хранения вещественных значений - сравнение таких значений. Предположим что двумя разными путями вычислялась одна и та-же величина. В одном случае получился результат 1.234 в другом 1.235. Равны ли эти результаты? Вы скажете "нет" и будете правы. Скажете "да" и будете тоже правы. Вопрос состоит в том какая "степень равенства" нас удовлетворяет чтобы признать эти числа равными. Для определения равенства двух вещественных значений обычно используется не собственно результат их сравнения, а соотношение между их разностью и Epsilon - неким достаточно маленьким числом. Т.е. считается что два числа равны если модуль их разности не превышает Epsilon который мы задаем изначально и значение которого мы признаем достаточным чтобы обеспечить приемлемую точность наших расчетов.
Пространство для хранения экспоненты тоже ограничено и обусловлено форматом хранения числа в памяти. Соответственно максимальные и минимальные значения экспоненты тоже ограничены. Исходя из этих двух ограничений на размеры мантиссы и экспоненты можно представить некую зависимость. При равном объеме памяти используемом для хранения вещественных чисел мы сможем либо хранить очень большие числа, но неточно, либо числа с высокой точностью, но с небольшими максимальными и минимальными значениями.
Четвертая особенность хранения вещественных значений - не все, казалось бы простые значения, могут быть помещены в вещественные переменные в точности в том же виде в котором они фигурировали в тексте программы. Не смотря на то что и значащих цифр хватает, и число попадает в допустимый диапазон. Например попробуем поместить число 0.3 в переменную типа Real. В процедуре WriteLn числа 21 и 20 указывают формат вывода заставляя печатать значение переменной A используя минимум 21 знак из которых 20 знаков после десятичной запятой. Вы удивитесь, но будет выведено не 0.300000. а 0.29999999999999999000. Очень близко к 0.3 но не 0.3. Т.е. число 0.3 (как и многие другие числа) на самом деле не удается представить точно в двоичной форме. Вы можете использовать значение переменной A в вычислениях, даже не замечая того что она содержит не 0.3, и ошибка вычислений будет минимальна. Если вы попытаетесь вывести пользователю значение переменной A, то пользователь скорее всего увидит именно 0.3 т.к. большинство методов с помощью которых выводится числовая информация для пользователя так или иначе при выводе делает округление до определенного количества цифр. Если вы попытаетесь сравнить это число с другим "по правильному", т.е. так, как описано в третьем следствии, то вы получите верный результат т.к. скорее всего ваш Epsilon будет что-то около 0.001 или 0.000001. Это значительно больше расхождения между числом 0.3 и его представлением в переменной типа Real которое мы наблюдаем. Казалось бы со всех сторон мы прикрыты, но помнить об этой особенности надо.
Намного более подробное объяснение всех этих тонкостей можно прочитать в статье: Неочевидные особенности вещественных чисел написанной Антоном Григорьевым.
Сводная таблица вещественных типов
Тип | Диапазон значений | Формат | Значащих цифр | Прочее |
Real | 5e-324..1.7e308 | знаковый, 8 байт | 15..16 | общий |
Real48 | 2.9e-39..1.7e38 | знаковый, 6 байт | 11..12 | фундаментальный |
Single | 1.5e-45..3.4e38 | знаковый, 4 байт | 7..8 | фундаментальный |
Double | 5e-324..1.7e308 | знаковый, 8 байт | 15..16 | фундаментальный, фактически эквивалентен Real |
Extended | 3.6e-4951..1.1e4932 | знаковый, 10 байт | 19..20 | фундаментальный |
Comp | -2^63+1..2^63-1 | знаковый, 8 байт | 19..20 | фундаментальный |
Currency | -922337203685477.5808..922337203685477.5807 | знаковый, 8 байт | 19..20 | фундаментальный, с фиксированной точкой |
Примечания по поводу разных типов данных
Real48
Устаревший тип данных, оставленный только для совместимости. Например, возможно, вам потребуется прочитать какие-нибудь данные из старых файлов созданных очень давно, когда 6-ти байтовый вещественный тип был широко распространен.
Extended
Предоставляет большую точность, однако менее переносим на другие платформы. Нужно быть осторожным и стараться не использовать его для записи в файлы которые могут быть потом использованы на других платформах.
Примечание:
Честно говоря эту фразу я сдул прямо из борладновского хелпа, слабо понимая что она значит и почему все именно так а не иначе. :-)
Устаревший тип данных. В действительности хранится как 64-ех битное целое число, однако трактуется как вещественное т.к. к нему неприменимы операции которые обычно могут быть выполнены над целыми числами. Например получение следующего или предыдущего значений. Вместо него где только возможно нужно использовать Int64.
Currency
Фиксированная десятичная точка. В действительности хранится как 64-ех разрядное целое число с четырьмя наименее значимыми цифрами неявно считающимися дробной частью. Используется для выражения денежных величин. Финансовые вычисления с точностью до 4-ех знаков после десятичной точки - общепринятая мировая практика позволяющая снизить ошибки при расчетах.
Резюме про вещественные типы данных
Из всего этого словоизвержения про мантиссы, экспоненты, количество значащих цифр, особенности типов вы должны были сделать вывод. А вывод такой: "Для математических вычислений следует выбирать типы данных согласуя характер расчетов с возможностями и особенностями имеющихся типов данных. Неверный выбор в конечном счете может существенно повлиять на результаты расчетовю. Если они у вас вообще будут."
Арифметические операции
- Сложение "+"
- Вычитание "-"
- Умножение "*"
- Деление "/"
- Деление нацело "div"
- Остаток от деления нацело "mod"
- 4+5 - сложение двух констант 4 и 5
- A*9/C - значение в переменной (или константе) по имени A умножить на девять и результат разделить на значение находящееся в переменной (или константе) по имени C.
- Z div 10+1 - разделить значение Z на десять нацело и прибавить к результату 1
Приоритет операций
- Порядок вычисления для операций с равным приоритетом - слева направо.
- Умножение и деление имеют равный но больший приоритет (вычисляются раньше) чем сложение и вычитание, которые в свою очередь имеют тоже равный приоритет. Приоритет деления нацело и взятия остатка от деления равны приоритету умножения и вычитания.
- При необходимости приоритет может быть изменен с помощью расстановки круглых скобок.
- A+B-C/6*25 выполняется в следующей последовательности A+B, C/6, C/6*25, A+B-C/6*25.
- (A+(B-C)/6)*25 Тут последовательность была изменена скобками: B-C, (B-C)/6, A+(B-C)/6, (A+(B-C)/6)*25.
Оператор присваивания
Хотя оператор присваивания переменной какого-нибудь значения имеет достаточно широкий смысл, однако в случае математики оператор присваивания позволяет сохранять результаты вычислений внутри переменных. Формат оператора присваивания: . где Переменная - идентификатор объявленной переменной а Выражение одно из вышеупомянутых математических выражений.
- B:=A/Z; - переменной B присваивается результат деления значения переменной A на значение переменной Z.
- D:=(A+(B-C)/6)*25; - переменной D присваивается результат вычисления выражения (A+(B-C)/6)*25.
Примечание:
Была у меня когда-то японская книжка, автор которой исходил из главной идеи что программированию будут учиться полные дауны. Там вся эта математика разжевывалась так что не понять было невозможно. Со схемами и сценками из жизни японцев. Жаль не сохранилась, мне очень помогла. :-)
Совместимость типов данных
Рассмотрим простейший пример программы в котором проявляется проблема совместимости типов данных. Что мы здесь видим? Во первых, вещественной переменной B присваивается целочисленное значение 47 являющееся результатом сложения двух целочисленных констант 15 и 32. Т.е. здесь мы можем наблюдать неявное преобразование типа выражения 15+32 из целочисленного в вещественный, так чтобы вещественное значение 47.0 можно было разместить в вещественной переменной B. Во вторых, мы наблюдаем попытку присвоить целочисленной переменной A вещественный результат вычисления выражения B/3. Если первый оператор присваивания не вызовет возражений со стороны компилятора, то на второй оператор будет выдана ошибка компиляции.
Рассмотрим второй пример программы. Здесь мы наблюдаем попытку присвоения переменной B значения которое выходит за допустимый диапазон значений для типа данных Real. Этот код так-же вызовет ошибку.
Отсюда правило. Для успешного выполнения присваивания нужно чтобы типы переменной и выражения учавствующие в операторе присваивания были совместимы как в плане преобразования значений из целого в вещественное, так и в плане соответствия значения допустимому диапазону для переменной в которую это значение хотят поместить. Для правильного написания присваивания результатов математических выражений переменным нужно представлять себе какой тип данных будет у результата этого выражения. При вычислении выражений Delphi всегда выбирает такой тип данных, который является общим для всех операндов учавствующих в выражении.
- A+5 - тип результата Integer
- A+B - тип результата Real
- A+B*C - тип результата Extended
- B/A - тут казалось бы достаточно типа Real, но в действительности для Delphi тип результата деления Extended всегда
В случае с присвоением результатов значений надо заметить что вещественные и целочисленные типы данных неявно совместимы внутри самих себя. Попытка присвоить переменной типа Byte значение переменной типа Integer будет синтаксически верной, т.е. не вызовет ошибки компиляции. Ведь может быть в переменной типа Integer лежит значение 5, которое вполне подходит как для Byte так и для Integer. Однако в этом случае компилятор вставляет машинный код который контролирует значение присваиваемое переменной типа Byte. Если это окажется значение не попадающее в диапазон 0..255, (диапазон допустимых значений для Byte) то во время выполнения программы случится ошибка. То-же самое относится и к вещественным типам данных.
Смотрите также материалы по темам: [Типы данных]
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.
0 - 4 294 967 295
32 бита, беззнаковый
Object Pascal поддерживает и наиболее универсальный целый тип - Integer, который Эквивалентен Longint.
Вещественный тип
Язык Delphi поддерживает шесть вещественных типов: Reai48, single, Double, Extended, comp, Currency. Типы различаются между собой диапазо-ном допустимых значений, количеством значащих цифр и количеством байтов, необходимых для хранения данных в памяти компьютера (табл. 1.2).
Таблица 1.2. Вещественные (дробные) типы
Значащих цифр
2.9x 10 -39 -1.7x10 38
1.5 x 10 -45 -3.4х 10 38
5.0x10- 324 -1.7x10 308
3.6x10- 4951 -1.1 х10 4932
-922 337 203 685 477.5808 --922 337 203 685 477.5807
Язык Delphi поддерживает и наиболее универсальный вещественный тип - Real, который э квивалентен Double.
Символьный тип
Язык Delphi поддерживает два символьных типа: Ansichar и Widechar:
- тип Ansichar — это символы в кодировке ANSI, которым соответствуют числа в диапазоне от 0 до 255;
- тип widechar — это символы в кодировке Unicode, им соответствуют числа от 0 до 65 535.
Object Pascal поддерживает и наиболее универсальный символьный тип - Char, который эквивалентен Ansichar.
Строковый тип
Язык Delphi поддерживает три строковых типа: shortstring, Longstring
- WideString:
- тип shortstring представляет собой статически размещаемые в памяти компьютера строки длиной от 0 до 255 символов;
- тип Longstring представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти;
- тип WideString представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти. Каждый символ строки типа WideString является Unicode-символом.
В языке Delphi для обозначения строкового типа допускается использование идентификатора string. Тип string эквивалентен типу shortstring.
Логический тип
Логическая величина может принимать одно из двух значений True (истина) или False (ложь). В языке Delphi логические величины относят к типу Boolean.
Переменная — это область памяти, в которой находятся данные, которыми оперирует программа. Когда программа манипулирует с данными, она, фактически, оперирует содержимым ячеек памяти, т. е. переменными.
Чтобы программа могла обратиться к переменной (области памяти), например, для того, чтобы получить исходные данные для расчета по формуле или сохранить результат, переменная должна иметь имя. Имя переменной придумывает программист.
В качестве имени переменной можно использовать последовательность из букв латинского алфавита, цифр и некоторых специальных символов. Первым символом в имени переменной должна быть буква. Пробел в имени переменной использовать нельзя.
Следует обратить внимание на то, что компилятор языка Delphi не различает прописные и строчные буквы в именах переменных, поэтому имена SUMMA, Summa и summa обозначают одну и ту же переменную.
Желательно, чтобы имя переменной было логически связано с ее назначением. Например, переменным, предназначенным для хранения коэффициентов и корней квадратного уравнения, которое в общем виде традиционно записывают
вполне логично присвоить имена а, b, с, x1 и х2. Другой пример. Если в программе есть переменные, предназначенные для хранения суммы покупки и величины скидки, то этим переменным можно присвоить имена
TotalSumm и Discount или ObSumma и Skidka.
В языке Delphi каждая переменная перед использованием должна быть объявлена. С помощью объявления устанавливается не только факт существования переменной, но и задается ее тип, чем указывается и диапазон допустимых значений.
В общем виде инструкция объявления переменной выглядит так:
- имя — имя переменной;
- тип — тип данных, для хранения которых предназначена переменная.
а : Real; b : Real; i : Integer;
В приведенных примерах объявлены две переменные типа real и одна переменная типа integer.
В тексте программы объявление каждой переменной, как правило, помещают на отдельной строке.
Если в программе имеется несколько переменных, относящихся к одному типу, то имена этих переменных можно перечислить в одной строке через запятую, а тип переменных указать после имени последней переменной через двоеточие, например:
а,b,с : Real; x1,x2 : Real;
В языке Delphi существует два вида констант: обычные и именованные.
Обычная константа — это целое или дробное число, строка символов или отдельный символ, логическое значение.
Числовые константы
В тексте программы числовые константы записываются обычным образом, т. е. так же, как числа, например, при решении математических задач. При записи дробных чисел для разделения целой и дробных частей используется точка. Если константа отрицательная, то непосредственно перед первой цифрой ставится знак "минус".
Ниже приведены примеры числовых констант:
Дробные константы могут изображаться в виде числа с плавающей точкой. Представление в виде числа с плавающей точкой основано на том, что любое число может быть записано в алгебраической форме как произведение числа, меньшего 10, которое называется мантиссой, и степени десятки, именуемой порядком.
В табл. 1.3 приведены примеры чисел, записанных в обычной форме, в алгебраической форме и форме с плавающей точкой.
В этой статье мы рассмотрим пример того, как управлять объектами Word-а (Excel - аналогично) из программ на Delphi.
Для чего это нужно ?
Задачи могут быть самые разные, в общем случае это использование возможностей Word-а в своей программе, н-р: проверка текста на орфографию; печать текста, графики; экспорт отчетов в Word или изначальное создание их там и т.д.
Подготовительные работы.
На самом деле существует несколько способов сделать это, мы рассмотрим только один (пример кроме Delphi 5, в Delphi5 для этого есть компоненты на закладке Servers переименуете в программе типы на соответствующие компоненты, дальше так же).
Для начала начнем новый проект File, New Application; File, Save All. Создадим отдельную папку для проекта и сохраним Unit1 как Main, а Project1 как WordWriter.
Далее для работы с Word-ом нам потребуется библиотека типов Word-а, это делается так: Project, Import Type Library, Add, далее переходим в папку, где стоит Word ( у меня это - "c:\program files\microsoft office) , заходим в папку Office и выбираем файл - msword8.olb (цифра -? версии Word-а - у Вас может отличаться ) или excel8.olb (для Excel).Нажимаем Оk. Delphi создаст 2 файла - Word_tlb.pas и Office_tlb.pas, их надо включить в раздел uses модуля Main нашего проекта:
Теперь займемся непосредственно программированием.
В разделе var опишем следующие переменные:
Далее проектируем форму:
- Поместим вверх нашей формы кнопку - button1 типа tbutton, поменяем заголовок (св-во Caption) на 'Старт'.
- Под кнопкой разместим панель - panel1 типа tpanel. Внутри панели поместим компонент - bevel1 типа tbevel, поменяем св-во Align на alClient (при этом рамка растянется на всю панель).
- Сверху панели (далее все компоненты будут размещаться внутри этой панели) разместим метку - label1 типа tlabel, поменяем значение св-ва Caption на 'Передать в ячейку':
- Ниже слева поместим метку - label1 типа tlabel, св-во Caption поменяем на 'X='
- Правее метки помещаем компонент Edit1 типа tEdit, св-во Text меняем на '1'
- По правой границе Edit1 помещаем компонент UpDown1 типа tUpDown, в списке св-ва 'Associate' выбираем Edit1, св-во 'Position' приравниваем '1'
- Чуть отступаем вправо и повторяем шаги 4-6 , заменив Edit1 на Edit2, UpDown1 на UpDown2, Label1 на Label2 соответственно.
- Ниже размещаем еще одну метку - label4 типа tlabel, меняем св-во 'Caption' на 'Новое значение ячейки:'
- Ниже размещаем компонент Edit3 типа tEdit, св-во Text меняем на '0'
- И, наконец, в самом низу панели размещаем кнопку BitBtn1 типа tBitBtn, меняем св-во 'Kind' на 'bkOk'.
Теперь напашем обработчики - именно в них и заключается вся функциональность программы:
1. Назначим обработчик OnClick компоненту Button1 :
2. Зададим обработчик формы:
3. Назначим обработчик OnClick компоненту Bitbtn1 :
Дополнительная информация
Справка Word-а (по Visual Basic, по умолчанию она не ставится - запустите заново Setup и поставте в соотв. месте галочку)
- Чарльз Калверт "Delphi 4. Энциклопедия пользователя" (издательство - DiaSoft)
- Марко Кэнту "Delphi4 для профессионалов" (издательство - Питер)
Если у Вас другая версия Word-а:
Параметры ф-ций могут отличаться - обратитесь к справке (см выше) или если у Вас версия Delphi 3 и выше, то используем универсальный метод - пишешь имя объекта, ставишь точку (если нужно посмотреть список параметров у функции , то после открывающей скобки ) , нажимаешь 'ctrl'+'пробел' и изучаешь существующие методы и св-ва.
Читайте также: