Now — Функция Delphi


Содержание

Now — Функция Delphi

Простой учебный будильник.
Объекты TImage, TUpDown, TTimer на форме в Delphi 7.

Лабораторные работы по теме «Работа с объектом TTimer» подразумевают использование таймера Timer, работы с типом данных TDateTime, встроенными функциями Now, Date, Time и функциями преобразования данных времени в строки и обратно…

Примеры приведены на Delphi, но переписать их на любой язык не составит труда…

Задачи лабораторных работ

На пространстве формы разместить необходимые элементы управления

  • TRadioGroup
  • TUpDown
  • TEdit
  • TLabel
  • TButton
  • TImage
  • TTimer

и обеспечить вызов целевой процедуры myAction (с подачей звукового сигнала) через заданное количество секунд и в назначенное время…

Рис.1 Форма с органами управления будильником

Функция Now. Возвращает текущую системную величину даты и времени. Если рассматривать значение функции в формате double, то целая часть числа — представляет количество дней, а дробная — часть текущих суток в процентном отношении.

Функция Date. Возвращает текущую системную дату. В числовом формате дробная часть будет отсутствовать.

Функция Time. Возвращает текущее системное время без даты. В числовом формате целая часть будет отсутствовать.

Поэтому, к типу данных TDateTime вполне можно применять арифметические операции. Нужно получить то же самое время суток, но завтра — смело прибавляйте 1. Нужно получить 12:00:00 (полдень текущик суток) установите дробную часть равной 0.50 , а если полночь — 0.00 .

Для преобразования в строку используйте функции DateTimeToStr, DateToStr, TimeToStr, а для обратного преобразования StrToDateTime, StrToDate, StrToTime.

Функция проверки возможности преобразования строки в TDateTime может выглядеть так.

function TForm1.GetAlarmTime:boolean;
begin
try
t:=strtodatetime(edit2.Text);
Result:=true;
except
ShowMessage(‘Ошибка в указанном времени. ‘);
t:=Now+1.0/24/60;
Result:=false;
end;
end;

В случае ошибки ввода, время срабатывания будильника устанавливается: — через 1 минуту от текущего (Now+1.0/24/60);

Now — Функция Delphi

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

Примечание. Следует иметь в виду, что при записи года двумя последними цифрами фактический год зависит от текущего года и глобальной переменной заданной в Delphi — TwoDigitYearCenturyWindow. По умолчанию эта переменная имеет значение, равное 50, что означает, что в конце этого столетия и начале следующего задаваемые двумя цифрами годы будут относиться к XX в., если число несколько больше 50, и к XXI в., если число несколько меньше 50.

В модуле SysUtils определен ряд стандартных функции работы с параметрами типа даты-времени.

  • Time — текущее время. Функция возвращает текущее значение времени в формате TTime.
  • Date — текущая дата. Функция возвращает текущее значение даты в формате TDate.
  • Now — текущая дата и время. Функция возвращает текущее значение даты и времени в формате TDateTime.
  • DateTimeToStr (DateTime) — символьное представление даты и времени. Функция формирует для параметра DateTime типа TDateTime символьное представление даты и времени с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DateTimeToString (Result, Format, DateTime) — сформатированное символьное представление даты и времени. Процедура формирует символьное представление параметра DateTime типа TDateTime с учетом формата, заданного строкой Format, и помещает результат в строку Result.
  • DateToStr (Date) — символьное представление даты. Функция формирует для параметра Date типа TDateTime или TDate символьное представление даты с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DayOfWeek (Date) — день недели. Функция возвращает день недели заданной даты Date типа TDateTime или TDate в виде числа от 1 до 7, причем нумерация начинается с воскресенья.
  • TimeToStr (Time) — символьное представление времени. Функция формирует для параметра Time типа TDateTime или TTime символьное представление времени с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DecodeDate (Date, Year, Month, Day) — выделение в дате года, месяца, дня. Процедура выделяет из параметра Date типа TDateTime или TDate год, месяц, день и помещает их соответственно в параметры Year, Month и Day типа Word.
  • DecodeTime (Date, Hour, Min, Sec, MSec) — выделение во времени часа, минуты, секунды и числа миллисекунд. Процедура выделяет из параметра Date типа TDateTime или TTime час, минуту, секунду и число миллисекунд и помещает их соответственно в параметры Hour, Min, Sec и MSec типа Word.
  • EncodeDate (Year, Month, Day) — формирование даты из компонент. Функция формирует из заданного года, месяца и дня (заданных в параметрах Year, Month, Day) комплексный параметр типа TDateTime и возвращает его как результат работы.
  • EncodeTime (Hour, Min, Sec, MSec) — формирование времени из компонент. Функция формирует из заданных часа, минуты, секунды и числа миллисекунд (заданных в параметрах Hour, Min, Sec, MSec) комплексный параметр типа TDateTime и возвращает его как результат работы.
  • FormatDateTime (Format, DateTime) — сформатированное символьное представление даты и времени. Функция формирует символьное представление параметра DateTime типа TDateTime с учетом формата, заданного строкой Format, и возвращает полученную строку как результат своей работы.
  • StrToDate (S) — преобразование символьного представления даты в тип TDateTime. Функция преобразовывает символьное представление даты, находящееся в строке S, в формат TDateTime или TDate и возвращает полученную величину как результат своей работы. Дата должна быть задана в соответствии с региональной установкой Windows.
  • StrToTime (S) — преобразование символьного представления времени в тип TDateTime. Функция преобразовывает символьное представление времени, находящееся в строке S, в формат TDateTime или TTime и возвращает полученную величину как результат своей работы. Время должно быть задано в соответствии с региональной установкой Windows.
  • StrToDateTime (S) — преобразование символьного представления даты и времени в тип TDateTime. Функция преобразовывает символьное представление даты и времени, находящееся в строке S, в формат TDateTime и возвращает полученную величину как результат своей работы. Дата и время должны быть заданы в соответствии с региональной установкой Windows.

Тепеть разберем некоторые функции на примерах.

DateTimeToString

DateTimeToStr

DateToStr

TimeToStr

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

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

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

А вот и сама процедура рисования аналоговых часов.

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

Дата и время в Delphi

Прежде чем использовать в Дельфи функции преобразования дат и времени советую подключить DateUtils

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, DateUtils, ComCtrls;

Вот пример того, что у меня получилось с некоторыми функциями:

Код программы:

//вывод текущей даты

procedure TForm1.Button1Click(Sender: TObject);

//вывод текущей даты

procedure TForm1.FormCreate(Sender: TObject);

StatusBar1.Panels[0].Text:=’Тестовая програмка на фунции дат и времени’;

//вывод текущей даты и времени

procedure TForm1.Button2Click(Sender: TObject);

//день недели

procedure TForm1.Button3Click(Sender: TObject);

Функции Delphi: описание, возможности, советы и рекомендации

Delphi — это проприетарная среда разработки (IDE) для Pascal в Windows. Она реализует объектно-ориентированную версию языка. Среда разработки базируется на графическом интерфейсе, связанного с редактором исходного кода функции Delphi. Язык программирования завоевал популярность благодаря простоте использования при разработке графических приложений и программ, связанных с базой данных.

Массивы — основа программирования

Borland Software Corporation в 1995 году выпустила преемника Turbo Pascal — Delphi, интегрированную среду разработки, использующую свой собственный диалект Object Pascal для облегчения приложений Windows. По сравнению с IDE, функции Delphi имели беспрецедентную поддержку баз данных, создавая многомерную среду, позволяющую программистам писать код быстрее и с меньшим количеством ошибок, чем когда-либо прежде.

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

Первоначально массив в Delphi-программе был статическим. Это означало, что его размер должен был быть известным во время написания кода.

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

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

Если в ходе работы программы нужно изменить размер — со статическими массивами это просто невозможно, а с динамическими — легко реализуемо. Для этого вызывают SetLength и используют вновь выделенные элементы в массиве. После того как размер изменен, оригинальные элементы по-прежнему находятся в нем и никакие данные не будут потеряны.

Статистические и динамические массивы

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

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

  1. Поле размера обновляется.
  2. Новый (внутренний) статический массив функции Delphi 7 выделяется с новым размером.
  3. Элементы старого статического копируются в новый.
  4. Указатель статического изменяется на новый.

Если в текущей позиции внутреннего статического массива достаточно места для перераспределения, и существует одна переменная, ссылающаяся на массив, происходит только шаг № 1. Все это реализуется каждый раз, когда изменяют его длину.

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

Строковые операторы

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

Перед назначением данных String переменной требуется знать четыре строковых типа. Короткая строка функции Delphi — Shortstring. Это подсчитанный массив (ASCII) символов, содержащий до 255 знаков в строке. Первый байт этого массива хранит длину. Этот принцип функционирования был основным в Delphi 1 (16-битный Delphi) и создавал переменную с именем small, максимальная длина которой составляла 50 символов.

Когда присваивают значение переменной Short String, строка усекается. Особенно если она превышает максимальную длину этого типа.

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

  1. Целое число — это целые числа, например, 42 или -5.
  2. Одинарное или двойное — используются, как тип с запятыми, например, 3,3.

Операции могут быть применены к числовым переменным:

  • сложение;
  • вычитание;
  • умножение;
  • модуль — может быть применен только к целому числу;
  • char — используется, чтобы содержать один символ, например, m;
  • строка — используется, чтобы содержать предложения, например, Hello world;
  • логические значения — True и False.

Чтобы объединить 2 строки символов, используют оператор «+». Пример: Hello + world будет реализовано, как Hello world.

Переменные и константы

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

При использовании переменной, ее объявляют во всех файлах, где она используется. Только переменные, переданные в качестве параметра Delphi функции и процедуры, не объявляются в той, где они применяются. Для объявления используют ключевое слово var. Они могут быть объявлены в .DPR или в процедурах файлов .pas.

Компонент TDBGrid Delphi является одной из жемчужин VCL. Разработанный таким образом, чтобы позволить пользователю просматривать и редактировать данные в табличной сетке, он предоставляет различные способы настройки способа представления данных. Например, добавление цвета в сетки базы данных улучшит внешний вид и разграничит важность определенных строк или столбцов в БД.

Delphi файлы

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

Чертеж формы, содержащий свойства графических компонентов

Файл проекта — это сердце приложения, связывает все различные файлы, содержащие код (.pas) с .DPR с функцией даты Delphi

Исходный файл, содержащий код приложения

Файл проекта, связанный с .DPR

Файл ресурсов Windows

Таблица файлов, генерированных после компиляции.

Файл проектной группы.

Файл, созданный во время компиляции, но не обязательный.

Исходный файл пакета.

Файл опций проекта.

Файл ресурсов Windows, он может содержать значки, растровые изображения, звуки.

Функция Pos

Функция POS Delphi возвращает целое число, указывающее позицию первого вхождения одной строки в другую. Это создается следующим образом. Pos ищет первое полное вхождение указанной строки. Обычно предлагается в одинарных кавычках в источнике. Источником является некоторая переменная.

Если Pos находит строку, он возвращает позицию символа в Source, а первого символа в Str, как целочисленного значения, в противном случае функция Delphi возвращает 0. String и Source будут строками. Старомодная функция Pos — наиболее распространенный способ поиска и всегда расположена в начале.

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

Импорт библиотечных функций

Для импорта подпрограмм библиотеки (.DLL) присоединяют директиву в виде: externalstringConstant, по-окончанию заголовка функций и процедур, где string Constant — имя библиотечного файла в кавычках. Есть возможность импортировать подпрограмму с другим названием. Для этого указывают оригинальное имя во внешней директиве:

External stringConstant1, namestringConstant2.

Где первый string Constant указывает имя библиотечного файла, а второй является исходным именем подпрограммы. Следующий оператор выполняет импорт функции из user32.dll. Первоначальное имя функции — MessageBoxA. Вместо имени можно использовать номер, чтобы идентифицировать подпрограмму для импорта:

Где integerConstant индекс подпрограммы в экспортной таблицы.

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

Пример создания одномерного массива

Допустим, нужно сформировать 3 одномерных массива для 50 членов общества разработчиков программного обеспечения. 1-й массив — имена, 2-й — электронная почта, а 3-й — число загрузок.

Любой из них имеет индексы и код, чтобы поддерживать все 3 перечня синхронно. Естественно, можно попробовать с одним массивом. Для этого необходимы строки имен и адресов почты, и целое число загрузок.

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

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

Тип функции Delphi Member охватывает 3 поля: строковое значение Name, eMail и целое число Posts. В последствии того, как будет установлен тип записи, можно объявить переменную Member. Она не выделяет памяти для имен, eMail и Posts. Для того чтобы практически создать запись Member, объявляют ее переменную.

Использование компонентов OnMouseOver

Код для событий OnMouseMove создают с компонентом TDBGrid, чтобы можно было найти строки и столбцы DBGrid (ячейки) в месте наведения курсора мыши. Если он расположен над сеткой, то срабатывает обработчик события OnMouseMove. Тогда используют метод MoveBy компонента DataSet, чтобы установить отображаемую текущую запись.

Равнозначный код используют для того, чтобы продемонстрировать место, где находится курсор мыши, и поменять его, когда он расположен над строкой заголовка. Для правильной установке активной записи требуется «взломать» DBGrid и получить доступ к защищенному свойству Row. Строки свойств TCustomDBGrid компонента содержат ссылку на текущие активные строки.

Много компонентов обладают полезными свойствами и методами, отмеченными как невидимые или защищенные разработчиками Delphi. Доступ к таким элементам обеспечивается применением простой техники, называемой «защищенный взлом».

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

Скиннинг Delphi Applications

Эти компоненты изменяют внешний вид приложений, добавляя темы и оболочки. Это простой способ улучшить графический интерфейс пользователя (GUI). VCLSkin — легкий в использовании компонент для создания графического интерфейса приложения Delphi. VCLSkin создаст тему или обложку для него без каких-либо изменений исходного кода.

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

У скинов есть много объектов и эффектов для крутых приложений, таких как WinAmp и iTunes. Специальный редактор позволяет пользователю настраивать скины. SkinAdapter является компонентом DynamicSkinForm, который позволяет создавать скины приложений без изменения исходного кода.

SUISkin предлагает автоматическое приложение с поддержкой скинов. С ним модификаций для существующих проектов не требуется. Просто перетаскивают компонент движка скина на основную форму и устанавливают некоторые свойства. Он будет автоматически обрабатывать все формы и диалоги. Файлы скинов могут быть скомпилированы в EXE-файл. Во время выполнения можно легко переключать или выключать их.

Пакет разработки пользовательского интерфейса App Face — это решение для создания визуальных графических интерфейсов приложений, которые можно использовать в VC, VB.Net, Delphi, Visual Basic, C ++ Builder и Win32 SDK. Он включает в себя управление скинами, средство создания визуальных скинов, примеров исходного кода, а также технического руководство. Библиотека appface.dll, является компонентом ядра и может автоматически обработать все созданные окна в целевом приложении.

Преимущества среды программирования

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

Основания почему до сих пор используют Delphi:

  1. Четкий синтаксис, делающий код максимально читабельным.
  2. Механизм перетаскивания для реализации, позволяющий быстро создавать программное обеспечение GUI.
  3. Поддержка баз данных SQL.
  4. Поддерживает весь Windows API.
  5. Полно-объектно-ориентированное программирование.
  6. Совместим с C ++.
  7. Сильно адаптируемая среда VCL.
  8. Требуется минимальное обслуживание приложений.

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

Delphi: как измерить точное время выполнения операции?

Точное время измерения выполнения операции в Delphi может пригодится во многих случаях, начиная от самого простого — показать пользователю время, затраченное на выполнение длительной операции (здесь, кстати, высокая точность нужна редко) и, заканчивая, ситуациями, когда в целях оптимизации программы нам необходимо выявить в программе наиболее «узкие» места в которых программа «застревает» на длительный промежуток времени. В основном, последняя ситуация характерна при разработке программ, использующих и обрабатывающих большие массивы данных, когда скорость выполнения операций выходит, если не на первое, то на одно из первых мест в требованиях к приложению.
Есть несколько способов узнать время выполнения операций в Delphi и все эти способы, в принципе, рассмотрены как в Сети, так и моем блоге. Поэтому представленная ниже статья — это лишь объединение всех возможных способов измерения времени в Delphi и опытный Delphi-программист здесь врядли встретит что-то новое для себя.

Способ №1 — самый простой. Используем функцию Now()

Самый простейший и наименее точный способ измерить время, затраченное на выполнение какой-либо операции в Delphi — воспользоваться функцией Now() из модуля System.SysUtils.

Исходный код может выглядеть, например, так:

Вполне вероятно, что у вас может возникнуть резонный вопрос: почему я использовал в примере SecondsBetween(), а не, например, MilliSecondsBetween() для большей точности? Сделал я это, опираясь исключительно, на описание функции Now() в официальной справке по Delphi, которая гласит следующее: «Несмотря на то, что в TDateTime могут передаваться миллисекунды, Now() имеет точность до ближайшей секунды«. То есть, если использовать Now(), то определять интервал времени с точностью до миллисекунд — не имеет смысла.

Способ №2 — используем Windows API. Функция GetTickCount().

Функция GetTickCount() не имеет параметров и возвращает количество миллисекунд, прошедших с момента запуска системы. Судя по официальной справке Microsoft, р азрешение функции GetTickCount() ограничено разрешением системного таймера, которое обычно находится в диапазоне от 10 до 16 миллисекунд. При этом, счётчик миллисекунд будет обнулен, если система запущена более 49,7 дней.
В принципе, пример использования этой функции похож на предыдущий:

Так, используя функцию GetTickCount() мы можем засечь время выполнения операции в Delphi с точностью до миллисекунды. Если и такая точность Вам не подходит и необходимо измерить интервал времени ещё точнее, то следующий способ — для вас.

Способ №3 — продолжаем использовать Windows API. Функции QueryPerformanceCounter и QueryPerformanceFrequency

Об этих функциях я рассказывал давным-давно, но, повторюсь ещё раз.

QueryPerformanceCounter — извлекает текущее значение счетчика производительности, которое представляет собой метку времени с высоким разрешением ( TStopwatch использует функциональные возможности, зависящие от операционной системы, для получения доступа к таймерам с высоким разрешением, если они доступны. Если таймеры с высоким разрешением в ОС недоступны, то используются обычные таймеры.

Несмотря на то, что TStopwatch — это запись, для корректного использования всё же необходимо вызывать метод Create или StartNew.

Описание TStopwatch следующее:

  • Свойство IsHighResolution указывает, основан ли таймер на счетчике производительности с высоким разрешением.
  • Метод Start() начинает измерять прошедшее время.
  • Метод Stop() останавливает измерение прошедшего времени.
  • Свойство ElapsedMilliseconds получает общее истекшее время в миллисекундах.
  • Свойство Elapsed получает истекшее время в виде TTimeSpan.

Воспользоваться возможностями TStopwatch также достаточно просто, например, так:

В представленном выше примере мы воспользовались TStopwatch и вывели количество минут (с дробной частью), пошедших на выполнение какой-то операции. В целом же, используя возможность TStopwatch.Elapsed можно выводить любые значения, ограниченные лишь возможностями TTimeSpan (см. справку).

Подведем итог

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

Если ваше требование к точности измерения времени ограничивается миллисекундой — используйте GetTickCount(): просто, достаточно надежно (только, если вы не планируете измерять интервал времени больше 49,7 дней).

Функции Delphi: описание, возможности, советы и рекомендации

Delphi — это проприетарная среда разработки (IDE) для Pascal в Windows. Она реализует объектно-ориентированную версию языка. Среда разработки базируется на графическом интерфейсе, связанного с редактором исходного кода функции Delphi. Язык программирования завоевал популярность благодаря простоте использования при разработке графических приложений и программ, связанных с базой данных.

Массивы — основа программирования

Borland Software Corporation в 1995 году выпустила преемника Turbo Pascal — Delphi, интегрированную среду разработки, использующую свой собственный диалект Object Pascal для облегчения приложений Windows. По сравнению с IDE, функции Delphi имели беспрецедентную поддержку баз данных, создавая многомерную среду, позволяющую программистам писать код быстрее и с меньшим количеством ошибок, чем когда-либо прежде.

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

Первоначально массив в Delphi-программе был статическим. Это означало, что его размер должен был быть известным во время написания кода.

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

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

Если в ходе работы программы нужно изменить размер — со статическими массивами это просто невозможно, а с динамическими — легко реализуемо. Для этого вызывают SetLength и используют вновь выделенные элементы в массиве. После того как размер изменен, оригинальные элементы по-прежнему находятся в нем и никакие данные не будут потеряны.

Статистические и динамические массивы

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

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

  1. Поле размера обновляется.
  2. Новый (внутренний) статический массив функции Delphi 7 выделяется с новым размером.
  3. Элементы старого статического копируются в новый.
  4. Указатель статического изменяется на новый.

Если в текущей позиции внутреннего статического массива достаточно места для перераспределения, и существует одна переменная, ссылающаяся на массив, происходит только шаг № 1. Все это реализуется каждый раз, когда изменяют его длину.

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

Строковые операторы

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

Перед назначением данных String переменной требуется знать четыре строковых типа. Короткая строка функции Delphi — Shortstring. Это подсчитанный массив (ASCII) символов, содержащий до 255 знаков в строке. Первый байт этого массива хранит длину. Этот принцип функционирования был основным в Delphi 1 (16-битный Delphi) и создавал переменную с именем small, максимальная длина которой составляла 50 символов.

Когда присваивают значение переменной Short String, строка усекается. Особенно если она превышает максимальную длину этого типа.

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

  1. Целое число — это целые числа, например, 42 или -5.
  2. Одинарное или двойное — используются, как тип с запятыми, например, 3,3.

Операции могут быть применены к числовым переменным:

  • сложение;
  • вычитание;
  • умножение;
  • модуль — может быть применен только к целому числу;
  • char — используется, чтобы содержать один символ, например, m;
  • строка — используется, чтобы содержать предложения, например, Hello world;
  • логические значения — True и False.

Чтобы объединить 2 строки символов, используют оператор «+». Пример: Hello + world будет реализовано, как Hello world.

Переменные и константы

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

При использовании переменной, ее объявляют во всех файлах, где она используется. Только переменные, переданные в качестве параметра Delphi функции и процедуры, не объявляются в той, где они применяются. Для объявления используют ключевое слово var. Они могут быть объявлены в .DPR или в процедурах файлов .pas.

Компонент TDBGrid Delphi является одной из жемчужин VCL. Разработанный таким образом, чтобы позволить пользователю просматривать и редактировать данные в табличной сетке, он предоставляет различные способы настройки способа представления данных. Например, добавление цвета в сетки базы данных улучшит внешний вид и разграничит важность определенных строк или столбцов в БД.

Delphi файлы

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

Чертеж формы, содержащий свойства графических компонентов

Файл проекта — это сердце приложения, связывает все различные файлы, содержащие код (.pas) с .DPR с функцией даты Delphi

Исходный файл, содержащий код приложения

Файл проекта, связанный с .DPR

Файл ресурсов Windows

Таблица файлов, генерированных после компиляции.

Файл проектной группы.

Файл, созданный во время компиляции, но не обязательный.

Исходный файл пакета.

Файл опций проекта.

Файл ресурсов Windows, он может содержать значки, растровые изображения, звуки.

Функция Pos

Функция POS Delphi возвращает целое число, указывающее позицию первого вхождения одной строки в другую. Это создается следующим образом. Pos ищет первое полное вхождение указанной строки. Обычно предлагается в одинарных кавычках в источнике. Источником является некоторая переменная.

Если Pos находит строку, он возвращает позицию символа в Source, а первого символа в Str, как целочисленного значения, в противном случае функция Delphi возвращает 0. String и Source будут строками. Старомодная функция Pos — наиболее распространенный способ поиска и всегда расположена в начале.

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

Импорт библиотечных функций

Для импорта подпрограмм библиотеки (.DLL) присоединяют директиву в виде: externalstringConstant, по-окончанию заголовка функций и процедур, где string Constant — имя библиотечного файла в кавычках. Есть возможность импортировать подпрограмму с другим названием. Для этого указывают оригинальное имя во внешней директиве:

External stringConstant1, namestringConstant2.

Где первый string Constant указывает имя библиотечного файла, а второй является исходным именем подпрограммы. Следующий оператор выполняет импорт функции из user32.dll. Первоначальное имя функции — MessageBoxA. Вместо имени можно использовать номер, чтобы идентифицировать подпрограмму для импорта:

Где integerConstant индекс подпрограммы в экспортной таблицы.

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

Пример создания одномерного массива

Допустим, нужно сформировать 3 одномерных массива для 50 членов общества разработчиков программного обеспечения. 1-й массив — имена, 2-й — электронная почта, а 3-й — число загрузок.

Любой из них имеет индексы и код, чтобы поддерживать все 3 перечня синхронно. Естественно, можно попробовать с одним массивом. Для этого необходимы строки имен и адресов почты, и целое число загрузок.

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

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

Тип функции Delphi Member охватывает 3 поля: строковое значение Name, eMail и целое число Posts. В последствии того, как будет установлен тип записи, можно объявить переменную Member. Она не выделяет памяти для имен, eMail и Posts. Для того чтобы практически создать запись Member, объявляют ее переменную.

Использование компонентов OnMouseOver

Код для событий OnMouseMove создают с компонентом TDBGrid, чтобы можно было найти строки и столбцы DBGrid (ячейки) в месте наведения курсора мыши. Если он расположен над сеткой, то срабатывает обработчик события OnMouseMove. Тогда используют метод MoveBy компонента DataSet, чтобы установить отображаемую текущую запись.

Равнозначный код используют для того, чтобы продемонстрировать место, где находится курсор мыши, и поменять его, когда он расположен над строкой заголовка. Для правильной установке активной записи требуется «взломать» DBGrid и получить доступ к защищенному свойству Row. Строки свойств TCustomDBGrid компонента содержат ссылку на текущие активные строки.

Много компонентов обладают полезными свойствами и методами, отмеченными как невидимые или защищенные разработчиками Delphi. Доступ к таким элементам обеспечивается применением простой техники, называемой «защищенный взлом».

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

Скиннинг Delphi Applications

Эти компоненты изменяют внешний вид приложений, добавляя темы и оболочки. Это простой способ улучшить графический интерфейс пользователя (GUI). VCLSkin — легкий в использовании компонент для создания графического интерфейса приложения Delphi. VCLSkin создаст тему или обложку для него без каких-либо изменений исходного кода.

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

У скинов есть много объектов и эффектов для крутых приложений, таких как WinAmp и iTunes. Специальный редактор позволяет пользователю настраивать скины. SkinAdapter является компонентом DynamicSkinForm, который позволяет создавать скины приложений без изменения исходного кода.

SUISkin предлагает автоматическое приложение с поддержкой скинов. С ним модификаций для существующих проектов не требуется. Просто перетаскивают компонент движка скина на основную форму и устанавливают некоторые свойства. Он будет автоматически обрабатывать все формы и диалоги. Файлы скинов могут быть скомпилированы в EXE-файл. Во время выполнения можно легко переключать или выключать их.

Пакет разработки пользовательского интерфейса App Face — это решение для создания визуальных графических интерфейсов приложений, которые можно использовать в VC, VB.Net, Delphi, Visual Basic, C ++ Builder и Win32 SDK. Он включает в себя управление скинами, средство создания визуальных скинов, примеров исходного кода, а также технического руководство. Библиотека appface.dll, является компонентом ядра и может автоматически обработать все созданные окна в целевом приложении.

Преимущества среды программирования

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

Основания почему до сих пор используют Delphi:

  1. Четкий синтаксис, делающий код максимально читабельным.
  2. Механизм перетаскивания для реализации, позволяющий быстро создавать программное обеспечение GUI.
  3. Поддержка баз данных SQL.
  4. Поддерживает весь Windows API.
  5. Полно-объектно-ориентированное программирование.
  6. Совместим с C ++.
  7. Сильно адаптируемая среда VCL.
  8. Требуется минимальное обслуживание приложений.

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

Использование замыканий и функций высших порядков в 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. Самое интересное в этом подходе заключается в том, что он следует принципу отложенных вычислений: значения «извлекаются» из генератора (или из конвейера) по мере необходимости, а не все сразу. Эту особенность демонстрирует следующий пример, в котором исходный текст фильтруется, построчно проходя через цепочку генераторов.

Now — Функция Delphi

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

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

Кто знает — подскажите.

З.Ы.Дэлфи-консольное приложение. так что если дополнительные подули нужны — напишите плиз.

Модуль DateUtils.pas (в поставке Delphi).
Из этого модуля можно применить функцию MilliSecondsBetween.

procedure TestingFunc;
var T1 : TDateTime; MS : Integer (или Int64);
begin
T1 := Now;
. //тело тестируемой функции
MS := MilliSecondsBetween(Now, T1);
end;

Sanya
именно ими и надо мерять. RDTSC назвается и есть у всех процессоров, начиная с первого пентиума. Скорость выполнения большинства функций gettickcount ом не засечешь, даже если 1000 раз подряд фукнцию вызовешь. Получить текущее значение такта можно так:
function GetCPUTick: int64; assembler;
asm
db 0fh,31h; //rdtsc
end;

Получив этой фукнцией до выолнения и после выполнения ты получишь ПОЧТИ точное кол-во тактов на выполнение фукнции. Почти, потому что время второго вызова RDTSC тоже немножко отжирает. Совсем чуток :)
Darthman1145111327
Кстати, именно этой фукнцией офигенно удобно отлаживать критические к скорости процедуры и куски кода. Отлаживать всмысле смотреть ускорил ты, или замедлил :)

implementation
var t1,diff:Tdatetime ;

procedure TForm1.Button1Click(Sender: TObject);
begin
t1:=now;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
diff:=now-t1;
edit1.text:=TimeTostr(diff);
end;
в результате в поле edit1 отображается время прошедшее между последовательными нажатиями button1 и button2 в следующем формате hh:mm:ss Пойдет?

если вместо TimeTostr(diff) использовать FormatFloat(‘0.00’,diff*24*60*60);
то промежуток времени будет выражен в секундах с сотыми долями. sysutils коорый используется функией now ввключается в uses лист форм по умолчанию.

MilliSecondsBetween(Now, T1);
стало быть функция MilliSecondsBetween(x1,x2)=24*60*60*1000*(x1-x2) :)

Справочник по компонентам Delphi. Часть 1
Страница 11. Функции работы с датами и временем

Функции работы с датами и временем

В Delphi для хранения дать! и (или) времени предусмотрен формат TDateTime, представляющий собой, на самом деле, обычное число с плавающей точкой.

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

procedure TFormI.PormCreate(Sender: TObject);

Функции этой группы приведены в таблице:

function EncodeDate(Year, Month, Day: Word): TDateTime;

Преобразует дату, заданную раздельно годом, месяцем и днем, в формат TDateTime. Если они выходят за допустимые пределы, возникает ИС EConvertError.

procedure DecodeDatefDate: TDateTime; var Year, Month, Day: Word);

Преобразует дату в виде TDateTime к раздельным составляющим: году, месяцу и дню.

function EncodeTimefHour, Min, Sec, MSec: Word):

Преобразует значение времени, заданное часом, минутой, секундой и миллисекундой в формат TDateTime.

procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) ;

Преобразует значение времени в формате TDateTime в раздельные составляющие: час, минуту, секунду и миллисекунду.

function DayOfWeektDate: TDateTime): Integer;

Возвращает номер текущего дня недели от 1 (воскресенье) до 7 (суббота).

Возвращает текущую дату.

Возвращает текущее время.

Возвращает текущие дату и время.

function DateToStr(Date: TDateTime): string;

Преобразует дату Date в текстовую строку.

function TimeToStr(Time: TDateTime): string;

Преобразует время из типа TDateTime в текстовую строку.

function DateTimeToStr(DateTime: TDateTime): string;

Преобразует дату и время из типа TDateTime в текстовую строку.

function StrToDatefconst S: string): TDateTime;

Преобразует текстовую строку в дату типа TDateTime. Строка должна содержать два или три числа, разделенных символом, содержащимся в DateSeparator. Формат даты в строке определяется в соответствии со значением переменной ShortDateFormat.

function StrToTime(const S: string): TDateTime;

Преобразует текстовую строку S в значение времени. Должен использоваться формат HH:NN:SS, где SS — может принимать значения ‘AM’ или ТМ’, иначе означает секунды. Если необходимо получать время в 24-х часовой шкале, то элемент SS формата опус­кается. Если преобразование невозможно, возникает ИС EConvertError.

StrToDateTime(const S: string): TDateTime;

Преобразует текстовую строку S в дату и время в формате MM/DD/YY HH:NN:SS (элемент SS см. выше).

function FormatDateTime(const Format: string; DateTime: TdateTime): string;

Преобразует дату и время из типа TDateTime в тек­стовую строку, используя формат, задаваемый параметром Format (см. примеч. 1).

procedure DateTimeToStringfvar Result: string; const Format: string; DateTime: TDateTime);

Преобразует дату и время типа TDateTime в строку Result, используя формат, передаваемый параметром Format (см. примеч. 1).

1. Правила задания спецификатора формата для даты и времени отлича­ются от рассмотренных выше. В первую очередь надо иметь в виду то, что функции вроде FormatDateTime оперируют над одним значением TDateTime, а спецификаторы формата извлекают из него те или иные составные части. При этом могут использоваться:

Отображает дату, используя формат ShortDateFormat, затем отобра­жается время в формате LongTimeFormat. Время не отображается, если дробная часть переменной DateTime нулевая.

Отображает число месяца без нуля в левом разряде (1-31).

Отображает число месяца с нулем в левом разряде (01-31).

Отображает день недели в соответствии с сокращенными именами из переменной ShortDayNames.

Отображает день недели в соответствии с полными именами из переменной LongDayNames.

Отображает дату в соответствии с форматом ShortDateFormat.

Отображает дату в соответствии с форматом LongDateFormat.

Отображает месяц как число без нуля в левом разряде (1-12).

Отображает месяц как число с нулем в левом разряде (01-12).

Отображает месяц в соответствии с сокращенными именами из переменной ShortMonthNames.

Отображает месяц в соответствии с полными именами из переменной Long MonthN am es.

Отображает год двумя цифрами.

Отображает год четырьмя цифрами.

Отображает час как число без нуля в левом разряде (0-23).

Отображает час как число с нулем в левом разряде (00-23).

Отображает минуты как число без нуля в левом разряде (0-59).

Отображает минуты как число с нулем в левом разряде (00-59).

Отображает секунды как число без нуля в левом разряде (0-59).

Отображает секунды как число с нулем в левом разряде (00-59).

Отображает время в соответствии с форматом ShortTimeFormat.

Отображает время в соответствии с форматом LongTimeFormat.

Отображает время в 12-часовой шкале. ‘AM’ означает часы до полудня, ‘РМ’ — часы после полудня.

Отображает время в 12-часовой шкале. При этом для времени до полудня отображается содержимое переменной TimeAMString, а после полудня — TimePMString.

Отображает время в 12-часовой шкале, ‘а’ означает часы до полудня, ‘р’ — часы после полудня.

Отображает символ — разделитель даты, содержащийся в переменной DataSeparator.

Отображает символ — разделитель времени, содержащийся в переменной TimeSeparator.

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

Например, результатом вызова функции с параметрами

FormatDateTime (‘ «Совещание состоится в» dddd, dirrmim, yyyy, ‘ + ‘ «в» hh:nn’, StrToDateTime(’12/31/95 23:55′)) ;

будет строка ‘Совещание состоится в среду, 31 декабря 1995 в 23:55’ (естес­твенно, если вы переопределили значения элементов массива LongMonth-Names).

3. Спецификаторы могут быть указаны как в верхнем, так и в нижнем регистрах символов — это не играет роли.

Функции 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, преобразующей фунты в килограммы.

Илон Маск рекомендует:  VPS VDS хостинг администрировать самому или платить Что лучше
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL