Книга посвящена практике работы мобильных приложений в среде Delphi 10.3. До настоящего времени нет практических руководств в этой области, при этом Delphi 10.3 значительно отличается от более ранних версий, Описывается последовательно создание приложений и рабочие компоненты, которые реально работают в данной среде, особенности и оптимальные режимы использования, описание основных свойств и функций, реальные примеры, что позволяет использовать книгу и новичкам.
Приведённый ознакомительный фрагмент книги Delphi: реальности программирования для смартфонов предоставлен нашим книжным партнёром — компанией ЛитРес.
Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других
4. Типы данных в Delphi 10.3
Типы данных, как обычно, объявляются перед началом программы (до begin) используя инициацию var:
var
x,y:Integer;
m: Double;
n: Float;
str1:String; // Строковая переменная.
Mas: array [1…100] of String; // Массив одномерный из 100 строк, начало с 0
Ar: array [0..9] of array [0..9] integer; // Многомерный массив, начало с 0.
D: array of real; // Динамический массив
MyChar: Char; // Тип для хранения простого символа.
R: TRect; //Область, ограниченную R. Left, R. Up, R. Right, R.Down.
Численные значения: Word, Integer, Doable, Float, Real; учитывая, что точность составляет 5—6 знаков, обычно используют Integer для целочисленных и Double для чисел с запятой, которые могут быть представлены также в формате Е: 3.14E+2 = 3.14E+00 = 3.14; 23.5Е-2 = 0.235. Для округления числа «x» удобно использовать Round (x), округляющий до ближайшего целого; также можно использовать для выделения целой части Trunk (x) и дробной части Frac (x).
Для ряда функций нужно добавить пакет math в User начала программы. Доступны многие математические функции, в том числе: абсолютное значение abs (х), квадрат sqr (x) и корень квадратный из х: sqrt (x); для степенной функции преобразование: xn = exp (n*ln (x); корень n-й степени из x = exp (1/n*lnx). Имеется также функция возведения XY: Power (x,y):
var
Z: Real;
begin
Z:= Power (0.25, 0.5); {Z:= 0.5}
end;
Функция получения вероятного числа: Random (n), по умолчанию пустые скобки () — вероятное число от 0 до 1; при «n» целочисленном — целочисленное значение от 0 до «n-1».
Символы представлены типом Char: Type: Char = #0..#255; Char:= «3». Код символа можно узнать по функции Chr (n). Код ANSI: #0…255. UNICODE: первые 256 символов = ANSI. Chr (66) = B; Char (67) = C.
var
myChar: Char;
begin
myChar:= «G»; // Назначение из символьной константы
ShowMessage («Символ G = ' + myChar); //Получаем «Символ G = G»
myChar:= #65; // Назначение из целочисленной константы
ShowMessage («#65 = ' + myChar); // Получаем «#65 = А»
end;
Присваивание значения требует двоеточия перед равенством: n:= 10; обычное равенство (=) используется в булевых значениях сравнения (true/false): if n = 10 then… Неравенство: X <> Y.
Массивы: важная часть программ для накопления данных. Могут быть:
— одномерные: Mas: array [1…100] of String; // все начинаются с 0.
— многомерныe: Ar: array [0..9] of array [0..9] of integer;
— динамический массив: D: array of real.
Перед использованием динамического массива устанавливается его длина (начинается с 0): setLeangth (D,20). Закрытие массива: D_M: =nil. элементы массива начинаются с 0, исключая строковой массив, начинающийся с 1.
Доступ к массиву по его индексу: n:= D [21]; соответственно: D [21]:= n. Для заполнения массива обычно применяется конструкция цикла:
for n:= 1 to 100 do
begin
D [n]:= n-1; //Нумерует компоненты массива D [100], начиная с 0
end;
Можно найти максимальное и минимальное значение и среднее по массиву: MaxIntVal (D); MinVal (D): double); Mean (D):double), копировать массив в другой с определенного компонента: D:= copy (D, 0, 20) и др.
Строки: ShortString: 255 символов и занимает в памяти 2 байта; String = AnsiString: 1031 символ. AnsiString или WideString содержат большое количество символов. В типе AnsiString символы кодируются в коде ANSI, а в типе WideString в коде Unicode. Общим типом является тип String. String [n] — ограничивает длину строки.
Со строками можно проводить множество операций:
— найти в строке субстроку, ее индекс: n:= Pos (subStr, str);
— копировать строку str c позиции index и числом знаков count: str1:= copy (str, index, count);
— аналогично удалить часть строки по индексу delete (str, index, count);
— вставить субстроку: insert (str1, str0, index);
— длину строки можно узнать как: length (str).
Для выравнивания строк полезна функция вставки пустых символов: StringOfChar (»», count); если использовать моноширинный шрифт, то получим идеально выровненные в столбик строчки.
SelStart и SelLength устанавливают позицию 1-го символа и длину записи, SelText — выделенный текст, весь текст выделяет SelectAll; ClearSelection очищает выделенный текст; Clear очищает текст, Undo возвращает предыдущее действие.
Для копирования текста используют CopyToClipBorad, для вставки Paste, для замены символов StringReplace (). Перед копированием целесообразно выделить текст для копирования; так, Memo.CopyToClipBorad ничего не копирует, для копирования всего содержимого компонента Memo нужно предварительно выделить его содержимое:
Memo.SelectAll;
Memo.CopyToClipBorad
Перевод каретки: string1 + #13#10 + string2 (перевод каретки и конец строки с переносом string2 на другую строку).
Изменение типов проводится очень часто, обычно для передачи строкового значения в числовое и наоборот, используют: StrToInt; InToStr; StrToFloat (str); для форматирования: FloatToStrF (n, ffGeneral или ffFixed, count знаков всего, count знаков после зпт). Вместо Float используют Double.
Дата и Время. Имеется значительное число возможностей работы с датой, но обычно достаточно узнать настоящую дату DateToStr (Now): и текущее время: DateTimeToStr (Now).
Форматы представления даты:
dd/mm/yy hh: mm: ss = 09/02/49 01:02:03
mmm = Feb
mmmm = February
ddd = Tue
dddd = Tuesday
ddddd = 09/02/2049
dddddd = 09 February 2049
hhampm = 01AM
t = 01:02
tt = 01:02:03
dd/mm/yyyy = 09/02/2049
dd/mm/yy hh: mm: ss = 09-02-49 01_02_03
mmm = FEB
mmmm = FEBRUARY
ddd = WED
dddd = WEDNESDAY
ddddd = 09-FEB-49
dddddd = WEDNESDAY 09 of FEBRUARY of 1949
hhampm = 01morning
t = 01_02_03
tt = 01 _ 02 _ 03. 004
dd/mm/yyyy = 09-02-1949
Для отсчета времени в Delphi 10.3 имеется такой же компонент, как и ранее: Timer, запускающийся при присвоении функции Timer. Enable:= true и выключаемый присвоением…false; имеет единственное действие, повторяемое через задаваемый промежуток времени (в мСек). Однако, кроме малой точности (50 мСек) при достаточно нагруженной программе он действует крайне медленно, может тормозить в 2 раза и несколько секунд включаться, так что практически мало пригоден (хотя вне Android работает вполне точно и хорошо). Для получения времени между 2-мя событиями в Delphi 10.3 удобнее всего использовать функции даты-времени:
Разница 2-х времен в Сек:
// На Кнопку Start
var
str, h, m, s: String;
t1:Integer;
begin
str:= DateTimeToStr (Now); // Начальное время
h:= Copy (str, 12, 2);// Отсекаем Дату и сразу берем значение Часы
m:= Copy (str, 15, 2);
s:= Copy (str, 18, 2);
t1:= StrToInt (h) *3600 + StrToInt (m) *60+ StrToInt (s); //Текущее время в сек
Edit1.Tex:= IntToStr (t1);
end;
// На Кнопку Stop
var
str, h, m, s: String;
t, t1, t2:Integer;
begin
str:= DateTimeToStr (Now); // Конечное время
h:= Copy (str,12,2);
m:= Copy (str,15,2);
s:= Copy (str,18,2);
t2:= StrToInt (h) *3600 + StrToInt (m) *60+ StrToInt (s);
t1:= StrToInt (Edit1.text);
t:= t2 — t1;
Edit3.Text:= IntToStr (t); // Итоговое прошедшее время
end;
Можно также использовать функцию разбора времени на составляющие:
var
Hour, Min, Sec, Msec: Word;
begin
DecodeTime (Now, Hour, Min, Sec, Msec);
Edit1.Text:=IntToStr (Hour) +IntToStr (Min) +IntToStr (Sec) + IntToStr (Msec);
end;
Приведённый ознакомительный фрагмент книги Delphi: реальности программирования для смартфонов предоставлен нашим книжным партнёром — компанией ЛитРес.
Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других