IncMonth — Функция Delphi


Как DateTime перейти на несколько дней назад

01.02.2013, 11:52

Странные лаги (подтормаживания) Windows 10, которые начались несколько дней назад
Всем доброго времени суток! Сразу хочу извиниться за заголовок, т.к. точнее подобрать его не смог.

Как перейти на другую форму окна, и вернуться назад
С# Как перейти на другую форму окна , и назад вернуться (без диалоговых окон) Нужно перейти в.

Как из DateTime вычесть число(дней)
Вот даны два числа одно datetime второе double В аксесе вычитает только в путь, а в С++/CLI пишет .

С# WPF Как перейти на другую форму окна , и назад вернуться (без диалоговых окон)
С# WPF Использование XAML старт формы файлы форм Window1.xaml // подобие.

Кнопка назад: перейти обратно на первую форму
Уже замучилась. Подскажите пожалуйста!Вот есть просто две формы: ФОРМА 1: using System; using.

IncMonth — Функция Delphi

The time component of the StartDate value is passed unchanged to the output value.

The year value is incremented as appropriate.

The increment value is optional, being 1 by default.

After incrementing the month, if the day value is too high for that month/year, then it is reduced to the highest value for that month/year. Notes There is no DecMonth function.

Instead, use IncMonth with a negative increment. Related commands

IncDay Increments a TDateTime variable by + or — number of days
IncMinute Increments a TDateTime variable by + or — number of minutes
IncYear Increments a TDateTime variable by a number of years
IncSecond Increments a TDateTime variable by + or — number of seconds
IncMillisecond Increments a TDateTime variable by + or — number of milliseconds
Example code : Add values to an example date
// Full Unit code.
// ————————————————————
// You must store this code in a unit called Unit1 with a form
// called Form1 that has an OnCreate event called FormCreate.

unit Unit1;

uses
SysUtils, // Unit containing the IncMonth command
Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;

var
Form1: TForm1;

implementation
<$R *.dfm>// Include form definitions

Функции Delphi модуля SysUtils

Модуль SysUtils

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

AnsiCompareStr Сравнение двух строк на равенство
AnsiCompareText Сравнение двух строк на равенство
AnsiLowerCase Символы верхнего регистра изменяются в строку со строчными буквамм
AnsiPos Находит позицию одной строки в другой
ChangeFileExt Изменяет расширение имени файла
CompareStr Сравнивает две строки, чтобы увидеть, какая из них больше
CompareText Сравнивает две строки, игнорируя регистр
CreateDir Создаёт директорию
CurrToStr Преобразует денежную величину в строку
CurrToStrF Преобразует денежную величину в строку с форматированием
Date Возвращает текущую дату
DateTimeToFileDate Преобразует значение TDateTime в формат date/time формат файла
DateTimeToStr Конвертирует значение даты и времени TDateTime в строку
DateToStr Преобразует значение даты TDateTime в строку
DayOfWeek Выдает индекс дня недели для значения TDateTime
DeleteFile Удаляет файл, указанный в параметре
DirectoryExists Возвращает true, если указанная директория существует
DiskFree Выдает число свободных байтов на указанном диске
DiskSize Выдает размер указанного диска в байтах
EncodeDate Формирует значение TDateTime из значений года, месяца и дня
EncodeTime Формирует значение TDateTime из значений часа, минуты, секунды и миллисеккунды
ExtractFileDir Извлекает из полного имени файла название папки
ExtractFileDrive Извлекает из полного имени файла название диска
ExtractFileExt Извлекает из полного имени файла его расширение
ExtractFileName Извлекает из полного имени файла краткое имя файла
ExtractFilePath Извлекает из полного имени файла название патча
FileAge Получение дата/время последнего изменения файла, не открывая его
FileDateToDateTime Конвертирует формат даты/времени файла в значение TDateTime
FileExists Возвращает True если указанный файл существует
FileGetAttr Выдаёт атрибуты файла
FileSearch Поиск файла в одной или более папках
FileSetAttr Устанавливает атрибуты файла
FindClose Закрывает успешный FindFirst поиск файла
FindCmdLineSwitch Определяет, был передан некоторый параметр выключатель
FindFirst Находит все файлы, соответствующие маске файла и атрибутов
FindNext Находит следующий файл после успешного FindFirst
FloatToStr Преобразует значение с плавающей запятой в строку
FloatToStrF Преобразует значение с плавающей запятой в строку с форматированием
ForceDirectories Создаёт новый путь каталогов
Format Богатое форматирование чисел и текста в строке
FormatCurr Богатое форматирование значений валюты в строку
FormatDateTime Богатое форматирование переменной TDateTime в строку
FormatFloat Богатое форматирование числа с плавающей запятой в строку
GetCurrentDir Возвращает текущий каталог (диск плюс каталог)
IncMonth Увеличивает TDateTime переменную на некоторое число месяцев
IntToHex Преобразует целое число в шестнадцатеричную строку
IntToStr Конвертирует целое число в строку
IsLeapYear Возвращает True, если данный календарный год високосный
LastDelimiter Находит последнюю позицию указанных символов в строке
LowerCase Изменяет символы верхнего регистра в строке в строчные буквы
Now Выдает текущую дату и время
RemoveDir Позволяет удалить директорию
Rename Переименовка фала
RenameFile Переименование файла или директории
SetCurrentDir Изменяет текущую директорию
StrScan Ищет заданные символы в строке
StrToCurr Преобразует числовую строку в денежное выражение
StrToDate Конвертирует строку с датой в значение типа TDateTime
StrToDateTime Конвертирует строку с датой и временем в значение типа TDateTime
StrToFloat Преобразует числовую строку в значение с плавающей запятой
StrToInt Преобразует строку с целым значением в Integer
StrToInt64 Преобразует строку с целым значением в Int64
StrToInt64Def Преобразует строку с целым значением в Int64, учитывая значение по умолчанию
StrToIntDef Преобразует строку с значение с типом Integer, учитывая значение по умолчанию
Time Возвращает текущее время
TimeToStr Конвертирует значение времени типа TDateTime в строку
Trim Удаляет начальные и конечные пробелы в строке
TrimLeft Удаляет начальные пробелы в строке
TrimRight Удаляет конечные пробелы в строке
UpperCase Изменяет символы в строке из нижнего регистра в верхний
WrapText Добавьте перенос строки в строку, чтобы имитировать перенос слов
Abort Прерывает обработку команд и выходит к последнему исключительному блоку
AppendStr Конкатенация одной строки в конец другой
Beep Делает звук гудка
DateTimeToString Огромные возможности форматирования даты в строку
DecodeDate Извлекает значения года, месяца, дня из TDateTime переменной
DecodeDateTime Разбивает TDateTime переменную на ее части даты/времени
DecodeTime Разбивает значение TDateTime на отдельные значения времени
FreeAndNil Освобождение памяти объекта и установка его в nil
FreeMem Освобождает память, используемую переменной
GetLocaleFormatSettings Получает региональные значения для безопасных потоков функций.
ReplaceDate Изменяет только часть даты TDateTime переменной
ReplaceTime Изменяет только часть времени TDateTime переменной

IncMonth 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.)

Процедуры и функции RX_lib

Процедуры и функции RX_lib

Содержание материала

AppUtils unit:

AppBroadcast — Функция посылает сообщение Msg всем формам приложения.

FindForm — Функция перебирает формы приложения, проверяя для каждой из них, является ли она экземпляром класса FormClass

FindShowForm — Функция перебирает формы приложения, проверяя для каждой из них, является ли она экземпляром класса FormClass

GetDefaultIniName — Функция возвращает имя INI-файла «по умолчанию» для приложения.

GetDefaultIniRegKey — Функция возвращает имя ключа регистрационной базы данных Windows (Registry) «по умолчанию» для приложения

GetDefaultSection — Функция возвращает строку для указанной компоненты Component,

GetUniqueFileNameInDir — Возвращает уникальное для заданного каталога имя файла, InstantiateForm- функция создает экземпляр формы типа FormClass

ReadFormPlacement — Процедура ReadFormPlacement используется для восстановления формы

RestoreFormPlacement — Процедура RestoreFormPlacement используется для восстановл. формы

RestoreGridLayout — Восстанавливает из INI-файла ширины колонок компонент TCustomGrid

RestoreMDIChildren — Создает и показывает MDIChild-формы

SaveFormPlacement — Процедура используется для сохранения состояния формы

ShowDialog — Создание и модальное исполнение диалога

WriteFormPlacement — Процедура используется для сохранения состояния формы,

BdeUtils unit:

AsyncQrySupported — Функция возвращает True, если драйвер специфицированной базы данных Database поддерживает асинхронное выполнение запросов

CheckOpen — Функция служит для обрамления вызовов функций BDE API, открыв. курсоры

ConvertStringToLogicType — Процедура предназначена для конвертации строки Value в BDE,

CurrentRecordDeleted — Функция определяет, является ли текущая запись набора данных удаленной (помеченной как удаленная) или нет

DataSetFindValue — Функция пытается установить набор данных, переданный в качестве параметра DataSet, на первую от начала запись, удовлетворяющую заданному условию

DataSetPositionStr — Для драйверов DBase и Paradox функция возвращает строку, содержащую текущий номер записи и полное число записей в DataSet

DataSetRecNo — Функция возвращает номер текущей записи в DataSet.

DataSetShowDeleted — Процедура устанавливает режим показа удаленных записей в таблицах формата DBase.

DeleteRange — Удаление диапазона записей из таблицы.

ExecuteQuery — Процедура предназначена для выполнения SQL-запросов

ExportDataSet — Процедура служит для экспорта данных из таблицы БД или результата запроса Source в выходную таблицу DestTable.

FieldLogicMap — Функция возвращает для конкретного значения FldType получить для целочисленное значение, идентифицирующее логический тип данных BDE.

GetAliasPath — Функция возвращает физический путь для алиаса (псевдонима) BDE

GetBDEDirectory — Функция возвращает имя каталога, в котором установлены библиотеки BDE InitRSRun — Инициализация RUNTIME ReportSmith.

IsBookmarkStable — Return True, if specified DataSet supports stable bookmarks

PackTable — Процедура предназначена для «упаковки» таблиц формата DBase и Paradox

RestoreIndex — Восстанавливает свойство IndexFieldNames у Table

SetIndex -Устанавливает свойство IndexFieldNames у Table

SetToBookmark — Функция устанавливает ADataSet в позицию, соответствующую переданному значению ABookmark

TransActive — Функция определяет, имеет ли база данных Database активную транзакцию и в этом случае возвращает True, в противном случае результат — False.

BoxProcs unit:

BoxDragOver — Предполагается вызывать из обработчика события OnDragOver.

BoxMoveAllItems — Копирует все элементы SrcList в DstList, затем очищает SrcList.

BoxMoveFocusedItem — Предполагается использовать в обработчике события OnDragDrop.

BoxMoveSelectedItems — Перемещает выделенные элементы из SrcList в DstList

ClipIcon unit:

AssignClipboardIcon — Процедура заполняет иконку Icon данными из буфера обмена (Clipboard)

CreateIconFromClipboard — Функция создает объект класса TIcon, если буфер обмена (Clipboard) содержит данные в формате CF_ICON.

CreateRealSizeIcon — Функция создает иконку из объекта Icon класса TIcon

DrawRealSizeIcon — Функция рисует иконку Icon на устройстве Canvas,

GetIconSize — Процедура возвращает ширину и высоту иконки,

DateUtil unit:

CutTime — Устанавливает время в переданном аргументе ADate в значение 00:00:00:00.

DateDiff — Определяет разницу между датами, заданными Date1 и Date2 в днях, месяцах и годах.

DaysBetween — Вычисляет число дней между датами Date1 и Date2,

DaysInPeriod — Вычисляет число дней между датами Date1 и Date2

DefDateFormat — Функция возвращает строку формата даты по ShortDateFormat,

DefDateMask — Функция возвращает строку маски для ввода даты

GetDateOrder — Функция возвращает порядок расположения дня, месяца и года в формате даты,

IncDate — Увеличивает дату ADate на заданное количество дней, месяцев и лет, возвращая полученную дату как результат.

IncDay — Увеличивает дату на заданное количество дней, возвращая полученную датуIncHour

IncMinute — Увеличивает время на заданное количество минут, возвращая полученное время IncMonth

IncTime — Увеличивает время на заданное количество часов, минут, секи мс, возвращая время IncYear

IsLeapYear — Проверяет является ли заданный параметром AYear год високосным.

StrToDateDef — Функция преобразует строку в дату в соответствии с форматом ShortDateFormat

ValidDate — Функция определяет, представляет ли собой аргумент ADate действительное значение существующей даты.

Добавить комментарий

Не использовать не нормативную лексику.

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

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!

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 дней).

IncMonth — Функция Delphi

Delphi, компоненты классы Delphi. Работа в delphi xe, delphi xe2, delphi xe3, delphi xe4, xe5, delphi xe6, delphi xe7. Firemonkey android delphi. Delphi 10

Рейтинг Alexa: #463,742 Google PageRank: 0 из 10 Яндекс ТИЦ: 0

delphi-faq.net сайт посвящен программированию на delphi примеры delphi исходники delphi компоненты

Google PageRank: 0 из 10

Вы найдете на сайте много полезной информации на темы: создания приложений Delphi, работы с компонентами Delphi, с базами данных, будут приведены уроки Delphi с примерами, интеграция Delphi программ с excel

Рейтинг Alexa: #2,707,838 Google PageRank: 2 из 10

Записки программиста о программировании на Delphi. Работа с проектами в Delphi. Delphi 2010 и новые возможности. Обзоры бесплатных инструментов и компонентов. Описание ошибок, с которыми пришлось столкнуться автору. Описание JVCL.

delphi , jcl , jvcl , переводы , генерики

Рейтинг Alexa: #2,769,374 Google PageRank: 2 из 10 Яндекс ТИЦ: 30

Delphi.| Пошаговая инструкция создания программы на Delphi — чайнику! Сайт для начинающего программиста на Delphi.Всё для обучения программированию на Delphi книги, видеоуроки, исходники и программы.

Рейтинг Alexa: #6,180,012 Google PageRank: 0 из 10 Яндекс ТИЦ: 30

Готовые программы написанные на delphi

Google PageRank: 0 из 10

Delphi-Help — первая помощь по Delphi

delphi , делфи , дельфи , исходники , статьи

Google PageRank: 0 из 10 Яндекс ТИЦ: 20

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

Рейтинг Alexa: #1,940,887 Google PageRank: 3 из 10

The Delphi — это сайт, где Вы научитесь программировать, писать свои собственные программы и игры на Delphi, а так же найдете статьи, исходники и компоненты. Автор сайта Савельев Александр.

программирование , delphi , уроки , примеры , исходники

Рейтинг Alexa: #3,801,315 Google PageRank: 1 из 10

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

Рейтинг Alexa: #148,689 Google PageRank: 3 из 10

DelphiComponent.ru — все компоненты Delphi на одном сайте. Видеоуроки, компоненты, исходники, программы.

Рейтинг Alexa: #2,112,164 Google PageRank: 0 из 10 Яндекс ТИЦ: 20

Блог программиста-самоучки о Delphi и Java. Применение опыта написания программ в системном администрировании для автоматизации рутинных действий.

Рейтинг Alexa: #8,459,348 Google PageRank: 0 из 10

Рейтинг Alexa: #7,205,022 Google PageRank: 0 из 10 Яндекс ТИЦ: 40

Скачать бесплатно компоненты для Delphi

delphi , embarcadero , компоненты , components , cкачать

Рейтинг Alexa: #587,898 Google PageRank: 0 из 10 Яндекс ТИЦ: 10

Google Тренды это диаграмма для отслеживания сезонности ключевых слов. Этот график позволяет лучше понять сезонное изменение полулярности запросов по определенной тематике.

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

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

Содержание:


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


Тип TDateTime.


Тип TTimeStamp.


Тип TSQLTimeStamp.


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


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

Значения символических констант для обозначения дней недели в соответствии с ISO 8601. Используйте эти константы для работы с функциями, работающими в соответствии со стандартом ISO 8601 (функции из модуля DateUtils).

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

Возвращает день недели из значения TDateTime. Возвращаемое функцией значение находится в промежутке между 1 и 7, где 1 соответствует Понедельнику (Monday), а 7 — Воскресение (Sunday).

Внимание: Значения DayOfTheWeek соответствуют ISO 8601 (где Понедельник (Monday) является первым днем недели). Если хотите чтобы первым днем недели считалось Воскресение (Sunday) используйте функцию DayOfWeek вместо функции DayOfTheWeek.

Совет: Чтобы сделать возвращаемые значения более читабельными, используйте константы Day of week.

Возвращает день недели из значения TDateTime. Возвращаемое функцией значение находится в промежутке между 1 и 7, где Воскресение (Sunday) является первым днем недели, а Суббота (Saturday) — седьмым.

Внимание: Значения DayOfWeek не соответствуют ISO 8601 (где Понедельник (Monday) является первым днем недели). Если хотите чтобы первым днем недели считался Понедельник (Monday) используйте функцию DayOfTheWeek вместо функции DayOfWeek.

Наименование Вид
модуль
Описание
CheckSqlTimeStamp процедура
SqlTimSt
Проверяет соответствует ли значение TSQLTimeStamp правильной дате и времени.
CompareDate функция
DateUtils
Сравнивает два значения TDateTime между собой по значению даты.
CompareDateTime функция
DateUtils
Сравнивает два значения TDateTime между собой.
CompareTime функция
DateUtils
Сравнивает два значения TDateTime между собой по значению времени.
CurrentYear функция
SysUtils
Возвращает текущий год.
Date функция
SysUtils
Возвращает текущую дату.
DateDelta константа
SysUtils
Определяет различие между значениями TDateTime и TTimeStamp.
DateOf функция
DateUtils
«Вырезает» значение времени из TDateTime (устанавливает значение времени в 0, что означает полночь).
DateTimeToFileDate функция
SysUtils
Конвертирует объект TDateTime в формат времени операционной системы.
DateTimeToSQLTimeStamp функция
SqlTimSt
Конвертирует значение TDateTime в TSQLTimeStamp.
DateTimeToStr функция
SysUtils
Конвертирует значение TDateTime в строку.
DateTimeToString процедура
SysUtils
Конвертирует значение TDateTime в строку, используя указаный формат строки.
DateTimeToSystemTime процедура
SysUtils
Конвертирует значение TDateTime в системное время Win32 API.
DateTimeToTimeStamp функция
SysUtils
Конвертирует значение TDateTime в соответствующее значение TTimeStamp.
DateToStr функция
SysUtils
Конвертирует значение даты из TDateTime в строку.
Day of week константы
DateUtils
DayOf функция
DateUtils
Возвращает день месяца из значения TDateTime. Возвращаемое функцией значение находится в промежутке между 1 и 31.
DayOfTheMonth функция
DateUtils
Возвращает день месяца из значения TDateTime. Возвращаемое функцией значение находится в промежутке между 1 и 31.
DayOfTheWeek функция
DateUtils
DayOfTheYear функция
DateUtils
Возвращает количество дней между значением, указаным в TDateTime и 31 Декабря предыдущего года.
DayOfWeek функция
SysUtils
DaysBetween функция
DateUtils
Возвращает количество полных дней из промежутка времени, заданного двумя значениями TDateTime.
DaysInAMonth функция
DateUtils
Возвращает количество дней в указаном месяце указаного года.
DaysInAYear функция
DateUtils
Возвращает количество дней в указаном году.
DaysInMonth функция
DateUtils
Возвращает количество дней в месяце, заданом в значении TDateTime.
DaysInYear функция
DateUtils
Возвращает количество дней в году, заданом в значении TDateTime.
DaySpan функция
DateUtils
Возвращает количество дней, включая дробную часть, из промежутка времени, заданного двумя значениями TDateTime.
DecodeDate процедура
SysUtils
Возвращает значения Год, Месяц, День для значения TDateTime.
DecodeDateDay процедура
DateUtils
Возвращает год и день года для значения, указаного в TDateTime.
DecodeDateFully функция
SysUtils
Возвращает значения Год, Месяц, День, День_Недели для значения TDateTime.
DecodeDateMonthWeek процедура
DateUtils
Возвращает значения Год, Месяц, Неделя_Месяца, День_Недели для значения TDateTime.
DecodeDateTime процедура
DateUtils
Возвращает значения Год, Месяц, День, Час, Минута, Секунда, Милисекунда для значения TDateTime.
DecodeDateWeek процедура
DateUtils
Возвращает значения Год, Неделя_Года, День_Недели для значения TDateTime.
DecodeDayOfWeekInMonth процедура
DateUtils
Для заданного значения TDateTime возвращает Год, Месяц, День_Недели и Число_Дней_в_Этой_Неделе_для_Этого_Месяца.
DecodeTime процедура
SysUtils
Разбивает значение TDateTime на часы, минуты, секунды и милисекунды.
EncodeDate функция
SysUtils
Возвращает значение TDateTime, заданое как Год, Месяц, День.
EncodeDateDay функция
DateUtils
Возвращает значение TDateTime, заданое как указаный день указаного года.
EncodeDateMonthWeek функция
DateUtils
Возвращает значение TDateTime, заданое как указаный день указаной недели в указаном месяце и году.
EncodeDateTime функция
DateUtils
Возвращает значение TDateTime, заданое как Год, Месяц, День, Час, Секунда, Милисекунда.
EncodeDateWeek функция
DateUtils
Возвращает значение TDateTime, заданое как указаный день указаной недели в указаном году.
EncodeDayOfWeekInMonth функция
DateUtils
Возвращает значение TDateTime, заданое как положение дня недели в указаном месяце и году.
EncodeTime функция
SysUtils
Возвращает значение TDateTime, заданое как часы, минуты, секунды и милисекунды.
EndOfADay функция
DateUtils
Возвращает значение TDateTime которое представляет последнюю милисекнду указаного дня.
EndOfAMonth функция
DateUtils
Возвращает значение TDateTime которое представляет последнюю милисекнду последнего дня указаного месяца.
EndOfAWeek функция
DateUtils
Возвращает значение TDateTime которое представляет последнюю милисекнду последнего дня указаной недели.
EndOfAYear функция
DateUtils
Возвращает значение TDateTime которое представляет последнюю милисекнду последнего дня указаного года.
EndOfTheDay функция
DateUtils
Возвращает значение TDateTime которое представляет последнюю милисекнду дня, указаного в TDateTime.
EndOfTheMonth функция
DateUtils
Возвращает значение TDateTime которое представляет последнюю милисекнду последнего дня месяца, указаного в TDateTime.
EndOfTheWeek функция
DateUtils
Возвращает значение TDateTime которое представляет последнюю милисекнду последнего дня недели, указаной в TDateTime.
EndOfTheYear функция
DateUtils
Возвращает значение TDateTime которое представляет последнюю милисекнду последнего дня года, указаного в TDateTime.
FormatDateTime функция
SysUtils
Возвращает значение TDateTime в виде форматной строки. Если форматная строка не задана, то принимается та, которая основана на текущей локализации системы.
HourOf функция
DateUtils
Возвращает час дня, из значения TDateTime.
HourOfTheDay функция
DateUtils
Возвращает час дня, из значения TDateTime.
HourOfTheMonth функция
DateUtils
Возвращает количество часов между указаным в значении TDateTime и 12:00 AM первого дня месяца.
HourOfTheWeek функция
DateUtils
Возвращает количество часов между указаным в значении TDateTime и 12:00 AM первого дня недели.
HourOfTheYear функция
DateUtils
Возвращает количество часов между указаным в значении TDateTime и 12:00 AM первого дня года.
HoursBetween функция
DateUtils
Возвращает количество полных часов между двумя значениями TDateTime.
HourSpan функция
DateUtils
Возвращает количество часов, включая дробную часть, между двумя значениями TDateTime.
IncAMonth процедура
SysUtils
Увеличивает дату на один месяц.
IncDay функция
DateUtils
Возвращает дату, сдвинутую на указаное число дней.
IncHour функция
DateUtils
Возвращает дату/время, сдвинутую на указаное число часов.
IncMilliSecond функция
DateUtils
Возвращает дату/время, сдвинутую на указаное число милисекунд.
IncMinute функция
DateUtils
Возвращает дату/время, сдвинутую на указаное число минут.
IncMonth функция
SysUtils
Возвращает дату, сдвинутую на указаное число месяцев.
IncSecond функция
DateUtils
Возвращает дату/время, сдвинутую на указаное число секунд.
IncWeek функция
DateUtils
Возвращает дату, сдвинутую на указаное число недель.
IncYear функция
DateUtils
Возвращает дату, сдвинутую на указаное количество лет.
IsInLeapYear функция
DateUtils
Показывает, принадлежит ли значение, указаное в TDateTime, високосному году.
IsLeapYear функция
SysUtils
Показывает, является ли указаный год високосным.
IsPM функция
DateUtils
Показывает, принадлежит ли значение времени, указаное в TDateTime, второй половине дня .
IsSameDay функция
DateUtils
Показывает, принадлежит ли значение, указаное в TDateTime, заданой дате.
IsToday функция
DateUtils
Показывает, принадлежит ли значение, указаное в TDateTime, текущей дате.
IsValidDate функция
DateUtils
Проверяет, являются ли указаные год, месяц и день допустимой датой.
IsValidDateDay функция
DateUtils
Проверяет, являются ли указаные год и день года допустимой датой.
IsValidDateMonthWeek функция
DateUtils
Проверяет, являются ли указаные год, месяц, неделя месяца и день недели допустимой датой.
IsValidDateTime функция
DateUtils
Проверяет, являются ли указаные год, месяц, день, час, минута, секунда и милисекунда допустимыми значениями даты и времени.
IsValidDateWeek функция
DateUtils
Проверяет, являются ли указаные год, неделя года и день недели допустимой датой.
IsValidTime функция
DateUtils
Проверяет, являются ли указаные час, минута, секунда и милисекунда допустимыми значениями даты и времени.
MilliSecondOf функция
DateUtils
Возвращает милисекунды из значения TDateTime.
MilliSecondOfTheDay функция
DateUtils
Возвращает количество милисекунд, прошедшее между значением указаным в TDateTime и началом этого самого дня.
MilliSecondOfTheHour функция
DateUtils
Возвращает количество милисекунд, прошедшее между значением указаным в TDateTime и началом этого самого часа.
MilliSecondOfTheMinute функция
DateUtils
Возвращает количество милисекунд, прошедшее между значением указаным в TDateTime и началом этой самой минуты.
MilliSecondOfTheMonth функция
DateUtils
Возвращает количество милисекунд, прошедшее между значением указаным в TDateTime и началом месяца.
MilliSecondOfTheSecond функция
DateUtils
Возвращает милисекунды из значения TDateTime.
MilliSecondOfTheWeek функция
DateUtils
Возвращает количество милисекунд, прошедшее между значением указаным в TDateTime и 12:00:00:00 AM первого дня недели.
MilliSecondOfTheYear функция
DateUtils
Возвращает количество милисекунд, прошедшее между значением указаным в TDateTime и 12:00:00:00 AM первого дня года.
MilliSecondsBetween функция
DateUtils
Возвращает количество милисекунд между двумя значениями TDateTime.
MilliSecondSpan функция
DateUtils
Возвращает количество милисекунд между двумя значениями TDateTime. Но в качестве результата вместо целого типа испльзуется число с плавающей точкой.
MinuteOf функция
DateUtils
Возвращает минуты из значения TDateTime.
MinuteOfTheDay функция
DateUtils
Возвращает количество минут между значением указаным в TDateTime и 12:00 AM того же дня.
MinuteOfTheHour функция
DateUtils
Возвращает количество минут, прошедшее между значением указаным в TDateTime и началом этого самого часа.
MinuteOfTheMonth функция
DateUtils
Возвращает количество минут, прошедшее между значением указаным в TDateTime и 12:00 AM первого дня месяца.
MinuteOfTheWeek функция
DateUtils
Возвращает количество минут, прошедшее между значением указаным в TDateTime и 12:00 AM первого дня недели.
MinuteOfTheYear функция
DateUtils
Возвращает количество минут, прошедшее между значением указаным в TDateTime и 12:00 AM первого дня года.
MinutesBetween функция
DateUtils
Возвращает количество полных минут между двумя значениями TDateTime.
MinuteSpan функция
DateUtils
Возвращает количество минут, включая дробную часть, между двумя значениями TDateTime.
MonthOf функция
DateUtils
Возвращает месяц года из значения TDateTime.
MonthOfTheYear функция
DateUtils
Возвращает месяц года из значения TDateTime.
MonthsBetween функция
DateUtils
Возвращает количество полных месяцев между двумя значениями TDateTime.
MonthSpan функция
DateUtils
Возвращает количество месяцев, включая дробную часть, между двумя значениями TDateTime.
MSecsToTimeStamp функция
SysUtils
Конвертирует указаное количество милисекунд в значение TTimeStamp.
Now функция
SysUtils
Возвращает текущие дату и время.
NthDayOfWeek функция
DateUtils
Возвращает сколько дней, с таким же порядковым номером дня недели, было в текущем месяце, представленом значением TDateTime.
NullSQLTimeStamp константа
SqlTimSt
Значение NULL для TSQLTimeStamp.
OneHour Constant;
OneMillisecond Constant;
OneMinute Constant;
OneSecond Constant
константы
DateUtils
Обратные константы времени в модуле Delphi.
RecodeDate функция
DateUtils
Меняет в TDateTime значение даты на новые значения Год, Месяц, День. В случае неудачи вызывает исключение EConvertError.
RecodeDateTime функция
DateUtils
Выборочно изменяет в TDateTime значения Год, Месяц, День, Час, Секунда, Милисекунда на заданые. В случае неудачи вызывает исключение EConvertError.
RecodeDay функция
DateUtils
Меняет значение День месяца в TDateTime на заданое. В случае неудачи вызывает исключение EConvertError.
RecodeHour функция
DateUtils
Меняет значение Час дня в TDateTime на заданое. В случае неудачи вызывает исключение EConvertError.
RecodeMilliSecond функция
DateUtils
Меняет значение Милисекунда в TDateTime на заданое. В случае неудачи вызывает исключение EConvertError.
RecodeMinute функция
DateUtils
Меняет значение Минута часа в TDateTime на заданое. В случае неудачи вызывает исключение EConvertError.
RecodeMonth функция
DateUtils
Меняет значение Месяц года в TDateTime на заданое. В случае неудачи вызывает исключение EConvertError.
RecodeSecond функция
DateUtils
Меняет значение Секунда часа в TDateTime на заданое. В случае неудачи вызывает исключение EConvertError.
RecodeTime функция
DateUtils
Меняет в TDateTime значение времени на новые значения Час, Минута, Секунда, Милисекунда. В случае неудачи вызывает исключение EConvertError.
RecodeYear функция
DateUtils
Меняет значение Год в TDateTime на заданое. В случае неудачи вызывает исключение EConvertError.
ReplaceDate процедура
SysUtils
Заменяет значение даты в TDateTime на заданое.
ReplaceTime процедура
SysUtils
Заменяет значение времени в TDateTime на заданое.
SameDate функция
DateUtils
Показывает, представляют ли два значения TDateTime тот же самый год, месяц и день.
SameDateTime функция
DateUtils
Показывает, представляют ли два значения TDateTime те же самые год, месяц, день, час, секунда, милисекунда.
SameTime функция
DateUtils
Показывает, совпадают ли значения времени в двух значениях TDateTime.
SecondOf функция
DateUtils
Возвращает количество секунд минуты из значения TDateTime.
SecondOfTheDay функция
DateUtils
Возвращает количество секунд между значением указаным в TDateTime и 12:00:00 AM того же самого дня.
SecondOfTheHour функция
DateUtils
Возвращает количество секунд между значением указаным в TDateTime и началом того же самого часа.
SecondOfTheMinute функция
DateUtils
Возвращает количество секунд между значением указаным в TDateTime и началом той же самой минуты.
SecondOfTheMonth функция
DateUtils
Возвращает количество секунд между значением указаным в TDateTime и 12:00:00 AM первого дня месяца.
SecondOfTheWeek функция
DateUtils
Возвращает количество секунд между значением указаным в TDateTime и 12:00:00 AM первого дня недели.
SecondOfTheYear функция
DateUtils
Возвращает количество секунд между значением указаным в TDateTime и 12:00:00 AM первого дня года.
SecondsBetween функция
DateUtils
Возвращает количество секунд между двумя значениями TDateTime.
SecondSpan функция
DateUtils
Возвращает количество секунд, включая дробную часть, между двумя значениями TDateTime.
SQLDayOfWeek функция
SqlTimSt
Возвращает день недели из значения TSQLTimeStamp. Возвращаемое функцией значение находится в промежутке между 1 и 7, где Воскресение (Sunday) является первым днем недели, а Суббота (Saturday) — седьмым.
SQLTimeStampToDateTime функция
SqlTimSt
Конвертирует значение TSQLTimeStamp в TDateTime.
SQLTimeStampToStr функция
SqlTimSt
Конвертирует значение TSQLTimeStamp в строку.
StartOfADay функция
DateUtils
Возвращает значение TDateTime которое представляет 12:00:00:00 AM указаного дня.
StartOfAMonth функция
DateUtils
Возвращает значение TDateTime которое представляет 12:00:00:00 AM первого дня указаного месяца.
StartOfAWeek функция
DateUtils
Возвращает значение TDateTime которое представляет первый момент указаного дня указаной недели.
StartOfAYear функция
DateUtils
Возвращает значение TDateTime которое представляет первый момент первого дня указаного года.
StartOfTheDay функция
DateUtils
Возвращает значение TDateTime которое представляет 12:00:00:00 AM дня, заданого значением TDateTime.
StartOfTheMonth функция
DateUtils
Возвращает значение TDateTime которое представляет 12:00:00:00 AM первого дня месяца, заданого значением TDateTime.
StartOfTheWeek функция
DateUtils
Возвращает значение TDateTime которое представляет 12:00:00:00 AM первого дня недели, заданой значением TDateTime.
StartOfTheYear функция DateUtils Возвращает значение TDateTime которое представляет 12:00:00:00 AM первого дня года, заданого значением TDateTime.
StrToDate функция
SysUtils
Конвертирует строку с датой в TDateTime. В случае неудачи вызывает исключение EConvertError.
StrToDateDef функция
SysUtils
Конвертирует строку с датой в TDateTime со значением по умолчанию в случае ошибки.
StrToDateTime функция
SysUtils
Конвертирует строку в значение TDateTime. В случае неудачи вызывает исключение EConvertError.
StrToDateTimeDef функция
SysUtils
Конвертирует строку в значение TDateTime со значением по умолчанию в случае ошибки.
StrToSQLTimeStamp функция
SqlTimSt
Конвертирует строку в значение TSQLTimeStamp. В случае неудачи вызывает исключение EConvertError.
StrToTime функция
SysUtils
Конвертирует строку со временем в значение TDateTime. В случае неудачи вызывает исключение EConvertError.
StrToTimeDef функция
SysUtils
Конвертирует строку со временем в значение TDateTime со значением по умолчанию в случае ошибки.
SystemTimeToDateTime функция
SysUtils
Конвертирует значение системного времени в значение TDateTime.
Time модульные константы
SysUtils
Значения констант для вычисления времени.
Time,
GetTime
функции
SysUtils
Возвращают текущее время.
TimeOf функция
DateUtils
Убирает значение даты из значения TDateTime.
TimeStampToDateTime функция
SysUtils
Конвертирует значение TTimeStamp в соответствующее значение TDateTime.
TimeStampToMSecs функция
SysUtils
Конвертирует значение TTimeStamp в TTimeStamp в абсолютное число милисекунд.
TimeToStr функция
SysUtils
Конвертирует значение времени из TDateTime в строку.
Today функция
DateUtils
Возвращает значение TDateTime, представляющее текущую дату.
Tomorrow функция
DateUtils
Возвращает значение TDateTime, представляющее следующий день.
TryEncodeDate функция
SysUtils
Создает значение TDateTime, предсталяющее указаный Год, Месяц, День. В случае неудачи возвращает False.
TryEncodeDateDay функция
DateUtils
Вычисляет значение TDateTime которое представляет указаный день для указаного года. В случае неудачи возвращает False.
TryEncodeDateMonthWeek функция
DateUtils
Вычисляет значение TDateTime которое представляет указаный день указаной недели в указаном месяце и году. В случае неудачи возвращает False.
TryEncodeDateTime функция
DateUtils
Вычисляет значение TDateTime которое представляет указаные год, месяц, день, час, минуту, секунду и милисекунду. В случае неудачи возвращает False.
TryEncodeDateWeek функция
DateUtils
Вычисляет значение TDateTime которое представляет указаный день указаной недели в указаном году. В случае неудачи возвращает False.
TryEncodeDayOfWeekInMonth функция
DateUtils
Вычисляет значение TDateTime которое представляет указаный день недели в указаном месяце и году. В случае неудачи возвращает False.
TryEncodeTime функция
SysUtils
Создает значение TDateTime для заданых значений Час, Минута, Секунда и Милисекунда. В случае неудачи возвращает False.
TryRecodeDateTime функция
DateUtils
Выборочно меняет значения Год, Месяц, День, Час, Секунда, Милисекунда в указаном TDateTime. В случае неудачи возвращает False.
TryStrToDate функция
SysUtils
Конвертирует строку с датой в TDateTime. В случае неудачи возвращает False.
TryStrToDateTime функция
SysUtils
Конвертирует строку в значение TDateTime. В случае неудачи возвращает False.
TryStrToSQLTimeStamp функция
SqlTimSt
Конвертирует строку в значение TSQLTimeStamp. В случае неудачи возвращает False.
TryStrToTime функция
SysUtils
Конвертирует строку со временем в значение TDateTime. В случае неудачи возвращает False.
UnixDateDelta константа
SysUtils
Определяет разницу между значениями TDateTime и TIME_T. Тип TIME_T используется в системах Unix и Lnux, а так же в стандартных библиотеках C.
WeekOf функция
DateUtils
Возвращает неделю года из значения TDateTime.
WeekOfTheMonth функция
DateUtils
Возвращает неделю месяца из значения TDateTime.
WeekOfTheYear функция
DateUtils
Возвращает неделю года из значения TDateTime.
WeeksBetween функция
DateUtils
Возвращает количество полных недель между двумя значениями TDateTime.
WeeksInAYear функция
DateUtils
Возвращает количество недель в указаном году.
WeeksInYear функция
DateUtils
Возвращает количество недель в году из значения TDateTime.
WeekSpan функция
DateUtils
Возвращает количество недель, включая дробную часть, между двумя значениями TDateTime.
WithinPastDays функция
DateUtils
Показывает, находятся ли две даты в заданом промежутке дней относительно друг друга.
WithinPastHours функция
DateUtils
Показывает, находятся ли два значения даты/времени в заданом промежутке часов относительно друг друга.
WithinPastMilliSeconds функция
DateUtils
Показывает, находятся ли два значения даты/времени в заданом промежутке милисекунд относительно друг друга.
WithinPastMinutes функция
DateUtils
Показывает, находятся ли два значения даты/времени в заданом промежутке минут относительно друг друга.
WithinPastMonths функция
DateUtils
Показывает, находятся ли два значения даты/времени в заданом промежутке месяцев относительно друг друга.
WithinPastSeconds функция
DateUtils
Показывает, находятся ли два значения даты/времени в заданом промежутке секунд относительно друг друга.
WithinPastWeeks функция
DateUtils
Показывает, находятся ли два значения даты/времени в заданом промежутке недель относительно друг друга.
WithinPastYears функция
DateUtils
Показывает, находятся ли два значения даты/времени в заданом промежутке лет относительно друг друга.
YearOf функция
DateUtils
Возвращает Год из значения TDateTime.
YearsBetween функция
DateUtils
Возвращает приблизительное количество лет между двумя значениями TDateTime.
YearSpan функция
DateUtils
Возвращает приблизительное количество лет, включая дробную часть, между двумя значениями TDateTime.
Yesterday функция
DateUtils
Возвращает значение TDateTime которое соответствует предыдущему дню.

Содержание

Тип TDateTime.

Тип TDateTime — это основной тип в Delphi для работы с датой и временем. Он является числом с плавающей запятой, целая часть которого содержит число дней, отсчитанное от некоторого начала календаря, а дробная часть равна части 24-часового дня, т.е. характеризует время и не относится к дате. Для 32-разрядных версий Delphi за начало календаря принята дата 12/30/1899, 12 часов.

Ниже приведены несколько примеров значения TDateTime и соответсвующие им дата и время:

12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am

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

Когда обрабатываются отрицательные значения TDateTimes, то вычисление дробной части производится отдельно. Дробная часть отражает часть 24-часового дня не зависимо от знака значения TDateTime. Например, 6:00 am on 12/29/1899 это –1.25, а неt –1 + 0.25, что составило бы –0.75. Значений TDateTime между –1 и 0 не существует. Cовет: В модулях SysUtils и DateUtils для работы с датой и временем имеется большое количество процедур и функций на все случаи жизни. Не заморачивайтесь с обственными вычислениями, не изобретайте велосипед, а пользуйтесь уже готовыми наработками разработчиков Delphi. (См. Функции и процедуры Delphi для работы с датой и временем.) Оно надежнее.

Примечание: В Delphi 1 за начало отсчета принят год 1, т.е. для перевода даты Delphi 1 в дату последующих версий Delphi надо вычесть из даты число 693594.

Содержание

Тип TTimeStamp.

TTimeStamp представляет значения дата и время.

Используйте TTimeStamp если требуется повышеная точность представления значения времени в знчениях дата/время. Если нет необходимости сохранять значение времени с точностью до милисекунд, используйте более компактное TDateTime. Если необходима еще большая точность, то используйте TSQLTimeStamp (но НЕ назначайте его типом Variant).

Поле Time field показывает количество милисекунд, прошедших с полуночи.

Поле Data показывает число календарных дней от начала календаря (число дней с 1/1/0001 плюс один).

Содержание

Тип TSQLTimeStamp.

TSQLTimeStamp представляет значения даты и времени с очень высокой точностью.

Драйвера баз данных dbExpress используют TSQLTimeStamp когда работают со значениями даты и времени.

  • Year определяет год от 1 до 9999.
  • Month определяет месяц от 1 до 12.
  • Day определяет день месяца, от 1 до 28, 29, 30, или 31, в зависимости от значения Month.
  • Hour определяет час от 0 до 23.
  • Minute и Second могут колебаться от 0 до 59.
  • Fractions определяет милисекунды от 0 до 999.

Используя функцию VarSQLTimeStampCreate, Вы можете создать тип Variant который представляет значение TSQLTimeStamp. Фактически, простейший путь манипулирования значениями SQLTimeStamp это создать подобный Variant и использовать встроеные операторы, обеспечивающие работу с Variant.

IncMonth — Функция Delphi

Вывод отладочной информации на форме

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

Неудобство очевидно – в процессе разработки необходимость добавлять/удалять компоненты может возникать неоднократно.

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

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

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

Самый удобный (с моей точки зрения) способ, лишенный всех описанных выше недостатков – отдельное окно, нет “лишних” компонентов на форме, не прерывается работа приложения. Само окно создается очень просто – вызовом функции AllocConsole, а вывод на консоль осуществляется с использованием процедур Write и Writeln.

И вот тут мы подходим к самому интересному.

Отладка с помощью Process Monitor

Process Monitor – утилита от Марка Руссиновича. Мало кто знает, что Process Monitor можно использовать в качестве отладочного инструмента. Process Monitor поддерживает API, позволяющим разработчикам создавать события вывода отладчика, добавляемые в поток событий с пользовательским комментарием. Например, можно включать пользовательский вывод отладчика в трассировку при вызове и завершении функций, чтобы сопоставить эти события с активностью файловой системы, реестра и другими событиями. Любые процессы, даже работающие с низкими привилегиями, могут передать через драйвер Process Monitor UNICODE строку длиной до 2048 знаков. Разберемся, как это делается, и начнем с настройки фильтров Process Monitor.

Здесь нужно добавить условие «Operation», связку «is» со значением «Debug Output Profiling».

Для просмотра событий вывода отладчика надо активировать переключатель «Show Profiling Events» («Показать события трассировки») на панели инструментов, детализацию фильтров по другим параметрам лучше отключить.

Пример взаимодействия с Process Monitor приведен в книге Марка Руссиновича и Аарона Маргозиса «Утилиты Sysinternals. Справочник администратора» (2012 год). В оригинале код написан на C, однако его перевод на Delphi не вызывает никаких трудностей.

Так как пример демонстрационный я решил показать разные подходы к формированию I/O control code (IOCTL), и совместить их в одной процедуре. Какой из подходов будет использован, зависит от директивы USE_CONST_VALUE. Если директива объявлена, значение константы вычисляется на этапе компиляции приложения, в противном случае значение каждый раз генерируется в runtime. Разумеется, в реальном приложении нужно использовать какой-нибудь один из подходов (на своё усмотрение).

IncMonth — Функция Delphi

Часть 1. (создаем класс – потомок TThread)

Для начала хочу выразить искреннюю благодарность создателю замечательного сайта в интернете “Мастера DELPHI” (http://delphi.mastak.ru/), конференции для программистов — Алексею (Merlin). Я думаю, что со мной согласятся многие, если скажу, что конференции помогли и помогают многим программистам в их нелегком труде. До сих пор не встречал такого живого форума и такой атмосферы взаимопомощи на просторах интернета. Конференции стали неплохим подспорьем программистам в их деятельности. Постоянно посещая форум, я заметил, что некоторые вопросы довольно часто повторяются. Желание помочь коллегам и позволило появиться в свет этой статье. Надеюсь, что некоторые приемы, описанные ниже, будут полезны и профессионалам. Версии Windows ниже 98 безвозвратно уходят в прошлое, поэтому особенности программирования для них мы рассматривать не будем. Так как некоторые приемы, описанные в статье, в разных версиях Windows могут существенно отличаться, в некоторых случаях мы рассмотрим альтернативные решения. Здесь я не касаюсь особенностей программирования в Delphi6, так как до сих пор у меня не было возможности опробовать эту систему.В первой статье цикла хочу на примере программы «Монитор каталогов» показать приемы работы с файлами (поиск/чтение/запись) и потоками (TThread). Эта статья ни в коем случае не претендует на исключительность и «истину в последней инстанции». В статье я не буду придерживаться предельной точности в определении терминов, а сделаю упор на «понятность» изложения материала. Как мне кажется, для начинающих программистов, более важно ухватить сначала суть, и лишь затем углубляться во внутренности процессов, проходящих внутри Windows. Я буду благодарен всем, кто пришлет отзывы, замечания и пожелания по материалам статьи, сообщения о найденных в ней ошибках, а также алгоритмы и другие реализации решений, отличные от тех, что описаны на этих страницах по адресу panov@hotbox.ru. Благодарю за ценные замечания и предложения при подготовке статьи:

  • Ю. Зотова,
  • Голованова Михайла aka Mike Goblin.
  • Особая благодарность – Петрову Алексею за консультации по тонкостям работы с потоками.

При подготовке к статье использовались следующие источники:

А теперь приступим к практическим занятиям.

Приложение «Монитор каталогов»

2. Создаем основную форму и наводим на ней красоту.

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

Введем также еще условие: программа не должна блокировать работу с основной формой. Для этого будем использовать класс TThread.

Здесь я сделаю небольшое отступление, и кратко расскажу, что такое «Процесс», «поток», и зачем они нужны.
Рекомендую также почитать статью Подмогова Михаила, расположенную по адресу (http://delphi.mastak.ru/articles/winexec/index.html) и статью Николая Кариха (http://delphi.mastak.ru/articles/thread/index.html)

Процессом в Windows называется любое выполняющееся приложение. Каждый процесс имеет свой уникальный идентификатор – целое число, назначаемое операционной системой при создании процесса. Поток – это последовательность машинных команд, которые выполняются процессором (часто потоки называют «нитями»). При запуске программы в Windows создается процесс, в котором описано, чем владеет этот процесс, и первичный или основной (главный) поток, в котором начинается выполнение программы. Важное свойство процесса – для него может быть создано несколько потоков, причем выполнение каждого потока может, как зависеть, так и не зависеть от выполнения других потоков. Для однопроцессорных систем справедливо также следующее: — в каждый момент времени выполняется, только один поток, поскольку для выполнения любой команды требуется занять время процессора. Но операционная система выделяет каждому потоку по очереди промежуток времени (называется он «квант времени») для выполнения, причем этот квант времени очень мал. Поэтому создается впечатление, что все задачи в системе выполняются одновременно.

Учитывая это, будет естественно применить возможности потоков в нашей программе. В Delphi работы с потоками предусмотрен специальный класс – TThread, о методах и свойствах которого я расскажу немного позже. Теперь приступим к созданию приложения.

Откроем новый проект, поменяем имя формы c Form1 на fMonDirMain, заголовок формы на «Сканер каталогов».
Сохраним проект в отдельном каталоге, при сохранении назовем Unit с формой ufMain, а проект – MonDir.

Устанавливаем свойства для формы fMonDirMain:
Width – 600
Height – 400
Position — poScreenCenter

Далее добавим на форму следующие объекты:
TMainMenu (имя mm),
TStatusBar (имя sbMain),
TTimer (имя tmDate),
TListBox (имя lbLog).

Выбрав sbMain, в инспекторе объектов отредактируем список панелей (Panels).
Добавим в список 3 панели.
для первой панели выбираем ширину (поле Width) 110,
для второй панели выбираем ширину 150.

Панели будем использовать для отображения текущего времени и состояния сканера («Активен»/«Отключен»).

Для lbLog устанавливаем свойство Align в alClient.
Для tmTimer определяем процедуру обработки события OnTimer

и устанавливаем свойство Interval в 1000 мс (1 секунда), а Enabled в True.

Для формы создадим процедуру обработки события OnCreate:

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

Дважды кликнув на значок TMainMenu, отредактируем наше меню.
Добавим 2 пункта: “Монитор” и “Выход”:

“Выход” – для освобождения ресурсов и выхода из программы.

В пункт меню «Монитор» добавим:
“Старт” – запуск потока для сканирования.
“Стоп” – остановка потока.

Назовем созданные пункты меню:
для “Старт” – mmStart,
для “Стоп” – mmStop,
для “Выход” – mmExit;

Свойство пункта Enabled для меню “Стоп” установим в False.

Создадим для меню “Выход” процедуру – обработчик, в коде напишем:

“Каркас” нашей программы готов.

2.2. Создание класса для обработки изменений каталога.

В Delphi работа с потоками инкапсулирована в класс TThread, с помощью которого и ведется вся работа в потоках.

Предлагаю Вашему вниманию краткий обзор свойств и методов класса TThread.

Свойство/ Метод/ Событие Тип Описание Значения
FreeOnTerminate Boolean Свойство, определяющее, вызывается ли процедура уничтожения потока ( destructor ) автоматически по окончании выполнения процедуры Execute , или нет. True : деструктор потока вызывается автоматически.
False : для вызова деструктора и уничтожения потока необходимо воспользоваться методом Terminate .
Handle, ThreadId THandle Идентификатор потока, используется различными функциями Windows API. Целое число. Назначается операционной системой.
Priority
TThreadPriority Приоритет потока. Используется для указания, насколько выше/ниже приоритет потока относительно основного (главного) потока. tpIdle – поток работает в то время, когда процессор не занят выполнением других задач. (Наинизший приоритет из возможных)
tpLowest — поток имеет приоритет на 2 пункта ниже нормального tpNormal. (Очень низкий приоритет)
tpLower — поток имеет приоритет на 1 пункт ниже нормального tpNormal. (Низкий приоритет)
tpNormal – приоритет по умолчанию. Используемый большинством потоков операционной системы. (Нормальный приоритет)
tpHigher — поток имеет приоритет на 1 пункт выше нормального tpNormal. (Высокий приоритет)
tpHighest — поток имеет приоритет на 2 пункта выше нормального tpNormal. (Очень высокий приоритет)
tpTimeCritical – поток работает в режиме реального времени. Необходимо пользоваться с большой осторожностью, так как поток займет все время процессора. (Наивысший приоритет из возможных)
ReturnValue Integer Значение, которое возвращает поток при своем завершении. Значение ReturnValue можно получить при использованиии метода WaitFor .
Suspended Boolean Свойство, показывающее, в каком состоянии находится поток.
Поток может находиться в двух состояниях:
— активный
— приостановлен
В приостановленном состоянии поток не выполняет никакой работы.
Для завершения потока, который находится в состоянии «приостановлен» необходимо сначала выдать для него команду Resume
True — поток находится в приостановленном состоянии
False – поток находится в активном состоянии
Terminated Boolean Свойство показывает, получена ли потоком команда на завершение Terminate . True – получена команда Terminate завершить работу.
False – команда Terminate не получена.
OnTerminate событие Событие, возникающее после окончания работы процедуры Execute , но до вызова деструктора потока.
Create Метод Конструктор потока.
Для создания потока и передачи ему параметров нужно переопределить конструктор. Пример см. дальше в статье.
Destroy Метод Деструктор потока. Вызывается при завершении выполнения потока автоматически.
Примечание: Destroy
будет вызван автоматически если
FreeOnTerminate = True
и
Suspended = False
DoTerminate Метод Генерирует событие OnTerminate . Выполняется код из процедуры-обработчика события OnTerminate , но не вызывает завершения потока.
Execute Метод Выполняется после создания потока конструктором Create . Начинает работу немедленно после Create , если поток создан с опцией CreateSuspended = False
Resume Метод Заставляет приостановленный поток продолжить работу.
Suspend Метод Приостанавливает работу потока.
Synchronize Метод Выполняет процедуру, определенную пользователем как метод потока. Используется для выполнения кода процедуры, определенной пользователем, в основном потоке.
Terminate Метод Вызывается для завершения потока.
WaitFor Метод Используется для получения значения, которое возвращает поток после своего завершения. Вызывается в основном потоке.

Поясню некоторые методы и свойства подробнее.

Create Как правило, поток создается для выполнения каких-либо однотипных операций, но с разными начальными условиями (параметрами), поэтому конструктор потока необходимо переопределить для своих нужд.

А при реализации конструктора можно использовать эти параметры:

Обратите внимание на выделенные строки:

В этой строке вызывается конструктор родительского класса TThread.

Внимание! После выполнения этой строки немедленно начнет выполняться метод Execute, если поток создать с флагом CreateSuspended = False. Поэтому, если Вы хотите инициализировать здесь переменные, которые будут использоваться в Execute, используйте конструкцию, приведенную выше.

Execute. В Execute должен выполняться весь код, который должен выполняться «параллельно» основному потоку. Как правило, если поток предназначен для выполнения многократно повторяющегося кода (цикла), то в Execute используется конструкция следующего вида:

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

Поэтому этот метод надо вызывать по возможности реже.

Простейший пример таймера:

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

Теперь вернемся к разработке нашего приложения.

В меню Delphi File выберем NewàThread Object и введем имя класса TMonDirThread.

Сохраним новый модуль с именем uMonThread.pas.

Исходный вид модуля uMonThread.pas приведен ниже:

При написании кода будем исходить из того, что наш поток должен:

  1. Начинать работать сразу после создания.
  2. Извещать основную форму об изменениях в сканируемом каталоге.
  3. Прекращать работу по «инициативе» основного потока.

2.3. Создание конструктора потока.

Добавим в определение нашего класса секцию public и напишем код:

В секцию implementation добавим код нашего конструктора:

Подробнее о параметре Self.Priority := tpHighest;
Для нашего потока устанавливаем один из самых высоких приоритетов в системе для того, чтобы поток успевал обрабатывать изменения в каталоге.
Т.к. в потоке не используется ресурсоемких конструкций, то для каждого цикла обработки в процедуре Execute (напишем этот код ниже) будет затрачиваться минимальное процессорное время.

Переходим к кодированию основной процедуры нашего потока – Execute.

2.4. Создание процедуры Execute.

Для проверки изменений в Windows есть специальные функции:

  • FindFirstChangeNotification/FindNextChangeNotification/FindCloseChangeNotification;
  • ReadDirectoryChangesW (только в Windows NT и более поздних версиях)
  • FindFirst/FindNext/FindClose;

Самой удобной для наших целей является функция ReadDirectoryChangesW, так как, используя ее, можно сразу определить, какой тип изменений произошел в каталоге (создание/удаление/модификация файла) и узнать имя файла, который вызвал изменение.
Но, к великому моему сожалению, эта функция не работает в версиях Windows9x.
При использовании этих функций (Find___ChangeNotification) мы не сможем определять имя файла, вызвавшего изменения, но узнаем, какое изменение произошло в каталоге, и, что не менее важно, они работают во всех версиях Windows.

Мы воспользуемся для сканирования функциями Find___ChangeNotification.

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

Метод с использованием функций FindFirst/FindNext/FindClose будет работать во всех версиях Windows и может обеспечить сканирование сетевых каталогов, но у него есть один существенный недостаток – он довольно медлителен в сравнении с первым и вторым методами, а также требует для работы значительно больше ресурсов.

Третий метод я опишу во второй части статьи.

Для понимания следующего материала необходимо пояснить еще, что такое «объекты синхронизации» Windows.
Работа Windows как операционной системы была бы невозможна без механизма синхронизации потоков в системе. Для решения этих задач в Windows существуют так называемые «объекты синхронизации».
«Объектом синхронизации» может выступать любой объект ядра Windows.
Перечислю некоторые из них: Event, Mutex, Semaphore, Timer.
В их число также входит и объект, который будем использовать мы — ”find change notification object». Далее я буду называть его “Объект”.

Все такие объекты имеют Handle – дескриптор (тип Integer), Handle назначается объекту при создании операционной системой и используется для идентификации в различных процедурах и функциях Windows.

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

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

Рассмотрим подробнее функции
FindFirstChangeNotification
FindNextChangeNotification
FindCloseChangeNotification
WaitForSingleObject

HANDLE FindFirstChangeNotification
Создает сигнализирующий объект find change notification object для сканирования каталога.

LPCTSTR lpPathName, — Указатель на строку, которая содержит путь к проверяемому каталогу.
BOOL bWatchSubtree, — Флаг, указывающий, нужно ли проверять подкаталоги.
DWORD dwNotifyFilter — О каких изменениях в каталоге сигнализировать.

dwNotifyFilter
Определяет, о каких типах изменений будет сигнализировать объект
Возможные значения:

FILE_NOTIFY_CHANGE_FILE_NAME
Сигнализировать о создании, удалении и переименовании файла.
FILE_NOTIFY_CHANGE_DIR_NAME
Сигнализировать о создании, удалении, переименовании подкаталогов.
FILE_NOTIFY_CHANGE_ATTRIBUTES
Сигнализировать об изменении атрибутов файлов или подкаталогов.
FILE_NOTIFY_CHANGE_SIZE
Сигнализировать об изменении размеров файлов. Операционная система определяет, что размер файла изменился, только если он закрыт.
FILE_NOTIFY_CHANGE_LAST_WRITE
Сигнализировать о смене даты последнего изменения файла. Операционная система определяет, что дата изменения файла сменилась, только если он закрыт.
FILE_NOTIFY_CHANGE_SECURITY
Сигнализировать об изменениях дескриптора защиты.

В случае успешного выполнения функция возвращает Handle созданного сигнализирующего объекта.

BOOL FindNextChangeNotification
Функция запрашивает операционную систему, изменилось ли состояние сигнализирующего объекта.

Параметры:
HANDLE hChangeHandle // Handle сигнализирующего объекта

BOOL FindCloseChangeNotification
Удаляет сигнализирующий объект.

DWORD WaitForSingleObject
Функция завершается в том случае, если при проверке состояния сигнализирующего объекта происходит одно из событий:
· Состояние объекта изменилось на «Включен»
· Время ожидания, определенного при вызове функции, истекло.

Параметры:
HANDLE hHandle, // Handle сигнализирующего объекта
DWORD dwMilliseconds // Время ожидания в миллисекундах

dwMilliseconds
Может принимать следующие значения:
— время ожидания в миллисекундах
— INFINITE, в этом случае время ожидания не ограничено.

Функция WaitForSingleObject возвращает следующие значения:
WAIT_OBJECT_0 – Состояние объекта изменилось на «Включен»
WAIT_TIMEOUT — Истекло время ожидания.
Если при выполнении функции возникли ошибки, WaitForSingleObject возвращает код WAIT_FAILED. Если состояние объекта изменяется до истечения времени dwMilliseconds, то функция завершает работу немедленно с кодом WAIT_OBJECT_0.

————-
Примечание: При возникновении ошибки во время выполнения этих функций
код ошибки можно получить, вызвав функцию GetLastError.
————-
За более подробной информацией по этим и другим функциям обращайтесь к
Windows SDK.
————-

Для синхронизации (обновления) данных формы будем использовать три процедуры – UpdateLog, ThreadStart и ThreadStop которые будут использоваться в методе Synchronize.

Далее опишу алгоритм работы процедуры Execute

Для начала сканирования каталога вызовем функцию

В случае ошибки создания объекта, выдадим сообщение об ошибке и законцим процедуру Execute:

При успешном создании синхронизирующего объекта вызовем процедуру ThreadStart для обновления главной формы:

Далее, в цикле продолжаем проверку изменений содержимого каталога.
В секцию реализации(implementation) добавляем процедуру

Не забудьте добавить в секцию interface ссылку на следующие модули:

2.5. Последний штрих.

В обработчики пунктов меню «Старт» и «Стоп» добавим следующие строки:

Обратите внимание на строки, выделенные жирным шрифтом.
Вместо того, чтобы создавать дополнительно переменную типа TMonDirThread, мы присвоили свойству формы Tag ссылку на созданный объект-поток, воспользовавшись явным приведением типа Integer(), так как любой указатель можно преобразовать к типу Integer.
При создании потока (TMonDirThread.Create(‘c:\temp’)) мы передаем в качестве параметра имя проверяемого каталога.

Теперь у нас все готово для первого старта нашего приложения.

Мы написали простейшее приложение, имеющие следующие возможности:

  • Проверять каталог на предмет добавления, удаления, переименования и изменения файлов в каталоге, используя для этого отдельный поток.
  • Уведомлять основной поток(главную форму) об изменениях.
  • Вести простейший протокол своей работы.

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

Каких возможностей не имеет приложение?

  • Сканировать сетевые диски.
  • Определять имя изменившегося файла.
  • Вести протокол работы в некотором файле.
  • Сворачиваться в виде иконки в SysTray.

Все эти возможности мы реализуем во второй части статьи.
Хочу также привести реализацию потока, предложенную Юрием Зотовым:

На этом хочу закончить первую часть статьи, и пожелать всем научиться писать такой же компактный, красивый и емкий код, приведенный выше!

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