DegToRad — Функция Delphi


DegToRad — Функция Delphi

Мастера ,почему когда я подключаю модуль Math и хочу вычислить ,предположим Sin(RadToDeg(90)) мне выдаётся совсем не тот ответ?
Или пишу Sin(pi*x/180) (а также другие функции) ,то подставив x, не всегда получаю правильный ответ (в частности если должны получиться 1 или 0) ?
Зарание Благодарен!

я математику уже както подзабыл но помоему деграды ето несколько не градусы для градусов используй другую функцию
а точно 1 или 0 неполучается из за погрешности вычисления округляй до нескольких знаков до запятой например до 10 (если конечно нужна такая точность)

>AleksandrKu
Да, подзабыл ты.

DegToRad
Deg — degrees с английского градусы

прошу конечно прощения 5 лет всетаки
но ошибки все равно при расчетах или переводе из 2 в 10 систему иногда пример деления 6/2 невсегда получается 3!! (пример может быть конечно неочень корректный но случаи такие бывали) так что лучше округлять до определенного числа знаков

AleksandrKu (25.04.03 16:37)
И не должно для плавающий запятой, для фиксированной и целых все в порядке.

Беглый обзор модуля IOUtils.pas. Часть 1: работа с директориями в Delphi 2010.

С выходом версии 2010 в Delphi появился ещё один модуль — IOUtils.pas облегчающий работу с файлами и директориями. Признаться я просто катострофически не люблю работу с файлами в Delphi. Незнаю почему, но всегда напрягало реализовывать поиск по маске, чтение атрибутов и т.д. и т.п. Может из-за этого и решил рассмотреть, что же такого нового и облегчающего мою жизнь приготовили разработчики из Embarcadero.

Вначале обратимся к официальной Wiki Embarcadero и посмотрим, что там пишут про IOUtils:

…IOUtils contains three static classes: TDirectory, TPath and TFile. These classes expose a number of static methods useful for I/O tasks. …

Отлично. Всего три класса, содержащие ряд классовых методов. Начнем по порядку — с TDirectory.

DegToRad Routine

Description

(Please provide a description in your own words. It is illegal to use the wording from the Delphi Help.)

Technical Comments

(Known issues / Documentation clarifications / Things to be aware of)

Examples

(Please provide links to articles/source code that show how to use this item.)

See Also

(Please provide links to items specifically related to this item.)

User Comments/Tips

(Please leave your name with your comment.)

FAQ — Сводка функций модуля Math

Сводка функций модуля Math

Здесь я привожу полный список всех функций и процедур модуля Math. При переходе от Delphi 2 к Delphi 3 модуль Math почти не изменился, фирма Borland ввела в него только три новые функции: MaxIntVal ue, MInIntValue и Sumint. Эти функции отличаются от своих прототипов (MaxValue, MI nVal ue и Sum) лишь тем, что работают исключительно с целыми числами, не принимая и не возвращая величин с плавающей точкой. Что касается остальных функций, то большинство из них вполне очевидно. Если вам покажется иначе — что ж, садитесь за исследования. И не надейтесь, что все тайны Delphi достанутся вам на блюдечке в виде help-файла!

Тригонометрические функции и процедуры

  • ArcCos — Арккосинус
  • ArcCosh — Пиперболический арккосинус
  • ArcSIn — Арксинус
  • ArcSInh — Гиперболический арксинус
  • ArcTahn — Гиперболический арктангенс
  • ArcTan2 — Арктангенс с учетом квадранта (функция ArcTan, не учитывающая квадрант, находится в модуле System)
  • Cosh — Гиперболический косинус
  • Cotan — Котангенс
  • CycleToRad — Преобразование циклов в радианы
  • DegToRad — Преобразование градусов в радианы
  • GradToRad — Преобразование градов в радианы
  • Hypot — Вычисление гипотенузы прямоугольного треугольника по длинам катетов
  • RadToCycle — Преобразование радианов в циклы
  • RadToDeg — Преобразование радианов в градусы
  • RacIToGrad — Преобразование радианов в грады
  • SinCos — Вычисление синуса и косинуса угла. Как и в случае SumAndSquares и MeanAndStdDev, одновременная генерация обеих величин происходит быстрее
  • Sinh — Гиперболический синус
  • Tan — Тангенс
  • Tanh — Гиперболический тангенс

Math — математика, статистика, финансы. Краткий справочник по функциям в Delphi

Тригонгометрические функции:

function ArcCos(X: Extended): Extended;
function ArcSin(X: Extended): Extended;
function ArcTan2(Y, X: Extended): Extended; Арктангенс X/Y возвращает угол в квадранте
procedure SinCos(Theta: Extended; var Sin, Cos: Extended) register; возвращает сразу и синус и косинус, вычисления в 2 раза быстрее чем Sin, Cos по отдельности
function Tan(X: Extended): Extended;
function Cotan(X: Extended): Extended;
function Hypot(X, Y: Extended): Extended; Возвращает значение гипотенузы по катетам

Конвертация углов

function DegToRad(Degrees: Extended): Extended;
function RadToDeg(Radians: Extended): Extended;
function GradToRad(Grads: Extended): Extended;
function RadToGrad(Radians: Extended): Extended;
function CycleToRad(Cycles: Extended): Extended;
function RadToCycle(Radians: Extended): Extended;

function Cosh(X: Extended): Extended;
function Sinh(X: Extended): Extended;
function Tanh(X: Extended): Extended;
function ArcCosh(X: Extended): Extended;
function ArcSinh(X: Extended): Extended;
function ArcTanh(X: Extended): Extended;

Логарифмы, экспоненты и возведение в степень

function LnXP1(X: Extended): Extended; — натуральный логариф x+1 (для более высокой точности при x близких к нулю)
function Log10(X: Extended): Extended; — десятичный логарифм
function Log2(X: Extended): Extended; — логарифм по основанию 2
function LogN(Base, X: Extended): Extended; — логарифм по произвольному основанию
function IntPower(Base: Extended; Exponent: Integer): Extended register;
function Power(Base, Exponent: Extended): Extended;

procedure Frexp(X: Extended; var Mantissa: Extended; var Exponent: Integer) register; — возвращает мантису и экспоненту
function Ldexp(X: Extended; P: Integer): Extended register; — возвращает X*2**P
function Ceil(X: Extended):Integer; — округляет до ближайшего большего целого
function Floor(X: Extended): Integer; — округляет до ближайшего меньшего целого
function Poly(X: Extended; const Coefficients: array of Double): Extended; вычисление полинома

Статистические функции

function Mean(const Data: array of Double): Extended; среднее арифметическое
function Sum(const Data: array of Double): Extended register; сумма ряда
function SumInt(const Data: array of Integer): Integer register; сумма ряда целых чисел
function SumOfSquares(const Data: array of Double): Extended; сумма квадратов
procedure SumsAndSquares(const Data: array of Double; var Sum, SumOfSquares: Extended) register; сумма и сумма квадратов одной функцией
function MinValue(const Data: array of Double): Double; минимальное значение в ряду
function MinIntValue(const Data: array of Integer): Integer; минимальное значение в ряду целых
function Min(A,B) минимальное значение из 2х чисел (overload функции для Integer, Int64, Single, Double, Extended)
function MaxValue(const Data: array of Double): Double;
function MaxIntValue(const Data: array of Integer): Integer;
function Max(A,B);
function StdDev(const Data: array of Double): Extended; стандартное отклонение
procedure MeanAndStdDev(const Data: array of Double; var Mean, StdDev: Extended); — среднее арифметическое и стандартное отклонение
function PopnStdDev(const Data: array of Double): Extended; распределение стандартного отклонения (Population Standard Deviation)
function Variance(const Data: array of Double): Extended;
function PopnVariance(const Data: array of Double): Extended; (Population Variance)
function TotalVariance(const Data: array of Double): Extended;
function Norm(const Data: array of Double): Extended; среднее квадратичное (Sqrt(SumOfSquares))
procedure MomentSkewKurtosis(const Data: array of Double;
var M1, M2, M3, M4, Skew, Kurtosis: Extended); основные статистические моменты
function RandG(Mean, StdDev: Extended): Extended; — случайные числа с Гауссовским распределением

function DoubleDecliningBalance(Cost, Salvage: Extended; Life, Period: Integer): Extended;
function FutureValue(Rate: Extended; NPeriods: Integer; Payment, PresentValue: Extended; PaymentTime: TPaymentTime): Extended;
function InterestPayment(Rate: Extended; Period, NPeriods: Integer; PresentValue,
FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function InterestRate(NPeriods: Integer;
Payment, PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function InternalRateOfReturn(Guess: Extended;
const CashFlows: array of Double): Extended;
function NumberOfPeriods(Rate, Payment, PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime): Extended;
function NetPresentValue(Rate: Extended; const CashFlows: array of Double;
PaymentTime: TPaymentTime): Extended;
function Payment(Rate: Extended; NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function PeriodPayment(Rate: Extended; Period, NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function PresentValue(Rate: Extended; NPeriods: Integer;
Payment, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function SLNDepreciation(Cost, Salvage: Extended; Life: Integer): Extended;
function SYDDepreciation(Cost, Salvage: Extended; Life, Period: Integer): Extended;

Функции Delphi

Стандартные функции Delphi:

Для проведения всевозможных математических вычислений и многочисленных преобразований язык программирования Delphi содержит библиотеки стандартных процедур и функций. Давайте подробнее рассмотрим стандартные функции Delphi.

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

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

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

Математические функции Delphi:

Библиотеки языка Delphi включаются в себя и множество математических функций:

Величину угла при использовании тригонометрических функций необходимо выражать в радианах. Чтобы преобразовать угол из градусов в радианы, используйте следующую формулу:

где a выражает угол в градусах; 3.1415926 означает число pi. На месте константы 3.1415926 с дробной частью для достижения большей точности чаще всего пользуются стандартной именованной константой pi. Тогда выражения для угла в пересчете в радианы будет выглядеть следующим образом:

Функции преобразования Delphi:

Наиболее частое использование функций преобразования связано с инструкциями, которые обеспечивают ввод/вывод какой-либо информации. Например, для вывода значения переменной c типом real в поле вывода диалогового окна (компонент Label), нужно провести преобразование числа в строку символов, которая собственно изображает данное число. Это можно достичь, применяя функцию FloatToStr, которая заменяет значение выражения (оно указано как параметр функции) его строковым представлением.

Пример.

В приведенном примере значение переменной m будете выведено в поле Label. В таблице ниже Вам будут представлены основные функции преобразования Delphi:

Применение функций Delphi:

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

Примеры.

Структура функции Delphi

Как организована инструкция функции в языке Delphi? В любом языке программирования на первом этапе описания функции указывается ее заголовок. Далее за заголовком программист описывает раздел объявления констант const (если таковы имеются), затем занимается описанием раздела объявления типов type, далее следует раздел объявления переменных var и, наконец, раздел инструкций.

В приведенном примере в заголовке функции вначале указывается зарезервированное слово function, а следом идет имя функции. Далее в скобках программист перечисляет список параметров, и вслед за ним, используя символ «:», указывает тип значения функции. В конце каждого заголовка стоит символ «;». После заголовка следуют раздел констант, раздел типов, раздел переменных. Внутри раздела инструкций кроме констант и переменных, описанных соответственно в разделах const и var, может находится переменная result.

Когда инструкции функции завершат свое выполнение, значению переменной result присваивается значение функции. Таким образом, среди всех инструкций функций необходимое присутствие инструкции, которая бы присваивала переменной result окончательное значение функции. Обычно подобная инструкция есть последняя исполняемая инструкция функции. Представим пример функции FuntToKg, преобразующей фунты в килограммы.

DegToRad — Функция Delphi

Раздел: Язык Программирования Delphi

Подраздел: RTL Delphi (краткий справочник)

Вот и подошел к концу раздел Язык Программирования Delphi . И по итогам голосования, хотя и немногочисленного, но почти единогласного, был выбран следующий раздел: Базы данных.

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

Внимание: обновлен список возможных разделов!

О чем будет следующий раздел — решать вам.

Системные функции и Winapi

Работа с файловой системой

Репортинг , работа с принтером

Работа с сетью, Интернетом, протоколами

Работа с графикой, мультимедиа

Форматы файлов, данных. Конвертация форматов
ActiveX, COM, DCOM, MIDAS, CORBA, интерфейсы, OLE, DDE
Разработка приложений
Kylix

Ваши предложения высылайте на

Math — математика, статистика, финансы
Арифметика
Тригонометрические функции и процедуры
Функции и процедуры для финансовых вычислени
TList
TStrings и TStringList
TStream
TObject
TComponent
TPersistent
TControl
TWinControl
TCustomControl
TGraphicControl

Math — математика, статистика, финансы

Тригонгометрические функции:

function ArcCos(X: Extended): Extended;
function ArcSin(X: Extended): Extended;
function ArcTan2(Y, X: Extended): Extended; Арктангенс X/Y возвращает угол в квадранте
procedure SinCos(Theta: Extended; var Sin, Cos: Extended) register; возвращает сразу и синус и косинус, вычисления в 2 раза быстрее чем Sin, Cos по отдельности
function Tan(X: Extended): Extended;
function Cotan(X: Extended): Extended;
function Hypot(X, Y: Extended): Extended; Возвращает значение гипотенузы по катетам

Конвертация углов

function DegToRad(Degrees: Extended): Extended;
function RadToDeg(Radians: Extended): Extended;
function GradToRad(Grads: Extended): Extended;
function RadToGrad(Radians: Extended): Extended;
function CycleToRad(Cycles: Extended): Extended;
function RadToCycle(Radians: Extended): Extended;

function Cosh(X: Extended): Extended;
function Sinh(X: Extended): Extended;
function Tanh(X: Extended): Extended;
function ArcCosh(X: Extended): Extended;
function ArcSinh(X: Extended): Extended;
function ArcTanh(X: Extended): Extended;

Логарифмы, экспоненты и возведение в степень

function LnXP1(X: Extended): Extended; — натуральный логариф x+1 (для более высокой точности при x близких к нулю)
function Log10(X: Extended): Extended; — десятичный логарифм
function Log2(X: Extended): Extended; — логарифм по основанию 2
function LogN(Base, X: Extended): Extended; — логарифм по произвольному основанию
function IntPower(Base: Extended; Exponent: Integer): Extended register;
function Power(Base, Exponent: Extended): Extended;

Илон Маск рекомендует:  strtolower - Преобразует строку в нижний регистр

procedure Frexp(X: Extended; var Mantissa: Extended; var Exponent: Integer) register; — возвращает мантису и экспоненту
function Ldexp(X: Extended; P: Integer): Extended register; — возвращает X*2**P
function Ceil(X: Extended):Integer; — округляет до ближайшего большего целого
function Floor(X: Extended): Integer; — округляет до ближайшего меньшего целого
function Poly(X: Extended; const Coefficients: array of Double): Extended; вычисление полинома

Статистические функции

function Mean(const Data: array of Double): Extended; среднее арифметическое
function Sum(const Data: array of Double): Extended register; сумма ряда
function SumInt(const Data: array of Integer): Integer register; сумма ряда целых чисел
function SumOfSquares(const Data: array of Double): Extended; сумма квадратов
procedure SumsAndSquares(const Data: array of Double; var Sum, SumOfSquares: Extended) register; сумма и сумма квадратов одной функцией
function MinValue(const Data: array of Double): Double; минимальное значение в ряду
function MinIntValue(const Data: array of Integer): Integer; минимальное значение в ряду целых
function Min(A,B) минимальное значение из 2х чисел (overload функции для Integer, Int64, Single, Double, Extended)
function MaxValue(const Data: array of Double): Double;
function MaxIntValue(const Data: array of Integer): Integer;
function Max(A,B);
function StdDev(const Data: array of Double): Extended; стандартное отклонение
procedure MeanAndStdDev(const Data: array of Double; var Mean, StdDev: Extended); — среднее арифметическое и стандартное отклонение
function PopnStdDev(const Data: array of Double): Extended; распределение стандартного отклонения (Population Standard Deviation)
function Variance(const Data: array of Double): Extended;
function PopnVariance(const Data: array of Double): Extended; (Population Variance)
function TotalVariance(const Data: array of Double): Extended;
function Norm(const Data: array of Double): Extended; среднее квадратичное (Sqrt(SumOfSquares))
procedure MomentSkewKurtosis(const Data: array of Double;
var M1, M2, M3, M4, Skew, Kurtosis: Extended); основные статистические моменты
function RandG(Mean, StdDev: Extended): Extended; — случайные числа с Гауссовским распределением

function DoubleDecliningBalance(Cost, Salvage: Extended; Life, Period: Integer): Extended;
function FutureValue(Rate: Extended; NPeriods: Integer; Payment, PresentValue: Extended; PaymentTime: TPaymentTime): Extended;
function InterestPayment(Rate: Extended; Period, NPeriods: Integer; PresentValue,
FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function InterestRate(NPeriods: Integer;
Payment, PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function InternalRateOfReturn(Guess: Extended;
const CashFlows: array of Double): Extended;
function NumberOfPeriods(Rate, Payment, PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime): Extended;
function NetPresentValue(Rate: Extended; const CashFlows: array of Double;
PaymentTime: TPaymentTime): Extended;
function Payment(Rate: Extended; NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function PeriodPayment(Rate: Extended; Period, NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function PresentValue(Rate: Extended; NPeriods: Integer;
Payment, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function SLNDepreciation(Cost, Salvage: Extended; Life: Integer): Extended;
function SYDDepreciation(Cost, Salvage: Extended; Life, Period: Integer): Extended;

Арифметика

Abs Возвращает абсолютное значение аргумента.
Ceil Округляет значение аргумента в большую сторону.
Exp Вычисляет значение e x .
Floor Округляет значение аргумента в меньшую сторону.
Frac Возвращает дробную часть аргумента.
Frexp Возвращает мантиссу и экспоненту аргумента.
Int Возвращает целую часть аргумента.
IntPower Возводит аргумент X в целочисленную степень Y.
Ldexp Вычисляет X*2Y.
Ln Вычисляет натуральный логарифм ln(x).
LnXP1 Вычисляет натуральный логарифм ln(x+1).
Log10 Вычисляет десятичный логарифм.
Log2 Вычисляет логарифм аргумента по основанию 2.
LogN Вычисляет логарифм аргумента по основанию N.
Max Возвращает большее из двух чисел.
Min Возвращает меньшее из двух чисел.
Pi Возвращает значение числа Пи.
Poly Вычисляет однородный полином.
Power Возводит X в степень Y.
Round Округляет число к ближайшему целому.
Sqr Вычисляет квадрат аргумента Х.
Sqrt Вычисляет квадратный корень аргумента Х.
Trunc Отсекает дробную часть числа.

Тригонометрические функции и процедуры

ArcCos Вычисляет арккосинус аргумента.
ArcCosh Вычисляет гиперболический арккосинус аргумента.
ArcSin Вычисляет арксинус аргумента.
ArcSinh Вычисляет гиперболический арксинус аргумента.
ArcTan Вычисляет арктангенс аргумента.
ArcTan2 Вычисляет arctg(Y/X).
ArcTanh Вычисляет гиперболический арктангенс аргумента.
Cos Вычисляет косинус аргумента.
Cosh Вычисляет гиперболический косинус аргумента.
Cotan Вычисляет котангенс аргумента.
Hypot Вычисляет длину гипотенузы прямоугольного треугольника.
Sin Вычисляет синус аргумента.
SinCos Вычисляет одновременно синус и косинус аргумента.
Sinh Вычисляет гиперболический синус аргумента.
Tan Вычисляет тангенс аргумента.
Tanh Вычисляет гиперболический тангенс аргумента.

Преобразование тригонометрических единиц измерений

CycleToRad Преобразовывает значение аргумента из циклов в радианы.
DegToRad Преобразовывает значение аргумента из градусов в радианы.
GradToRad Преобразовывает значение аргумента из десятичных градусов (grad) в радианы.
RadToCycle Преобразовывает значение аргумента из радианов в циклы.
RadToDeg Преобразовывает значение аргумента из радианов в градусы.
RadToGrad Преобразовывает значение аргумента из радианов в десятичные градусы (grad).

Функции и процедуры для финансовых вычислений

DoubleDecliningBalance Вычисляет амортизационные отчисления на определенном этапе.
FutureValue Вычисляет значение вклада через определенный период времени.
InterestPayment Вычисляет процентную ставку кредита.
InterestRate Вычисляет процентную ставку инвестиций.
InternalRateOfReturn Вычисляет внутреннюю ставку дохода от инвестиций.
NetPresentValue Вычисляет текущее значение платежа, используя массив с расчетными значениями.
NumberOfPeriods Вычисляет количество этапов необходимое для погашения кредита.
Payment Вычисляет полную сумму погашения кредита на отдельном этапе.
PeriodPayment Вычисляет необходимую сумму выплат основной части (без процентов) кредита на определенном этапе.
PresentValue Определяет текущее значение вклада.
SLNDepreciation Вычисляет сумму амортизационных отчислений по методу равномерной амортизации.
SYDDepreciation Вычисляет сумму амортизационных отчислений по методу ускоренной амортизации.

TList

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

Приведем доступные ему методы и свойства класса:

property Items[Index: Integer]: Pointer; Возвращает указатель на содержимое элемента списка с индексом Index. Это свойство является векторным свойством, принимаемым по умолчанию, и его имя можно при записи опускать.

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

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

Управляют списком следующие методы:

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

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

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

procedure Delete(Index: Integer); Удаляет из списка элемент с индексом Index.

procedure Clear; Очищает список, устанавливая величины Count и Capacity в 0.

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

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

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

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

procedure Move(CurIndex, Newlndex: Integer) ; Перемещает элемент списка с положения Curlndex в положение Newlndex.

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

Наконец, если приведенных методов почему-либо недостаточно, то свойство
property List: pPointerList;
pPointerList = ^TPointerList;
TPointerList = array[0..65520 div SizeOf(Pointer)] of Pointer;
возвращает указатель непосредственно на список указателен ((ко) означает, что свойство доступно только для чтения).

TStrings и TStringList


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

К строкам и объектам соответственно можно получить доступ через свойства:

property Strings[Index: Integer]: string;

property Objects[Index: Integer]: TObject;

Первое из них является векторным свойством, принимаемым по умолчанию. Общее количество пар в списке равно значению свойства:

property Count: Integer;

Класс TStrings также предназначен для хранения пар вида ‘параметр=значение’, например, в файлах инициализации (.INI). Эту возможность реализует следующее свойство:

property Values[const Name: string]: string;

При обращении к этому свойству для чтения ищется строка, содержащая подстроку (параметр) Name и символ ‘=’. Если она найдена, возвращается то, что находится в этой строке после ‘=’. Если нет, ValuesfName] равно пустой строке. При записи: если строка, содержащая параметр Name, найдена — ее значение после ‘=’ заменяется новым значением, если нет — строка добавляется. Если существующему параметру присваивается пустая строка (Valu-es[Name] := «;), то он удаляется из набора строк.

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

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

procedure Clear; Осуществляет полную очистку набора.

procedure Insert(Index: Integer; const S: string); Вставляет строку S под индексом Index.

procedure Delete(Index: Integer); Удаляет строку с индексом Index.

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

function IndexOfObject(AObject: TObject): Integer; Возвращает индекс объекта в наборе. В случае неудачи возвращает -1.

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

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

function AddObject(const S: string; AObject: TObject): Integer; Добавляет строку в паре с объектом. Возвращает то же, что и метод Add.

procedure Exchange(Indexl, Index2: Integer); Меняет местами пары строка+объект с индексами Indexl и Index2.

procedure Move(Curlndex, Newlndex: Integer); Перемещает пару строка+объект с позиции Curlndex в позицию Newlndex.


procedure InsertObject(Index: Integer; const S: string; AObject: TObject); Вставляет объект AObject и соответствующую ему строку S в набор под индексом Index.

Шесть методов предназначены для экспорта/импорта наборов строк:

а) в поток:
procedure LoadFromStream(Stream: TStream);
procedure SaveToStream(Stream: TStream);

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

в) в данные в формате текстового редактора (подряд расположенные строки, оканчивающиеся парой символов CR/LF (16-ричные коды SOD/SOA)).

procedure AddScrings(Strings: TStrings); Добавляет в конец набора другой набор Strings.
procedure Assign(Source: TPersistent); Уничтожает прежнее содержимое набора и подставляет вместо него Source, если источник имеет тип TStrings. В противном случае возникает исключительная ситуация EConvertError.

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

Метод
procedure SetText(Text: PChar);
читает строки из массива Text. Строки в массиве должны быть отделены друг от друга парой символов CR/LF; допускается и один символ LF (16-ричный код $ОА). Символы с кодами 0, $lA( + ) воспринимаются как конец текста. При этом прежнее содержимое набора уничтожается.

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

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

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

property Sorted: Boolean; Свойство — признак отсортированности элементов (сортировка осуществляется через посимвольное сравнение строк). Установка Sort := True вызывает процедуру сортировки, которую можно вызвать и явно при помощи метода:

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

property Duplicates: TDuplicates; TDuplicates = (duplgnore, dupAccept, dupError); Свойство определяет, что происходит при попытке добавить в список дубликат уже имеющейся строки: duplgnore — добавление игнорируется (отклоняется); dupError — добавление приводит к созданию исключительной ситуации EListError; dupAccept — одинаковые строки разрешены. В этом случае при поиске в неотсортированном списке не определено, которая из строк будет найдена первой.

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

TStream

Класс TStream не нов для библиотек фирмы Borland; он и его потомки называются потоками. Со времен появления в библиотеке Turbo Vision он не претерпел существенных изменений, но теперь потоки стали обязательными составными частями там, где нужно прочитать или передать во внешний источник какую-либо информацию.
TStream «является абстрактной моделью совокупности данных, обладающей двумя свойствами — длиной Size и положением текущего элемента Position:

property Position: Longint;


property Size: Longint;

Илон Маск рекомендует:  Что такое код ltrim

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

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

function Writetconst Buffer; Count: Longint): Longint;virtual; abstract;

Метод
function Seek(0ffset: Longint; Origin: Word): Longint;virtual; abstract;

позиционирует поток. В зависимости от значения параметра Origin новая позиция выбирается так:
О — новая позиция равна Offset;
1 —текущая позиция смещается на Offset байт;
2 — новая позиция находится на Offset байт от конца потока.

Методы
procedure ReadBuffer(var Buffer; Count: Longint);
procedure WriteBuffer(const Buffer; Count: Longint);
представляют собой оболочки над Read/Write, вызывающие в случае неудачи операции исключительные ситуации EReadError/EWriteError.

Метод
function CopyFromfSource: TStream; Count: Longint): Longint;
дописывает к потоку Count байт из потока Source, начиная с его текущей позиции. Если значение Count равно нулю, то дописывается весь поток Source с его начала.
Основным отличием реализации TStream в VCL является введение ряда методов, обеспечивающих чтение и запись компонентов в потоки. Они полезны на уровне разработчика новых компонентов и здесь подробно не рассматриваются:

function ReadComponent(Instance: TComponent): TComponent;
function ReadComponentRes(Instance: TComponent): TComponent;
procedure WriteComponent(Instance: TComponent);
procedure WriteComponentRes (const ResName: string;Instance: TComponent);
procedure ReadResHeader;

Несколько функций для TStream

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

<
These are three utility functions to write strings to a TStream.
Nothing fancy, but I just ended up coding this repeatedly so
I made these functions. >

<
Hier sind einige TStreaam Hilfsfunktionen um strings
in einen TStream zu schreiben.
>

<: write a string to the stream
@param Stream is the TStream to write to.
@param s is the string to write
@returns the number of bytes written. >

function Writestring(_Stream: TStream; const _s: string ): Integer;

<: write a string to the stream appending crlf
@param Stream is the TStream to write to.
@param s is the string to write
@returns the number of bytes written. >

function WritestringLn(_Stream: TStream; const _s: string ): Integer;

<: write formatted data to the stream appending crlf
@param Stream is the TStream to write to.
@param Format is a format string as used in sysutils.format
@param Args is an array of const as used in sysutils.format
@returns the number of bytes written. >

function WriteFmtLn(_Stream: TStream; const _Format: string ;
_Args: array of const ): Integer;

function Writestring(_Stream: TStream; const _s: string ): Integer;
begin
Result := _Stream. Write (PChar(_s)^, Length(_s));
end ;

function WritestringLn(_Stream: TStream; const _s: string ): Integer;
begin
Result := Writestring(_Stream, _s);
Result := Result + Writestring(_Stream, #13#10 );
end ;

function WriteFmtLn(_Stream: TStream; const _Format: string ;
_Args: array of const ): Integer;
begin
Result := WritestringLn(_Stream, Format(_Format, _Args));
end ;

TObject

Класс TObject

Класс TObject является родоначальником всей иерархии использующихся в Delphi классов VCL. Он реализует функции, которые обязательно будет выполнять любой объект, который может быть создан в среде разработки. Учитывая гигантское разнообразие возможных областей применения объектов в процессе создания приложений, можно сказать, что круг общих для всех классов операций весьма невелик.

В первую очередь — это создание экземпляра объекта и его уничтожение. Любой объект выполняет эти две операции в обязательном порядке. Процесс создания объекта включает выделение области адресного пространства, установку указателя на экземпляр объекта, задание начальных значений свойств и выполнение установочных действий, связанных с назначением объекта. В общем случае две последние операции могут не выполняться.

Указатель на экземпляр объекта передается в переменную объектного типа, которая в дальнейшем будет идентифицировать объект в программном коде приложения. В приведенном выше фрагменте кода переменная объектного типа someList объявлена как экземпляр типа TStrings. При создании экземпляра этого типа конструктор Create возвращает в переменную SomeList указатель на выделенную для нового объекта область памяти. Для этого применяется метод Newinstance, который вызывается в конструкторе автоматически:

class function Newinstance: TObject; virtual;

Объект класса TObject обеспечивает выполнение этого процесса для любого порожденного от него объекта. А уже внутри конструктора, который унаследован от класса TObject, можно предусмотреть инициализацию переменных и выполнение дополнительных операций. Объявление конструктора выглядит следующим образом:

constructor Create;

В конструкторах потомков это объявление может перекрываться, но при необходимости вызвать конструктор предка используется оператор inherited:

constructor TSomeObject.Create;
begin
inherited Create;
.
end ;

Для уничтожения экземпляра объекта в классе TObject предназначены методы Destroy и Free:

destructor Destroy; virtual ;
procedure Free;

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

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

При уничтожении объектов рекомендуется вместо деструктора использовать метод Free, который просто вызывает деструктор, но перед этим проверяет, чтобы указатель на экземпляр объекта был не пустым (не был равен Nil). Это позволяет избежать серьезных ошибок.

Если объект является владельцем других объектов (например, форма владеет всеми размещенными на ней компонентами), то его метод Free автоматически вызовет эти же методы для всех объектов. Поэтому при закрытии формы разработчик избавлен от необходимости заботиться об уничтожении всех компонентов.

Для освобождения занимаемой объектом памяти деструктор автоматически Вызывает метод Freelnstance:

procedure Freelnstance; virtual ;

Каждый объект должен содержать некоторую информацию о себе, которая используется приложением и средой разработки. Поэтому класс TObject содержит ряд методов, обеспечивающих представление этой информации в потомках.

class function Classlnfo: Pointer;

возвращает указатель на таблицу информации времени выполнения (RTTI). Эта информация используется в среде разработки и в приложении.

class function ClassName: ShortString;

возвращает имя типа объекта, которое может быть использовано для идентификации. Например, один метод-обработчик щелчка на кнопке может работать с несколькими типами компонентов кнопок:

procedure TForml.BitBtnlClick(Sender: TObject);
begin
if Sender is TBitBtn then TBitBtn(Sender).Enabled := False;
if Sender is TSpeedButton then TSpeedButton(Sender).Down := True;
end ;

Метод

class function >const Name : string ): Boolean;

позволяет определить, является ли данный объект того типа, имя которого передано в параметре Name. В случае положительного ответа функция возвращает True.

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

procedure Dispatch( var Message ); virtual ;

осуществляет обработку сообщений, поступающих объекту. Он определяет, сможет ли объект обработать сообщение при помощи собственных обработчиков событий. В случае отсутствия таких методов сообщение передается аналогичному методу Dispatch класса-предка (если он есть).

Класс TObject имеет предопределенный обработчик событий:

procedure DefaultHandler( var Message ); virtual ;

Кроме рассмотренных здесь методов, класс TObject имеет еще несколько методов, которые в основном применяются для взаимодействия объекта со средой разработки.

В целом класс TObject может служить для создания на его основе некоторых простых классов для использования в приложениях.

TPersistent

«Persistent» в переводе с английского означает «устойчивый», «постоянный». Что же такого постоянного в одноименном классе? Ответ таков: виртуальный метод

procedure Assign(Source: TPersistent);

Этот важнейший метод осуществляет копирование содержимого одного объекта (source) в другой (self, т. е. в объект, вызвавший метод Assign). При этом объект-получатель остается самим собой, чего нельзя достигнуть, используя простое присваивание переменных объектного типа:

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

Метод Assign позволяет продублировать объект — присвоить одному объекту значения всех свойств другого. При этом объекты не обязательно должны быть одного и того же класса; более того, они не обязательно должны находиться в отношениях «родитель-потомок». Данный метод тем и хорош, что позволяет полиморфное присвоение. Конструкция

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

procedure TCiipboard.Assign(Source: TPersistent);
begin
if Source is TPicture then
AssignPicture(TPicture(Source))
else
if Source is TGraphic then
AssignGraphic(TGraphic(Source))
else
inherited Assign(Source);
end ;

Для обеспечения взаимодействия потомков класса TPersistent со средой разработки предназначен метод

function GetNamePath: string ; dynamic ;

Он возвращает имя объекта для передачи его в Инспектор объектов.

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

procedure DefineProperties(Filer: TFiler); virtual ;

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

TComponent

Класс TComponent является предком всех компонентов VCL. Он используется в качестве основы для создания невизуальных компонентов и реализует основные механизмы, которые обеспечивают функционирование любого компонента. В нем появляются первые свойства, которые отображаются в Инспекторе объектов. Это свойство

property Name : TComponentName;

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

Тип TComponentName представляет собой обычную строку:

type TComponentName = type string ;

Свойство

property Tag: Longint;

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

Для компонентов существует своя иерархия, поэтому в классе введен механизм учета и управления компонентами, для которых данный компонент является владельцем. Свойства и методы, которые отвечают за управление, приведены в табл. 2.1.

Таблица 2.1. Свойства и методы для управления списком компонентов

Свойство (метод)
Описание

property Components [ Index : Integer]: TComponent ;
Содержит индексированный список указателей всех компонентов, для которых данный компонент является владельцем (owner)

property ComponentCount : Integer;
Число подчиненных компонентов

property Owner: TComponent;
Указывается, какой компонент является владельцем данного

property Componentlndex: Integer;
Индекс данного компонента в списке владельца

procedure InsertComponent (AComponent : TComponent) ;
Вставляет компонент AComponent в список

procedure RemoveComponent (AComponent : TComponent>;
Удаляет компонент AComponent из списка

procedure FindComponent (AName: string ): TComponent;
Осуществляет поиск компонента по имени AName

procedure DestroyComponents;
Предназначен для уничтожения всех компонентов, подчиненных данному

Очень важное свойство

type TComponentState = set of (csLoading, csReading, csWriting, csDestroying, csDesigning, csAncestor, csllpdating, csFixups, csFreeNotification, cslnline, csDesignlnstance); property ComponentState: TComponentState;

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

Таблица 2.2. Возможные состояния компонента

csLoading
Устанавливается при загрузке компонента из потока

csReading
Устанавливается при чтении значений свойств из потока

csWriting
Устанавливается при записи значений свойств в поток

csDestroying
Устанавливается при уничтожении компонента

csDesigning
Состояние разработки. Устанавливается при работе с формой во время разработки

csAncestor
Устанавливается при переносе компонента на форму. Для перехода в это состояние должно быть уже установлено состояние csDesigning

csUpdating
Устанавливается при изменении значений свойств и отображения результата на форме-владельце. Для перехода в это состояние должно быть уже установлено состояние csAncestor

CsFixups
Устанавливается, если компонент связан с компонентом другой формы, которая еще не загружена в среду разработки

csFreeNotification
Если это состояние устанавливается, другие компоненты, связанные с данным, уведомляются о его уничтожении

cslnline
Определяет компонент верхнего уровня в иерархии. Используется для обозначения корневого объекта в разворачивающихся свойствах

csDesignlnstance
Определяет корневой компонент на этапе разработки

Для обеспечения работы механизма действий (см. гл. 8) предназначен

function ExecuteAction(Action: TBasicAction): Boolean; dynamic ;

Он вызывается автоматически при необходимости выполнить акцию, предназначенную для данного компонента.

На уровне класса TComponent обеспечена поддержка СОМ-интерфейсов IUnknown и IDispatch.

property ComObject: IUnknown;

вы можете обеспечить применение методов этих интерфейсов.

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

TControl

Класс TControi является базовым для всех визуальных компонентов и инкапсулирует механизмы отображения компонента на экране. В нем используется множество новых свойств и методов. Недаром в Delphi в Инспекторе объектов появилась категоризация методов и свойств (рис. 2.2). Большинство из них вводятся как раз в классах TControl и TWinControl.

TWinControl

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

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

Дескриптор окна содержится в свойстве

property Handle: HWND;

При создании оконного элемента управления вызывается метод

procedure CreateParams( var Params: TCreateParams); virtual ;

который заполняет структуру TCreateParams необходимыми значениями:

type
TCreateParams = record
Caption: PChar;
Style: DWORD;
ExStyle: DWORD;
X, Y: Integer;
Width, Height: Integer;
WndParent: HWND;
Param: Pointer
WindowClass: TWndClass;
Win >array [ 0 .. 63 ] of Char;
end ;

Для создания дескриптора окна для элемента управления используется метод

procedure CreateHandle; virtual ;

Операционная система создает дескриптор окна только вместе с самим окном. Поэтому метод CreateHandle только создает окно, а для присваивания свойству Handle значения дескриптора окна вызывает метод createwnd.

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

Илон Маск рекомендует:  Что такое код asp cookie

type TTabOrder = — 1 .. 32767 ;
property TabOrder: TTabOrder;

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

Компонент можно заставить не откликаться на клавишу . Для этого свойству

property TabStop: Boolean;

необходимо присвоить значение False.

Для передачи фокуса прямо элементу управления применяется метод


procedure SetFocus; virtual ;

Чтобы узнать, имеет ли элемент управления фокус, в настоящее время используется метод

function Focused: Boolean; dynamic ;

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

property BevelEdges: TBevelEdges;
задает, какие стороны входят в рамку;

property Bevellnner: TBevelCut; property BevelOuter: TBevelCut;
задают внешний вид рамки;

property BevelKind: TBevelKind;
определяет стиль рамки;

property BevelWidth: TBevelWidth;
задает размер рамки.

property Brush: TBrush;

определяет параметры кисти (цвет и заполнение), которой рисуется фон элемента.

Оконный элемент может содержать другие компоненты. Для управления ими применяется индексированный список указателей, представляющих свойство

property Controls[ Index : Integer]: TControl;

Общее число дочерних элементов управления содержится в свойстве

property ControlCount: Integer;

Внешний вид оконного элемента определяется свойством

property Ctl3D: Boolean

При значении True элемент управления имеет трехмерный вид. Иначе элемент выглядит плоским.

Для вызова темы контекстной помощи для конкретного элемента управления предназначено свойство

type THelpContext = -MaxLonglnt..MaxLonglnt;

property HelpContext: THelpContext;

Значение свойства должно соответствовать номеру темы в файле помощи.

В классе TwinControl добавлена возможность использования редакторов способа ввода (Input Method Editor, IME). Такие редакторы позволяют приспособить стандартную раскладку клавиатуры для символьных языков для ввода нестандартных символов (иероглифов и т. д.). Редакторы IMЕ представляют собой специально устанавливаемое в операционной системе программное обеспечение (ПО). Имя такого редактора задается в свойстве ImeName. Режим работы редактора определяется свойством ImeMode.

В классе TwinControl добавлено еще несколько методов-обработчиков событий, обеспечивающих реакцию на ввод с клавиатуры, получение и потерю фокуса.

TCustomControl

Класс TCustomControl предназначен для создания на его основе нестандартных оконных элементов управления. Процесс визуализации в нем упрощен за счет использования специального класса TCanvas, инкапсулирующего канву (см. гл. 11).

Доступ к канве осуществляется через свойство

property Canvas: TCanvas;

Отрисовка элемента управления осуществляется методом

procedure PaintWindowfDC: HDC); override ;

после получения сообщения WM_PAINT.

Возможности этого класса унаследовали классы TPanel, TGroupBox, TStringGrid и т. д.

TGraphicControl

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

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

Для визуализации элементов управления на основе этого класса используется канва, инкапсулированная в классе TCanvas.

Доступ к канве осуществляется через свойство

property Canvas: TCanvas;

Отрисовка элемента управления осуществляется методом

procedure PaintWindow(DC: HDC); override ;

degtorad

Convert angles from degrees to radians

degtorad is not recommended. Use deg2rad instead.

Syntax

Description

angleInRadians = degtorad(angleInDegrees) converts angle units from degrees to radians. This is both an angle conversion function and a distance conversion function, since arc length can be a measure of distance in either radians or degrees, provided that the radius is known.

Examples

Show that there are 2π radians in a full circle:

See Also

Introduced in R2009b

MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

Использование замыканий и функций высших порядков в Delphi

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

Delphi не является языком функционального программирования, но тот факт, что программы на нем могут манипулировать функциями как объектами означает, что в Delphi можно использовать приемы функциональной парадигмы. Цель статьи — не подтолкнуть к использованию этого стиля, но обозначить некоторые примеры и возможности.

Конструирование функций

Функции высшего порядка (ФВП) – это функции, которые оперируют функциями, принимая одну или более функций и возвращая новую функцию.
Следующий пример показывает, как с помощью ФВП можно конструировать другие функции.

Функция Negate в примере выше, является ФВП, потому что она принимает функцию IsOdd в виде аргумента и возвращает новую функцию IsEven, которая передает свои аргументы Negate и возвращает логическое отрицание значения, возвращаемого функцией IsOdd.

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

Композиция функций

Ниже приводится пример еще одной, более универсальной функции, которая принимает две функции, F и G, и возвращает новую функцию, которая возвращает результат F(G()).

Здесь функция Compose вычисляет F(G(X, Y)). Возвращаемая функция передает все свои аргументы функции G, затем передает значение, полученное от G, функции F и возвращает результат вызова F.

Частичное применение

Этот термин описывает преобразование функции с несколькими аргументами в функцию, которая принимает меньшее количество аргументов, при этом значения для опущенных аргументов задаются заранее. Этот прием вполне адекватен своему названию: он «частично применяет» некоторые аргументы функции, возвращая функцию, принимающую остающиеся аргументы.
Функция BindLeft в примере ниже берет функцию Calc, принимающую n аргументов, связывает первые k из них с наперед заданными значениями и возвращает функцию Partial, которая может принять (n-k) аргументов (первые k аргументов будут уже применены к ней).

Здесь интересен момент, когда после вызова BindLeft локальная переменная StoredArgs не прекращает свое существование и используется далее, сохраняя в себе значения аргументов, которые потом используются при вызове Partial и передаются в Calc. Этот эффект называется замыканием. При этом каждый вызов BindLeft будет порождать новые «экземпляры» StoredArgs. Замыкания использовались и в предыдущих примерах, когда в них сохранялись аргументы ФВП.
Определить частичное применение справа можно следующим образом:

Карринг

В то время как частичное применение преобразует функцию с n параметрами в функцию с n-k параметрами, применяя k аргументов, карринг декомпозирует функцию на функции от одного аргумента. Мы не передаем никаких дополнительных аргументов в метод Curry, кроме преобразуемой функции:

  • Curry(F) возвращает функцию F1, такую что.
  • F1(A) возвращает функцию F2, такую что.
  • F2(B) возвращает функцию F3, такую что.
  • F3(С) вызывает F(A, B, C)
Мемоизация

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

Функция Memoize создает объект TCache для использования в качестве кэша и присваивает его локальной переменной, благодаря чему он остается доступным (через замыкание) только для возвращаемой функции. Возвращаемая функция преобразует свой аргумент в ключ. Если значение присутствует в кэше, оно просто возвращается в качестве результата. В противном случае вызывается оригинальная функция, вычисляющая значение для заданного аргумента; полученное значение помещается в кэш и возвращается.

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

Генераторы

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

Польза генераторов заключается в том, что для вычисления каждого следующего элемента не требуется вычислять всю последовательность с самого начала. Генераторы позволяют работать даже с бесконечными последовательностями, но они обеспечивают только последовательный доступ к своим элементам и не позволяют обращаться к своим элементам по индексу: чтобы получить n-e значение придется выполнить n-1 итераций.

Отложенные вычисления

Генераторы бывает удобно использовать для последовательной обработки данных — элементов списка, строк текста, лексем в лексическом анализаторе и т.д. Генераторы можно объединять в цепочки, подобно конвейеру команд в Unix. Самое интересное в этом подходе заключается в том, что он следует принципу отложенных вычислений: значения «извлекаются» из генератора (или из конвейера) по мере необходимости, а не все сразу. Эту особенность демонстрирует следующий пример, в котором исходный текст фильтруется, построчно проходя через цепочку генераторов.

Delphi 2006. Справочное пособие: Язык Delphi, классы, функции Win32 и .NET. — Архангельский А.Я.

Пример применения функции DayOfWeek см. в описании функции Date. DayOfTheYear

Извлекает день года из указанной даты и времени

См. разд. «DayOf и другие функции дат и времени вида . Of».

Определяет день недели

См. разд. «DayOfTheWeek, DayOfWeek».

Возвращают число дней между двумя значениями даты и времени Библиотеки VCL Win32, VCL .NET 990

Глава 12 ¦ Описания функций

Модуль в VCL Win32 DateUtils

Пространство имен в .NET Borland.VcLDateUtils

function DaysBetween(const ANow, AThen: TDateTime): Int64; function DaySpan(const ANow, AThen: TDateTime): Double;

Функции DaysBetween и DaySpan возвращают число суток между двумя значениями даты и времени ANow и AThen типа TDateTime. Функция DaysBetween возвращает число полных суток между двумя датами с учетом времени. А функция DaySpan возвращает действительное число, содержащее дробную часть, отображающую неполные сутки с учетом времени.

var Tl, Т2: TDateTime; i: integer; г: real;

Tl := EncodeDateTime(2001, 10, 5, 11, 25, 45, 300); Т2 := EncodeDateTime(2001, 10, б, 11, 24, 45, 300); і := DaysBetween(Т2, Tl); г := DaySpan(Т2, Tl);

зададут переменной і значение 0, а переменной г значение 0,999305555553292. В этом примере значения дат и времени Tl и Т2 задаются с помощью функции EncodeDateTime. Различие между двумя значениями составляет 23 часа 59 минут. Поэтому функция DaysBetween возвращает 0, так как разность значений менее суток. А функция DaySpan возвращает число, близкое к единице.

Уменьшает порядковую величину на заданное значение Библиотеки VCL Win32, VCL .NET Модуль в VCL Win32 System

Пространство имен в .NET Borland.Delphi.System Объявление

procedure Dec(var X[ ; N: Longint]); Описание

Процедура Dec — декремент, уменьшает значение передаваемого по ссылке аргумента X на 1, если аргумент N не задан, или на N, если этот аргумент задан. Переменная X должна быть порядкового типа (целого, перечислимого, указатель и т.п.) или типа PChar (если используется расширенный синтаксис). Аргумент N, если он задан, должен быть выражением целого типа. Таким образом, выражение Dec(X) эквивалентно оператору

X = X-I; DecodeDate

а выражение Dec(X, N) — оператору

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

Разбивает дату на год, месяц и день Библиотеки VCL Win32, VCL .NET Модуль в VCL Win32 SysUtils Пространство имен в .NET Borland.VcLSysUtils Объявление

procedure DecodeDate(Date : TDateTime;

var Year, Month, Day: Word);

Процедура DecodeDate разбивает дату Date типа TDateTime (см. в гл. 9) на год — Year, месяц — Month и день — Day.

См. также разд. «DayOf и другие функции дат и времени вида . Of», в котором приведены функции, позволяющие по отдельности извлекать год, месяц и день указанной даты.

Ниже приведен код, определяющий по значению переменной Year_b, в которой хранится год рождения какого-то сотрудника, его возраст Age в текущем году, а также текущий месяц и день:

var Year, Month, Day, Age, Year_b:word;

DecodeDate(Now, Year, Month, Day); Age := Year — Year_b;

После вызова процедуры DecodeDate в переменных Year, Month и Day хранятся соответственно текущий год, месяц и день. Значение Year используется для вычисления возраста.

Разбивает время на час, минуту, секунду и миллисекунду

Библиотеки VCL Win32, VCL .NET

Модуль в VCL Win32 SysUtils

Пространство имен в .NET Borland.VcLSysUtils

procedure DecodeTime(Time : TDateTime;

var Hour, Min, Sec, MSec: Word);

Процедура DecodeTime разбивает время Time типа TDateTime (см. в гл. 9) на час — Hour, минуту — Min, секунду — Sec, миллисекунду — MSec. 992

Глава 12 ¦ Описания функций

См. также разд. «DayOf и другие функции дат и времени вида . Of», в котором приведены функции, позволяющие по отдельности извлекать час, минуту, секунду и миллисекунду указанного времени.

Если вам надо зафиксировать с точность до секунды интервал времени, на протяжении которого выполняются какие-то длинные вычисления, вы можете сделать это следующим кодом:

var Hourl, Hour2, Mini, Min2, Seel, Seel, MSec: word;

DecodeTime(Time, Hourl, Mini, Seel, MSec); DecodeTime(Time, Hour2, Min2, Sec2, MSec); Editl.Text := ‘Прошло ‘ + IntToStr(Hour2 — Hourl) + ‘ часов, ‘ + IntToStr(Min2- Mini) + ‘ минут, ‘ + IntToStr(Sec2- Sec 1) + ‘ секунд’;

В результате в окно Editl будет помещен текст вида: «Прошло . часов, . минут, . секунд».

Переводит значение угла, заданное в градусах, в значение, заданное в циклах См. разд. «CycleToDeg и другие функции преобразования углов».

Переводит значение угла, заданное в градусах, в значение, заданное в градах См. разд. «CycleToDeg и другие функции преобразования углов».

Переводит значение угла, заданное в градусах, в значение, заданное в радианах См. разд. «CycleToDeg и другие функции преобразования углов».
Предыдущая 421 422 423 424 425 426 .. 478 >> Следующая

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL