Советы по Delphi. Версия 1.0.6

Озеров Валентин

Обзор

Данный раздел содержит справочную информацию. Как и сами "Советы", он разбит на темы и перечисляет содержащиеся в них сами советы и их количество. По причине большого количества советов, плохих телефонных линий в России, проблематичности большинства пользователей сидеть в Интернете без оглядки на часы, да и просто ввиду непредназначенности Интернета для публикования справочных систем, "Советы по Delphi" не предусматривают online-версии и существуют в виде скомпилированного файла с удобной системой инсталляции.

Введение

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

Aвтором предусматривается попытка на периодичность издания, подробности получения новых версий смотрите на страничке "Получение". При составлении "Советов" не ставилась цель включить ВСЕ материалы, отбирались лишь самые интересные. Источником "Советов" служили многочисленные западные источники (FAQ), кропотливо отобранные и переведенные на русский язык.

Учитывая плачевное состояние наших линий, "Советы" практически не содержат графики. Весь приведенный код отформатирован таким образом, чтобы вы могли скопировать его прямо со странички в свое приложение. По этой же причине отсутствует online-версия "Советов". Тем не менее, оглавление советов приведены на страничке "Индексы" (дабы не оказался кот в мешке).

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

Лицензионное соглашение

Использование Вами любой версии

Советов по Delphi

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

Bалентин Озеров предоставил Вам ограниченную лицензию на 

"Советы по Delphi".

Она НЕ

ВКЛЮЧАЕТ В СЕБЯ

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

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

Рассылка 

Bероятно вы хотели бы иметь у себя самую последнюю версия "Советов по Delphi"? Нет ничего проще. Выберите подходящий способ, отправьте мне письмо и не забудьте указать Ваш email, ФИО и город проживания (исключительно для статистики). Вам будет посылаться раз в месяц небольшой файл (около 150Кб), который позволит установить справочную систему через Интернет.

Вам необходимо:

Подписаться на ежемесячную рассылку?

 (посылается небольшой файл setup.exe, производящий инсталляцию с сервера).

Прекратить подписку

?

Oпределитесь и нажмите на соответствующую ссылку.

Цены

Алгоритмы

Преобразования

HEX→Integer

var

 i: integer;

 s: string;

begin

Преобразование десятичного числа в шестнадцатиричное

Самое простое преобразование – через строку.

HexString:= Format('%0x', DecValue);

Преобразование ASCII в шестнадцатиричное представление

Строка представляет собой массив байтов в виде ASCII-символов. Необходимо организовать преобразование типов по аналогии с Delphi-функциями Ord и Chr.

Функция BytesToHexStr преобразует, к примеру, набор байтов [0,1,1,0] в строку '30313130', HexStrToBytes выполнит обратное преобразование.

unit Hexstr;

interface

Преобразование двоичного числа в десятичное

Может ли кто-нибудь дать мне идею простого преобразования двоичного кода (base2) в десятичный (base10)?

/////////////////////////////////////////////////////////////////////////

// преобразование 32-битного base2 в 32-битный base10                  //

// максимальное число = 99 999 999, возвращает –1 при большем значении //

Преобразование ICO в BMP

Попробуйте:

var

 Icon: TIcon;

 Bitmap: TBitmap;

Даты

Вычисление даты Пасхи

function TtheCalendar.CalcEaster:String;

var B,D,E,Q:Integer;

 GF:String;

begin

 B:= 225-11*(Year Mod 19);

Дни недели

Кто-нибудь пробовал написать функцию, возвращающую для определенной даты день недели?

Моя функция как раз этим и занимается.

unit datefunc;

interface

Формат даты

У меня есть неотложная задача: в настоящее время я разрабатываю проект, где я должен проверять достоверность введенных дат с применением маски __/__/____, например 12/12/1997.

Некоторое время назад я делал простой шифратор/дешифратор дат, проверяющий достоверность даты. Код приведен ниже.

function CheckDateFormat(SDate: string): string;

var

 IDateChar: string;

Функция DateSer

Привет, я хочу в качестве совета поделиться функцией DateSer, которую я написал перед этим на VB. Данная функция весьма полезна но, к сожалению, ее нет в Delphi. Применяется она так:

DecodeDate(Date,y,m,d);

NewDate:= DateSer(y-4,m+254,d+1234);

или приблизительно так….

function DateSer(y,m,d: Integer): TDateTime;

Разное

Ханойская башня

"Ханойская башня" построена на очень простом алгоритме. Здесь я привожу этот алгоритм, который Вы сможете без труда воспроизвести.

type

 THanoiBin = 0..2;

 THanoiLevel = 0..9;

procedure MoveDisc(FromPin, ToPin : THanoiPin; Level : THanoiLevel);

Алгоритм (уравнение) для определения восхода/захода солнца и луны (BASIC)

Я нашел алгоритм, написанный на BASIC и вычисляющий восход-заход солнца и восход-заход луны. Может кто-нибудь сможет перенести это на Pascal?

(в случае чего сообщите мне по адресу [email protected])

10 ' Восход-заход солнца

20 GOSUB 300

30 INPUT "Долгота (град)";B5,L5

Автоматический формат даты в компоненте Edit

PROCEDURE TForm1.Edit1Exit(Sender: TObject);

BEGIN

 IF Edit1.Text<>'' THEN BEGIN

  TRY

    StrToDate(Edit1.Text);