Изучение Delphi

Функция delphi – Функции delphi

Процедуры Delphi

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

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

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

Общий вид процедуры Delphi:

Общий вид процедуры Delphi выглядит следующим образом:

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

Если процедура обладает какими-либо параметрами, то программист их указывает в скобках, сразу после имени процедуры. В конце заголовка процедуры ставится символ «;». В случае, когда в процедуре имеются именованные константы, программист объявляет их в разделеconst.

Далее за этим разделом идет раздел type, использующийся для объявления типов. После располагается раздел var, содержащий все переменные, которые впоследствии программист использует в своей программе. Затем следует раздел инструкций <begin…end;>, которые включает в себя исполняемые инструкции данной процедуры.

Примеры процедуры Delphi:

Приведем пример процедуры Delphi, вычисляющей стоимость некоторой покупки:


Похожие записи:

kvodo.ru

Функции и процедуры Delphi | Языки программирования. Delphi. Уроки Delphi.

В Delphi имеются следующие стандартные функции для порядковых типов данных.

  • Low(I) - минимальное значение типа I;
  • High(I) - максимальное значение типа I;
  • Pred(I) - предшествующее значение выражения I;
  • Succ(I) - следующее значение после выражения I;
  • Ord(I) - порядковый номер выражения I.

Continue reading →

Размещено в Функции и процедуры Delphi | Метки Функции Delphi |

Строковыми выражениями называются такие выражения, в которых операндами служат строковые данные (строка символов). Конкатенация - это операция соединения двух строк. Выполняется она с помощью знака "+".

Stroka := Stroka1 + Stroka2;
Continue reading →
Размещено в Функции и процедуры Delphi |

Одно из ценных свойств порядковых и целых типов является в том, что они состоят из строго определенных значений в неизменном порядке. Это понимать следует так: за цифрой 2 следует 3, а символу  "B" предшествует - "A".

Довольно просто к 2 прибавить 1 и получить значение следующего элемента 1. Но если в программе необходимо от символа  "A" перейти к "B", следующему по алфавиту? добавить единицу? Это не будет иметь никакого смысла, да и язык Delphi этого не позволит. Язык Delphi дает возможность перемещаться вдоль упорядоченных последовательностей.

Continue reading →

Размещено в Функции и процедуры Delphi |

Для работы с датой и временем в Delphi существуют следующие функции:

Continue reading →

Размещено в Функции и процедуры Delphi |

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

Continue reading →

Размещено в Функции и процедуры Delphi |

Функция Delphi FileGetDate позволяет определить дату и время последней модификации файла. В качестве аргумента она принимает дескриптор файла.

Continue reading →

Размещено в Функции и процедуры Delphi |

Иногда программа должна "знать" имя файла. Если извлекать из полного пути, например из такого "H:\Program Files\Borland\Delphi7\Demos\файл", то используя функции работы со строками придется кодировать во множестве строк. Но Delphi, к счастью, дает нам функцию, которая выполнит всю рутинную работу. ExtractFileName - это функция возвращающая из полного пути имя файла.

Continue reading →

Размещено в Функции и процедуры Delphi |

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

Continue reading →

Размещено в Функции и процедуры Delphi | Метки Функция Delphi Sleep |

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

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

Continue reading →

Размещено в Функции и процедуры Delphi |

delphi-prg.ru

Математические функции в Дельфи

Функция

Описание

Аргумент

Abs (X)

абсолютное значение

целое и действительное

выражение

Ceil (X)

округление донаименьшего целого

выражение extended

Compare

Value (A, B)

сравнение двух значений

целые и действительные

выражения

DivMod (Divided,

Divisor, Result,

Remainer)

целочисленное деление:Result – результат,

Remainder – остаток

целые выражения

EnsureRange

(AValue,

Amin,Amax)

возвращает ближайшеек Avalue в диапазоне

Amin — Amax

целые и действительные

выражения

Exp(X)

экспонента

действительное

выражение

Floor (X)

округление до наиб целого,меньшего или равного

аргумента

выражение Extended

Frac (X)

дробная часть X-Unt(X)

выражение Extended

Frexp(X, Mantissa,

Exponent)

выделяет мантиссуи показатель степени 2

выражение Extended

Int(X)

целая часть аргумента

действительное

выражение

IntPower(X,E)

возведение Xв целую степень E: X в степени Е

выражение extended

Integer

IsInfinite(X)

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

действительное

выражение

IsNan (X)

определяет, не равен лиаргумент Nan – нечисловой

величине

действительное

выражение

IsZero(X, Epsilon)

определяет, не явлли аргумент от нуля

менее чем на Epsilon

целые или действ

числа

Ldepx(X,P)

умножение X на 2 в степени Р

выражение extended

Integer

Ln(X)

натуральный логарифм (X)

действительное

выражение

LnXP1(X)

натуральный логарифм(X+1)

выражение extended

Log10(X)

десятичный логарифм от X

Log2(X)

логарифм от Xпо основанию 2

LogN (N,X)

логарифм от Xпо основанию N

Max(A,B)

максимум двух чисел

выражение Integer,

int64, Single, Double

Extended

Min(A,B)

минимум двух чисел

Pi

число Пи

Poly(X,C)

вычисляет полином Xс массивом коэфф С

выражение extended

массив Double

Power (X, E)

возведение Xв произвольную степень

выражение extended

RoundTo (AValue,

Adigit)

округляет действ числодо заданного дес порядка

целые и действительные

выражения

Round(X)

ближайшее целоеаргумента

выражение extended

SameValue

(A, B, Epsilon)

сравнивает A и Bс точностью Epsilon

действительное

выражение

Sqr(X)

X*X

выражение extended

Sqrt(X)

корень

выражение extended

Trunc(X)

возвращает целую частьдейств выражения

выражение extended

delphi-box.ru

Некоторые интересные строковые функции Delphi. | VR-online

Рассматриваемые функции:
AdjustLineBreaks
IsValidIdent
AnsiQuotedStr и AnsiExtractQuotedStr

Не изобретай лишних сутей

AdjustLineBreaks

function AdjustLineBreaks(const S: string [; Style: TTextLineBreakStyle]): string;
 
Вот так определена эта функция в SysUtils:
 
TTextLineBreakStyle = (tlbsLF, tlbsCRLF);
function AdjustLineBreaks(const S: string; Style: TTextLineBreakStyle =
       {$IFDEF LINUX} tlbsLF {$ENDIF}
       {$IFDEF MSWINDOWS} tlbsCRLF {$ENDIF}): string;
 
(А в модуле ComCtrls.pas эта функция написана на ассемблере для работы с PChar:
function AdjustLineBreaks(Dest, Source: PChar): Integer; assembler; ) 

Функция AdjustLineBreaks приводит строку S к формату установленной OS, преобразуя символы перевода строки (одиночные символы возврата каретки (#13), перевода строки (#10), и пары CR-LF) применительно к данной ОС. Файлы, копируемые из систем Unix и Macintosh, содержат иные символы окончания строк, чем могут "ввести в заблуждение" многие программы DOS и Windows. (В Macintosh используется только символ возврата каретки; в Unix - только символ перевода строки.)

Второй необязательный параметр позволяет управлять форматированием. Ты можешь адаптировать переносы строк, как под Windows (tlbsCRLF), так и под Unix (tlbsLF). По умолчанию он определяется установленной ОС.

var UnixStr: String;
begin // Преобразуем текст под Unix
 UnixStr := AdjustLineBreaks(Memo1.Text, tlbsLF);
end; 

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

Для примера переделаем WhoIs-клиент из всеми любимой ДГХ (стр. 142 «Их разыскивают бойцы 139-го порта»). Там, чтобы отформатировать полученную от сервера строку, написан цикл, сканирующий строку на символ #10 и делящий текст на кусочки. Мы сделаем все это в одной строке (для надежности я добавил обработку ошибок):

procedure TForm1.btnFindClick(Sender: TObject);
var
 FindResult: String;
begin
ResultMemo.Clear;
 try
   FindResult := IdWhoIs.WhoIs(edtDomain.Text); // Получаем данные
   // Обработка – всего одна строка
   ResultMemo.Text := AdjustLineBreaks(FindResult);
 except
   on E: Exception do
   ResultMemo.Lines.Add('ОШИБКА: ' + E.Message);
 end;
end; 

StringReplace

type TRepiaceFlags = set of (rfReplaceAll,  rfIgnoreCase);
function StringReplace(const S,  OldSubStr,  NewSubStr:  string; Flags:  TReplaceFlags):  string; 

StringReplace возвращает копию S, где OldSubStr заменена на NewSubStr. Если Flags содержит rfReplaceAll, заменяются все вхождения OldSubStr; иначе заменяется только первое вхождение. Поиск OldSubStr выполняется с учетом регистра, если только не включен флаг rflgnoreCase.
Пример замены текста в TMemo:

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.Add('Зачем ты учишь Delphi?');
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 Memo1.Text := StringReplace(Memo1.Text, 'ты учишь', 'он учит', [rfReplaceAll, rfIgnoreCase]);
end; 

WrapText

function WrapText(const Line, BreakStr: string; BreakChars: TSysCharSet; MaxCol:  Integer): string;overload;
function WrapText(const Line: string;  MaxCol:  Integer = 45): string;overload; 

Функция WrapText возвращает копию Line, разбитую на несколько строк шириной MaxCol столбцов. Каждая строка разбивается, когда ее длина доходит до MaxCol символов. Разбиение производится там, где есть символы из множества BreakChars. При нахождении символа из BreakChars, после него вставляется строка BreakStr. (В Delphi 5 как существующие переводы строк рассматриваются символы #13 и #10, независимо от BreakStr.)

Вторая форма WrapText использует [' ', ' -' , #9] (пробел, дефис, табуляция) в качестве BreakChars и #13#10 (возврат каретки, перевод строки) в качестве BreakStr. Получается эта форма просто переносит строку по словам.

Сама Delphi к этой функции в своих модулях не обращается. Для разных компонентов пишутся аналоги с другими названиями. Я не додумался до сколько-нибудь полезного примера, т.к. например в TMemo и TRichEdit это свойство уже реализовано.

В моем примере TListBox заполняется строками, примерно, как в TMemo и ширина и количество строк меняются, при изменении размера TListBox. Также в примере есть алгоритм подгонки ширины строк к ширине окна:

procedure TForm1.FormResize(Sender: TObject);
var
S: String;
DC: HDC;
Metrics: TTextMetric;
CharsInWidth: Integer; //Сколько символов влезет в ширину окна
OldMapMode: Integer;
begin
 S :=     'Очень длинная строка, которую мы сейчас разбиваем на ';
 S := S + 'кусочки и заполняем ими строки TListBox по всей ширине. ';
 S := S + 'Ширину TListBox мы меняем, изменяя размеры формы, ';
 S := S + 'т.к. у TListBox свойство Align равно alClient.';
 DC := GetWindowDC(ListBox1.Handle); // Получаем контекст окна
   SelectObject(DC, ListBox1.Font.Handle);//Выбираем в него шрифт окна
   OldMapMode := GetMapMode(DC);// Запоминаем старый режим отображения
   SetMapMode(DC, MM_TEXT); //Устанавливаем отображение в пикселях
   GetTextMetrics(DC, Metrics); //Получаем параметры шрифта
   SetMapMode(DC, OldMapMode);//Восстанавливаем режим отображения
 ReleaseDC(ListBox1.Handle, DC); //Освобождаем контекст
 //Получаем количество средних символов на ширину окна (6 - подобрано)
 CharsInWidth := ListBox1.ClientWidth div Metrics.tmAveCharWidth - 6;
 ListBox1.Clear; //Очищаем TListBox
 ListBox1.Items.Text := WrapText(S, CharsInWidth); //Заполняем TListBox
 Caption := 'Количество строк в ListBox = ' + IntToStr(ListBox1.Count);
end; 

IsValidIdent

function IsValidIdent(const Ident: string): Boolean;

Функция IsValidIdent возвращает True, если Ident содержит корректный идентификатор Delphi Pascal, т. е. строку, первый символ которой является буквой или подчеркиванием: ['A'..'Z', 'a'..'z', '_'] ,а последующие символы - буквами, цифрами или символами подчеркивания: ['A'..'Z', 'a'..'z', '0..'9', '_'].

Наверняка пригодится где-нибудь при разработке компонентов для проверки корректности установленных свойств. Например Delphi использует эту функцию при установке имени компонента TComponent.Name.
Хочется показать определение этой функции. Смотри какой простой и правильный код:

function IsValidIdent(const Ident: string): Boolean;
const
 Alpha = ['A'..'Z', 'a'..'z', '_'];
 AlphaNumeric = Alpha + ['0'..'9'];
var
 I: Integer;
begin
 Result := False;
 if (Length(Ident) = 0) or not (Ident[1] in Alpha) then Exit;
 for I := 2 to Length(Ident) do if not (Ident[I] in AlphaNumeric) then Exit;
 Result := True;
end; 

LastDelimiter

function LastDelimiter(const Delimiters,  S :   string):  Integer;

Функция LastDelimiter возвращает индекс последнего (самого правого) вхождения любого из символов Delimters в строке S. Если ни один из символов Delimiters не присутствует в S, LastDelimiter возвращает ноль. Delimiters не может быть многобайтовой строкой, и нельзя использовать #0 в качестве одного из разделителей.

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

А я для примера написал функцию, которая выводит слова в предложении в обратном порядке:

function ReverseString(S: String): String;
var
delim: String;
LastDelim: Integer;
begin
 delim := ' '; // разделитель - пробел
 Result := ''; // Обнуляем на всякий случай
 repeat
   // Получаем последний пробел
   LastDelim := LastDelimiter(delim, S);
   // Копируем в newstr из tmpstr слово после пробела + пробел
   Result := Result + Copy(S, LastDelim + 1, Length(S)-LastDelim) + delim;
   // Укорачиваем tmpstr на последнее слово
   Delete(S,LastDelim, Length(S)-LastDelim + 1);
 until LastDelim = 0; // Работаем пока не кончатся пробелы
 Result := TrimRight(Result); // Удаляем лишний пробел на конце
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := 'Ехал грека через реку.';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := ReverseString(Edit1.Text);
end; 

При работе с PChar для тех же целей используется функция AnsiStrRScan:

function AnsiStrRScan(Str: PChar; Chr: Char): PChar;

Функция AnsiStrRScan выполняет поиск последнего (самого правого) вхождения символа Chr в Str и возвращает указатель на символ в строке Str или nil, если символ не найден.

AnsiQuotedStr и AnsiExtractQuotedStr

function AnsiQuotedStr(const S: string; Quote: Char): string;

Функция AnsiQuotedStr возвращает копию S, заключенную в кавычки. Символ кавычек указан в параметре Quote. Вхождения Quote в S повторяются и в результирующей строке. Эта функция предполагает, что в S нет символов #0 (кроме #0, находящегося за концом строки).

function AnsiExtractQuotedStr(var Src: PChar; Quote: Char):  string;

Функция AnsiExtractQuotedStr выбирает из Src строку, заключенную в кавычки. Первый символ Src должен быть равен Quote, иначе функция сразу завершается, возвращая пустую строку. Если это условие выполняется, строка, заключенная в символы кавычек, копируется и возвращается в качестве результата функции. Повторяющиеся символы кавычек преобразуются в одиночные кавычки. Src изменяется, указывая теперь на символ сразу за закрывающей кавычкой. Если в Src нет закрывающей кавычки, то Src присваивается указатель на завершающий байт #0, и функция возвращает весь текст до конца строки.

Эти функции могут тебе понадобится при работе с файлами, при записи-чтении информации. Delphi использует эти функции при чтении-записи свойства TStrings.CommaText.

Если хочешь знать еще больше, то запускай Delphi, создавай проект по умолчанию и, удерживая кнопочку CTRL кликай мышкой по слову SysUtils в секции uses. Смещай взгляд свой в левую сторону окна с кодом. И будет там окно Code Explorer. И когда нажмешь ты на плюсик слева от папочки Procedures, то будет тебе счастье. Изучай.

Использованная, так сказать, литература:
1. Лишнер Р. «Delphi. Справочник» Пер.с англ. – СПб.: Символ-Плюс, 2001.
2. Фленов М.Е. «Программирование в Delphi глазами ][акера» - СПб.: БХВ-Петербург, 2004.
3. Исходный код модуля Delphi6 SysUtils.pas.

Written by Орехов Роман aka tripsin

www.vr-online.ru

Функция формат (Format) в Delphi (Делфи)

Октябрь 20th, 2013 admin

Функция формат (Format) в Delphi (Делфи) возвращает строку, которая отображает список аргументов по заданному шаблону формата.

Синтаксис формата: %[<индекс>:] [-] [<ширина>] [.<точность>] <тип>

[<индекс>:] определяет индекс аргумента в заданном списке, к которому относится данный спецификатор формата.

[-] индикатор выравнивания влево.

[<ширина>] ширина поля.

[.<точность>] спецификатор точности.

Спецификатор Значение
d Десятичное число. Значение преобразуется в троку десятичных цифр. Если спецификатор формата содержит поле точности, то результирующая строка должна содержать количество цифр, но не менее указанного значения Если форматируемое значение содержит меньше цифр, оно дополняется слева нулями.
e Формат значения с плавающей запятой. Значение преобразуется в формат вида «-d.ddd… x10^+ddd», где «d» это цифра. Отрицательные числа начинаются со знака «-«. Перед десятичной точкой всегда имеется одна цифра. По умолчанию точность равна 15 (если нет спецификатора точности.
x Шеснадцатеричный формат целых чисел. Значение аргумента преобразуется в строку шестнадцатеричных чисел.
g Обобщенный формат чисел с плавающей запятой. Значение преобразуется в формат научный или фиксированной точкой, в зависимости от того, какой из них дает короткую запись.

Модуль Sysutils

Объявление function Format (const sFormat: string; const Args: array of const) : string

Функция Format возвращает отформатированную сторку, представляющую собой результат применения строки описания формата SFormat к открытому массиву аргументов Args.

Примеры:

Format (‘Дано %d и %d’, [7, 12])

Выводит: Дано 7 и 12

Format (‘Дано %d = %0:x’, [40])

Выводит: Дано 40 = 1Е

Неудобность заключается в применении формата e.

Пример:

Format (‘%у %0:f %0:n %0:g’, [10000.])

Выводит: 1,00000000000000Е+004 10000,00 10 000,00 10000

Поэтому наиболее приемлемо применять формат g: Format (‘%m = %0:x’, [10000.]) выводит 10 000р.

. delphi Возвращает сумму десятичных чисел преобразование вещественного числа в денежный формат делфи delphi формат даты в строке format delphi delphi format . делфи формат даты delphi format форматирование delphi format delphi delphi Возвращает сумму десятичных чисел

Комментирование и размещение ссылок запрещено.

delphi-box.ru

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *