Процедуры 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 |Continue reading →
Размещено в Функции и процедуры Delphi |В процессе решения некоторых задач возникает потребность задержки выполнения операций. Для этих целей нам подойдет функция Sleep(N), где N это число миллисекунд — длительность паузы.
Continue reading →
Размещено в Функции и процедуры Delphi | Метки Функция Delphi Sleep | Выполняя операции требующие длительных временных затрат, приложение не реагирует на действия пользователя и не реагирует на события приложения, визуальные изменения на форме не отображаются, программа зависает на некоторое время. Подобные ситуации возможны в работе циклов, когда происходит обработка большого числа данных.Для того чтобы исправить сложившееся положение необходимо использовать метод ProcessMessages. Этот метод принадлежит классу Application (данный класс автоматически создается при создании приложения). Данный метод обязывает приложение обработать поступившие и ожидающие своей очереди сообщения.
Continue reading →
Размещено в Функции и процедуры Delphi |Функция | Описание | Аргумент |
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