LongTimeFormat — Переменная Delphi

LongTimeFormat — Переменная Delphi

В этом уроке мы рассмотрим функции преобразования чисел в строки и строк в числа.
Давайте рассмотрим часто используемые функции StrToInt, IntToStr, FloatToStr, StrToFloat. Во многих случаях эти функции являются очень полезными в том плане, что они позволяют преобразовывать целочисленные и нецелочисленные переменные типов Integer, Byte, Double, Real и т.п. в их строковое представление в переменную типа String и обратно, если это возможно. Рассмотрим непосредственно сами функции по порядку.
[cc lang=»delphi»]var a: integer;
s: string;
begin
a := 12345;
s := IntToStr(a);
// в результате переменная s будет содержать в себе строку ‘12345’
end;[/cc]
Т.е. функция IntToStr позволяет преобразовывать целочисленную переменную типа integer или byte в ее строковое представление в переменную типа string;

Обратную возможность реализовывает функция StrToInt.
[cc lang=»delphi»]var a: integer;
s: string;
begin
s := ‘12345’; // В s должно быть введено обязательно целочисленное число без лишних символов!
// иначе программа, во время выполнения «конвертации» завершит свою работу
// с ошибкой.
a := StrToInt(s);
// в результате переменная a будет содержать в себе число 12345.
end;[/cc]

Те же возможности нам помогают реализовать функции FloatToStr и StrToFloat, однако они уже позволяют работать с нецелочисленными переменными типа Double, Real и т.п. Работа с ними абсолютно аналогична работе с функциями IntToStr и StrToInt.
[note]Стоит отметить одну важную особенность при переводе строки в нецелочисленное число. В качестве плавающей запятой в «строках-числах» нужно использовать символ «точка», а не символ «запятая». При переводе нецелочисленного числа в строку эта особенность учитывается функцией FloatToStr автоматически.[/note]

Delphi: Конвертация даты

Наверное, я только что изобрел страшный костыль, однако решение имеет право на жизнь и используется в одном из моих проектов.
Основная идея переконвертировать дату из одного вида в другой, и сделать это надо на Delphi.

Добавляем в uses модуль DateUtils.

Делать будем через FormatSettings:TFormatSettings; и StrToDateTime.

var FormatSettings,FormatSettings1: TFormatSettings; inputstr,outputstr:string; begin FormatSettings.ShortDateFormat := ‘yyyy-mm-dd’; FormatSettings.DateSeparator := ‘-‘; FormatSettings.LongTimeFormat := ‘hh:nn:ss’; FormatSettings.TimeSeparator := ‘:’; FormatSettings1.ShortDateFormat := ‘dd.MM.yyyy’; FormatSettings1.LongTimeFormat := ‘hh:nn:ss’; FormatSettings1.TimeSeparator := ‘:’; FormatSettings1.DateSeparator := ‘.’; InputStr:=’2013-03-13 21:10:00′; outputstr:=datetimetostr(StrToDateTime(inputstr, FormatSettings), FormatSettings1); end;

В итоге получаем из «2013-03-13 21:10:00 -> 13.03.2013 21:10:00».

Параметры «FormatSettings»:
y = Год с 2-мя последними цифрами
yy = Год с 2-мя последними цифрами
yyyy = Год как 4 цифры
m = Номер месяца без 0
mm = Номер месяца как 2 цифры
mmm = Месяц с использованием ShortDayNames (Янв)
mmmm = Месяц с использованием LongDayNames (Январь)
d = Число без 0
dd = Число как 2 цифры
ddd = День с использованием ShortDayNames (Воск)
dddd = День с использованием LongDayNames (Воскресенье)
ddddd = День с использованием ShortDateFormat
dddddd = День с использованием LongDateFormat

c = Используется ShortDateFormat + LongTimeFormat
h = Час без 0
hh = Час без 0
n = Минуты без 0
nn = Минуты как 2 цифры
s = Секунды без 0
ss = Секунды как 2 цифры
z = Миллисекунды без 0
zzz = Миллисекунды как 3 цифры
t = Исполльзуется ShortTimeFormat
tt = Исполльзуется LongTimeFormat

Более подробно об операторе можно почитать по ссылке FormatSettings.

LongTimeFormat — Переменная Delphi

Есть дата в виде строки в формате «dd/MMM/yy»
Надо преобразовать ее в TDateTime.
Что то я не могу понять как это сделать?

function StrToDate(const S: string; const FormatSettings: TFormatSettings): TDateTime;

При данном формате даты эта функция (StrToDate) не помогает=(
Либо я что-то не так делаю.

из хелпа:
S must consist of two or three numbers, separated by the character defined by the DateSeparator global variable or its TFormatSettings equivalent.

А «dd/MMM/yy» в виде даты выглядит так 24/апр/07

> даты выглядит так 24/апр/07

Ну тогда походу только в ручную, день и год проще, а вот месяц анализирую, сравнивай, приводи.
или так:
const SDt: String = «24/апр/07»;
var S: String;
D: TDate;
FD: TFormatSettings;
begin
FD.DateSeparator:=»/»;
FD.ShortDateFormat:=»dd/mmm/gg»;
S:=StringReplace(SDt, «янв», «01», []);
S:=StringReplace(S, «фев», «02», []);
S:=StringReplace(S, «мар», «03», []);
S:=StringReplace(S, «апр», «04», []);
S:=StringReplace(S, «май», «05», []);
S:=StringReplace(S, «июн», «06», []);
S:=StringReplace(S, «июл», «07», []);
S:=StringReplace(S, «авг», «08», []);
S:=StringReplace(S, «сен», «09», []);
S:=StringReplace(S, «окт», «10», []);
S:=StringReplace(S, «ноя», «11», []);
S:=StringReplace(S, «дек», «12», []);
ShowMessage(S);
D:=StrToDate(S, FD);
ShowMessage(DateToStr(D));
end;

А я все же надеялся, что обойдется без «в ручную» =)
Спасибо =)

PS:
Есть еще переменная ShortMonthNames.

> Есть еще переменная ShortMonthNames.

ShortMonthNames: array[1..12] of string;
и дальше что? Это для вывода даты, а не для ее «распознования».
Хотя может все и не так. но вряд-ли.


> kull (23.04.07 23:05)
>
> Есть дата в виде строки в формате «dd/MMM/yy»
> Надо преобразовать ее в TDateTime.

Имхо, это одна из наиболее сложных задач для решения в «общем» случае. Могу только дать несколько рекомендаций. Если Дата/Время вводится пользователем через интерфейс программы, то настоятельно рекомендую использовать для ввода данных компонент, заточенный именно под такую задачу. TDateTimePicker, TMonthCalendar, TDateEdit(RxLib) etc. Если же строка с датой получена извне интерфейса программы, то нужно заранее знать её точный формат. И вот тогда можно применить решение (24.04.07 00:41) [4]. Только с небольшим замечанием. Я не знаю такой overloaded версии StrToDate :( Но я и не знаю Д7.

> [7] Германн © (24.04.07 01:01)
> Я не знаю такой overloaded версии StrToDate :(

function StrToDate(const S: string;
const FormatSettings: TFormatSettings): TDateTime;
begin
if not TryStrToDate(S, Result, FormatSettings) then
ConvertErrorFmt(@SInvalidDate, [S]);
end;

function TryStrToDate(const S: string; out Value: TDateTime;
const FormatSettings: TFormatSettings): Boolean;
var
Pos: Integer;
begin
Pos := 1;
Result := ScanDate(S, Pos, Value, FormatSettings) and (Pos > Length(S));
end;
Дальше не буду :)
В сабже D7.

для «распознования» месяца я перегоняю ShortMonthNames в отсортированный TStringlist:

var
i: Integer;
begin
FShortMonths := TStringList.Create;
FShortMonths.Sorted := True;
for i := Low(ShortMonthNames) to High(ShortMonthNames) do
FShortMonths.AddObject(ShortMonthNames[i], TObject(i));

а дальше IndexOf или Find. Для получения номера месяца.
=)


> (24.04.07 01:05) [8]

Да верю я, верю. Я только не знаю что происходит с date/time formatting variables при использовании этой функции. Нужно ли их сначала запомнить (до вызова сей функции), а потом восстановить старые значения.


> kull (24.04.07 01:15) [9]
>
> для «распознования» месяца я перегоняю ShortMonthNames в
> отсортированный TStringlist:
>
> var
> i: Integer;
> begin
> FShortMonths := TStringList.Create;
> FShortMonths.Sorted := True;
> for i := Low(ShortMonthNames) to High(ShortMonthNames)
> do
> FShortMonths.AddObject(ShortMonthNames[i], TObject(i));
>
>
> а дальше IndexOf или Find. Для получения номера месяца.
> =)
>

МолодЕц! Так держать! :-)
Февраль назначаем последним месяцем в году! Ес-сно, он ведь самый короткий. :-)

> [10] Германн © (24.04.07 01:15)
> Нужно ли их сначала запомнить (до вызова сей функции), а потом восстановить старые значения.

Не надо. Переменную типа TFormatSettings нужно вначале заполнить — GetLocaleFormatSettings(LCID: Integer; var FormatSettings: TFormatSettings); — Это в хелпе рекомендуют.
Т.е. в моем примере нужно было так сделать:
GetLocaleFormatSettings(0, FD);
FD.DateSeparator:=»/»;
FD.ShortDateFormat:=»d/m/g»;
.
D:=StrToDate(S, FD);
Хотя, там и надо-то было сепаратор и расположение. так, что GetLocaleFormatSettings и не обязательна. имхо.

> [9] kull (24.04.07 01:15)
> для «распознования» месяца я перегоняю ShortMonthNames в отсортированный TStringlist:

Ты уж тогда лучше его не сортируй, пусть будет как есть :) Хотя в объектах у тебя хранится порядковый номер месяца, но не к чему это. :)


> (24.04.07 01:41) [12]
>
> > [10] Германн © (24.04.07 01:15)
> > Нужно ли их сначала запомнить (до вызова сей функции),
> а потом восстановить старые значения.
>
> Не надо. Переменную типа TFormatSettings нужно вначале заполнить
> — GetLocaleFormatSettings(LCID: Integer; var FormatSettings:
> TFormatSettings); — Это в хелпе рекомендуют.

Ну а потом, а потом что будет? С date/time formatting variables?

> Ну а потом, а потом что будет? С date/time formatting variables?

Да ничего с ними не будет. она нужна только для «формата строки» при «преобразовании».
Вот F1:
SysUtils
Category
datetime routines

Delphi syntax:
function StrToDate(const S: string): TDateTime; overload;
function StrToDate(const S: string; const FormatSettings: TFormatSettings): TDateTime; overload;

C++ syntax:
extern PACKAGE System::TDateTime __fastcall StrToDate(const AnsiString S);
extern PACKAGE System::TDateTime __fastcall StrToDate(const AnsiString S, const TFormatSettings FormatSettings);

Description
Call StrToDate to parse a string that specifies a date. If S does not contain a valid date, StrToDate raises an EConvertError exception.

S must consist of two or three numbers, separated by the character defined by the DateSeparator global variable or its TFormatSettings equivalent. The order for month, day, and year is determined by the ShortDateFormat global variable or its TFormatSettings equivalent—possible combinations are m/d/y, d/m/y, and y/m/d.

If S contains only two numbers, it is interpreted as a date (m/d or d/m) in the current year.

Year values between 0 and 99 are converted using the TwoDigitYearCenturyWindow. This value is stored either in a global variable (first form) or as a field in the FormatSettings parameter (second form) See «Currency and Date-Time Formatting Variables» for more information.

The first form of StrToDate is not thread-safe, because it uses localization information contained in global variables. The second form of StrToDate, which is thread-safe, refers to localization information contained in the FormatSettings parameter. Before calling the thread-safe form of StrToDate, you must populate FormatSettings with localization information. To populate FormatSettings with a set of default locale values, call GetLocaleFormatSettings.
I»m sorry :)

> [13] Германн © (24.04.07 01:52)
> Ну а потом, а потом что будет? С date/time formatting variables?

Т.е. вот ответ на твой вопрос

TFormatSettings defines a thread-safe string formatting context.
Unit
SysUtils
Delphi syntax:
type

TFormatSettings = record
CurrencyFormat: Byte;
NegCurrFormat: Byte;
ThousandSeparator: Char;
DecimalSeparator: Char;
CurrencyDecimals: Byte;
DateSeparator: Char;
TimeSeparator: Char;
ListSeparator: Char;
CurrencyString: string;
ShortDateFormat: string;
LongDateFormat: string;
TimeAMString: string;
TimePMString: string;
ShortTimeFormat: string;
LongTimeFormat: string;

ShortMonthNames: array[1..12] of string;
LongMonthNames: array[1..12] of string;
ShortDayNames: array[1..7] of string;
LongDayNames: array[1..7] of string;
TwoDigitYearCenturyWindow: Word;
end;

Description
TFormatSettings defines a data structure containing locale information used by string formatting routine. Each member of TFormatSettings is equivalent to the global variable with the same name. A variable of type TFormatSettings defines a thread-safe context that formatting functions can use in place of the default global context, which is not thread-safe.

To create and use the thread-safe environment defined by TFormatSettings, follow these steps:

Define a variable of type TFormatSettings
Call GetLocaleFormatSettings to populate the TFormatSettings variable with locale information.
Pass the TFormatSettings variable as the last parameter of the string formatting routine.

Each routine that accepts a TFormatSettings parameter is thread-safe, and is an overload of an equivalent function that refers to the global formatting variables.
Еще раз I»m sorry :)


> The second form of StrToDate, which is thread-safe, refers
> to localization information contained in the FormatSettings
> parameter. Before calling the thread-safe form of StrToDate,
> you must populate FormatSettings with localization information.
> To populate FormatSettings with a set of default locale
> values, call GetLocaleFormatSettings.
> I»m sorry :)

Этот текст ничего не говорит про значения date/time formatting variables.

> [16] Германн © (24.04.07 02:13)

Эх. Германн получим мы. с утра :)
Description
TFormatSettings defines a data structure containing locale information used by string formatting routine. Each member of TFormatSettings is equivalent to the global variable with the same name. A variable of type TFormatSettings defines a thread-safe context that formatting functions can use in place of the default global context, which is not thread-safe.
Описание
TFormatSettings определяет структуру данных, содержащую информацию места действия, используемую строкой, форматирующей рутину. Каждый член TFormatSettings эквивалентен глобальной переменной с тем же самым названием(именем). Переменная типа TFormatSettings определяет безопасный тематикой контекст, который форматирующие функции могут использовать вместо заданного по умолчанию глобального контекста, который — не безопасен тематикой.

Переводил Промтом, так как сам в англ никак. :(


> Переводил Промтом, так как сам в англ никак. :(
>

Да не надо мне перевода. С аглицкого на русский перевод для меня не проблема.
Может я не «пояснил суть».
Вот пример. Я у себя в программе вывожу (в интерфейс, в лог и т.п.) Дату/время функцией DateTimeToStr (Я то вообще то её и не пользую, предпочитаю FormatDateTime, но это «мой скус»). Сия функция использует «date/time formatting variables». Так вот вопрос. Сия функция будет всегда одинаково выводить строковое представление даты/времени? Не повлияет ли на сей вывод вызов function StrToDate(const S: string; const FormatSettings: TFormatSettings)?

> [18] Германн © (24.04.07 02:41)

var FD: TFormatSettings;
begin
ShowMessage(FD.ShortDateFormat); // «»
ShowMessage(ShortDateFormat); // «dd.MM.yyyy»
FD.ShortDateFormat:=»YY/DD/mmmm»;
ShowMessage(FD.ShortDateFormat); // «YY/DD/mmmm»
ShowMessage(ShortDateFormat); // «dd.MM.yyyy»
end;
Все нормально.
TFormatSettings; — record «системных переменных» (имена полей и их тип совподают с сис. перем. и только), и на их системные аналоги она не влияет.


> Все нормально.
> TFormatSettings; — record «системных переменных» (имена
> полей и их тип совподают с сис. перем. и только), и на их
> системные аналоги она не влияет.
>

Готов поверить. Завтра проверю на BDS2006. Ты не обижайся. Когда пошла такая пьянка, то доверяй, но проверяй! :-)

Илон Маск рекомендует:  Что такое код hw_children

> [20] Германн © (24.04.07 03:08)
> Завтра проверю на BDS2006. Ты не обижайся.

Извини Германн, даже и не подумаю :) А. а завтра — это 24 или 25 :)
Расскажешь потом результат проверки.

Обычно сортировку используют для ускорения поиска.

Еще я не понял почему февраль, а не январь? =)

> kull
> Обычно сортировку используют для ускорения поиска.

> MonthNum := Word(FShortMonths.Objects[FShortMonths.IndexOf(MontStr)]);

Ты думаешь тем самым увеличил скорость поиска в 12 значном списке? :)

Хотя может оно и верно в твоем случае, но с другой точки зрения. С точки зрения — номер месяца не должен зависеть от местоположения имени месяца в массиве месяцев. Ну а скорость. может и выиграешь чуток :)

чуток — это в 3 раза, если, например, месяц — декабрь =)


> kull (24.04.07 23:57) [27]
>
> чуток — это в 3 раза, если, например, месяц — декабрь =)
>

А в попугаях, то бишь микросекундах, это сколько будет? :)

Справочник по компонентам Delphi. Часть 1
Страница 11. Функции работы с датами и временем

Функции работы с датами и временем

В Delphi для хранения дать! и (или) времени предусмотрен формат TDateTime, представляющий собой, на самом деле, обычное число с плавающей точкой.

При этом дата представляется целой частью числа, а время — дробной. Преимущество этого подхода в том, что теперь дать! и времена можно кор­ректно складывать и вычитать, например:

procedure TFormI.PormCreate(Sender: TObject);

Функции этой группы приведены в таблице:

function EncodeDate(Year, Month, Day: Word): TDateTime;

Преобразует дату, заданную раздельно годом, месяцем и днем, в формат TDateTime. Если они выходят за допустимые пределы, возникает ИС EConvertError.

procedure DecodeDatefDate: TDateTime; var Year, Month, Day: Word);

Преобразует дату в виде TDateTime к раздельным составляющим: году, месяцу и дню.

function EncodeTimefHour, Min, Sec, MSec: Word):

Преобразует значение времени, заданное часом, минутой, секундой и миллисекундой в формат TDateTime.

procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) ;

Преобразует значение времени в формате TDateTime в раздельные составляющие: час, минуту, секунду и миллисекунду.

function DayOfWeektDate: TDateTime): Integer;

Возвращает номер текущего дня недели от 1 (воскресенье) до 7 (суббота).

Возвращает текущую дату.

Возвращает текущее время.

Возвращает текущие дату и время.

function DateToStr(Date: TDateTime): string;

Преобразует дату Date в текстовую строку.

function TimeToStr(Time: TDateTime): string;

Преобразует время из типа TDateTime в текстовую строку.

function DateTimeToStr(DateTime: TDateTime): string;

Преобразует дату и время из типа TDateTime в текстовую строку.

function StrToDatefconst S: string): TDateTime;

Преобразует текстовую строку в дату типа TDateTime. Строка должна содержать два или три числа, разделенных символом, содержащимся в DateSeparator. Формат даты в строке определяется в соответствии со значением переменной ShortDateFormat.

function StrToTime(const S: string): TDateTime;

Преобразует текстовую строку S в значение времени. Должен использоваться формат HH:NN:SS, где SS — может принимать значения ‘AM’ или ТМ’, иначе означает секунды. Если необходимо получать время в 24-х часовой шкале, то элемент SS формата опус­кается. Если преобразование невозможно, возникает ИС EConvertError.

StrToDateTime(const S: string): TDateTime;

Преобразует текстовую строку S в дату и время в формате MM/DD/YY HH:NN:SS (элемент SS см. выше).

function FormatDateTime(const Format: string; DateTime: TdateTime): string;

Преобразует дату и время из типа TDateTime в тек­стовую строку, используя формат, задаваемый параметром Format (см. примеч. 1).

procedure DateTimeToStringfvar Result: string; const Format: string; DateTime: TDateTime);

Преобразует дату и время типа TDateTime в строку Result, используя формат, передаваемый параметром Format (см. примеч. 1).

1. Правила задания спецификатора формата для даты и времени отлича­ются от рассмотренных выше. В первую очередь надо иметь в виду то, что функции вроде FormatDateTime оперируют над одним значением TDateTime, а спецификаторы формата извлекают из него те или иные составные части. При этом могут использоваться:

Отображает дату, используя формат ShortDateFormat, затем отобра­жается время в формате LongTimeFormat. Время не отображается, если дробная часть переменной DateTime нулевая.

Отображает число месяца без нуля в левом разряде (1-31).

Отображает число месяца с нулем в левом разряде (01-31).

Отображает день недели в соответствии с сокращенными именами из переменной ShortDayNames.

Отображает день недели в соответствии с полными именами из переменной LongDayNames.

Отображает дату в соответствии с форматом ShortDateFormat.

Отображает дату в соответствии с форматом LongDateFormat.

Отображает месяц как число без нуля в левом разряде (1-12).

Отображает месяц как число с нулем в левом разряде (01-12).

Отображает месяц в соответствии с сокращенными именами из переменной ShortMonthNames.

Отображает месяц в соответствии с полными именами из переменной Long MonthN am es.

Отображает год двумя цифрами.

Отображает год четырьмя цифрами.

Отображает час как число без нуля в левом разряде (0-23).

Отображает час как число с нулем в левом разряде (00-23).

Отображает минуты как число без нуля в левом разряде (0-59).

Отображает минуты как число с нулем в левом разряде (00-59).

Отображает секунды как число без нуля в левом разряде (0-59).

Отображает секунды как число с нулем в левом разряде (00-59).

Отображает время в соответствии с форматом ShortTimeFormat.

Отображает время в соответствии с форматом LongTimeFormat.

Отображает время в 12-часовой шкале. ‘AM’ означает часы до полудня, ‘РМ’ — часы после полудня.

Отображает время в 12-часовой шкале. При этом для времени до полудня отображается содержимое переменной TimeAMString, а после полудня — TimePMString.

Отображает время в 12-часовой шкале, ‘а’ означает часы до полудня, ‘р’ — часы после полудня.

Отображает символ — разделитель даты, содержащийся в переменной DataSeparator.

Отображает символ — разделитель времени, содержащийся в переменной TimeSeparator.

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

Например, результатом вызова функции с параметрами

FormatDateTime (‘ «Совещание состоится в» dddd, dirrmim, yyyy, ‘ + ‘ «в» hh:nn’, StrToDateTime(’12/31/95 23:55′)) ;

будет строка ‘Совещание состоится в среду, 31 декабря 1995 в 23:55’ (естес­твенно, если вы переопределили значения элементов массива LongMonth-Names).

3. Спецификаторы могут быть указаны как в верхнем, так и в нижнем регистрах символов — это не играет роли.

DelphiComponent.ru — бесплатно видеоуроки по Delphi, статьи, исходники

Работа с экраном в Delphi

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

Создайте новый проект и разместите на форме две кнопки TButton и один Timage.

Рисование на стандартных Delphi компонентах

Очень часто для лучшего представления данных нужно рисовать внутри ком­понента TListBox. Что здесь имеется в виду? Посмотрите на рис., и вы все поймете.

Для создания этого примера нам понадобится на форме компонент TListBox. В его свойстве items нуж­но создать 8 строк, в качестве заголовков для которых будут выступать числа от 1 до 8. Почему именно эти числа? Да потому, что существует 8 стилей кисти, и у нас будет в списке 8 элементов с изображением каждого стиля.

Компонент работы с графическими файлами (Timage)

Этот компонент вы можете найти на вкладке Additional палитры компонентов. Тогда же не затрагивались другие его возможности, потому что вы еще не бы­ли готовы познакомиться с графикой. Сейчас, когда мы рассмотрели все необхо­димое, пора разобрать этот компонент по свойствам и методам.

Компонент Timage достаточно универсальный и может отображать картинки разного формата. Но в начальной установке он может загружать только файлы форматов BMP, JPG, JPEG или WMF. Давайте посмотрим, как это делается. Соз­дайте новое приложение и установите на форму одну кнопку и компонент Timage с вкладки Additional.

Методы объекта Delphi TCanvas: Pixels

Pixels

Свойство Pixels— двумерный массив, указывающий на битовую матрицу изображения. Что это значит? Проще всего показать. Допустим, что вам нужно поставить точку черного цвета в координатах (10, 10). Для этого вы пишете сле­дующий код:

С помощью этого же свойства можно узнать цвет в какой-либо точке. Например:

с:=Canvas.Pixels[10,10]; if c=clBlack then

//Точка с координатами (10, 10) черного цвета

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

Работа с цветом в Delphi

Мы уже научились менять цвет и даже в предыдущей части узнали, что кон­станта ciBiack равна черному цвету, a ciRed— красному. Но есть еще много кон­стант, которые определяют стандартные цвета для более удобного их использова­ния. Вот именно с ними нам предстоит сейчас познакомиться и узнать, как хранится цвет в памяти машины.

Цвет хранится в виде типа TColor. Хотя в названии типа в начале стоит буква т, этот тип не объектный, а просто число из четырех байт, но реально нас будут инте­ресовать только последние три.

Вы, наверное, должны знать, что в компьютерной графике цвет представляется тремя составляющими: красным, зеленым, голубым (RGB— Red, Green, Blue). В разных пропорциях из этих трех базовых цветов можно получить любой другой. Например, если взять красного и зеленого по максимуму, а синего вообще не брать, то получится желтый цвет.

Каждый из цветов представляется в виде одного байта, так что для хранения трех цветов достаточно 3 байтов. Но зачем же тогда для TColor выделено 4 байта? Это сделано потому, что в компьютере регистры четные и могут хранить только 1 или 2, или 4 байта. Так что у переменной цвета один байт избыточен (первый) и чаще всего он равен нулю. В дальнейшем он может быть использован для обо­значения прозрачности или других целей на усмотрение разработчика.

Конечно же, программисты могли поместить в 6 байт две точки цвета (3 + 3), но этого не стали делать для будущего использования 32-битного цвета. Сейчас же более распространены 24-битные градации.

LongTimeFormat — Переменная Delphi

Любая величина в Delphi может быть постоянной или переменной. Её имя (идентификатор) может состоять из комбинации латинских букв, цифр и знака подчёркивания, и начинаться не с цифры. При этом регистр символов значения не имеет.

Место описания данных в программе — вне логических блоков begin / end. В модуле перед ключевым словом implementation есть блок описания:

var
Form1: TForm1;

Именно здесь, начиная со следующей строки, удобно объявлять глобальные переменные и константы. Как видим, одна (Form1) уже есть!

Команда объявления переменных в языке Delphi:

var имя_переменной : тип_переменной ;

Слово var — ключевое. Именем может быть любой идентификатор, если он не был описан ранее и не является одним из ключевых или зарезервированных слов языка Delphi. Если нужно описать несколько переменных одного типа, то их перечисляют, отделяя запятой:

var A, B, C : Integer;

Если несколько описаний следуют друг за другом, то ключевое слово var повторно можно не указывать:

var A, B : Integer;
C, D : String;

Постоянную величину иначе называют константой. Конечно, в программе можно использовать числа и строки непосредственно: 3.1415 или ‘Это значение числа пи’, но иногда удобнее присвоить их идентификатору. Описание констант аналогично описанию переменных, но используется ключевое слово const, за именем идентификатора следует тип, затем знак равенства и его значение. Причём тип константы допускается не указывать:

const pi=3.1415 ;
ZnakPi : String = ‘Это значение числа пи’;

К слову, константа Pi встроенная в Delphi, то есть для того чтобы использовать в Delphi число 3,1415. в расчётах, нужно просто присвоить встроенную константу Pi переменной типа Real или просто использовать непосредственно в выражениях.

Теперь пришло время узнать о типах данных, используемых в Delphi. Прежде всего это строки и числа.

Строкой называется последовательность символов, заключённая в одиночные кавычки:
‘это текстовая строка’
Если текст должен содержать сам символ кавычки, то его надо повторить дважды:
‘это » — символ одиночной кавычки’
Строка может быть и пустой, не содержащей символов. Тогда она состоит из двух идущих друг за другом без пробела кавычек. Естественно, строка может состоять и только из одних пробелов.
Самый популярный строковый тип — String. Строка типа String может содержать переменное количество символов объёмом до 2 Гбайт. Если нужно ограничить размер строки фиксированным значением, то после ключевого слова String в квадратных скобках указывается число, определяющее количество символов в строке: String[50]. Более полно работа со строками Delphi описывается далее.
Одиночный символ имеет тип Char и записывается в виде знака в одиночных кавычках: ‘a’. Есть символы, которые на экране отобразить невозможно, например, символ конца строки (равен #13), символ переноса строки (равен #10). Такие символы записываются в виде их числового кода (в кодировке ANSI), перед которым стоит знак #. Например, #0.
Наконец, существуют так называемые нуль-терминированные строки. Отсчёт символов в таких строках начинается с нуля, а заканчивается символом с кодом 0 (#0). Такие строки имеют тип PChar.

Числа бывают целые и дробные.
В следующей таблице перечислены стандартные типы целых чисел и соответствующие им дипазоны допустимых значений.

Integer -2147483648 .. +2147483647
Cardinal 0 .. 4294967295
Shortint -128 .. +127
Smallint -32768 .. +32767
Int64 -263 .. +263-1
Byte 0 .. +255
Word 0 .. +65535
Наиболее удобным для использования в программах является тип Delphi Integer. Другие целые типы используются для уменьшения места, занимаемого данными в памяти компьютера.

Илон Маск рекомендует:  dir в HTML

Дробные числа имеют дробную часть, отделяемую десятичной точкой. Допускается использование символа e (или E), за которым следует число, указывающее, что левую часть нужно умножить на 10 в соответствующей степени: 5e25 — пять умножить на десять в двадцать пятой степени.
Ниже приведены стандартные типы дробных чисел и соответствующие им диапазоны допустимых значений. Для большинства типов указан диапазон положительных значений, однако допустимым является аналогичный диапазон отрицательных значений, а также число 0.

Real 5*10-324 .. 1.7*10308
Real48 2.9*10-39 .. 1.7*1038
Singl 1.5*10-45 .. 3.4*1038
Double 5*10-324 .. 1.7*10308
Extended 3.6*10-4951 .. 1.1*104932-1
Comp -263 .. +263-1
Currency 922337203685477.5807
Наиболее удобным для использования в программах является тип Delphi Real. Ему эквивилентен тип Double, но в будущем это может быть изменено. Вычисления с дробными числами выполняются приближённо, за исключением типа Currency (финансовый), который предназначен для минимизации ошибок округления в бухгалтерских расчётах.

Следующим типом данных является логический Boolean, состоящий всего из двух значений: True (Истина) и False (Ложь). При этом True > False.

Теперь, используя компоненты, их свойства и события, вводя собственные переменные, можно конструировать программы, содержащие вычисления. Осталось узнать, как вычисленное значение вывести на экран.
Про консольные программы я здесь не говорю! А в нормальных оконных Windows-приложениях это значение нужно поместить в какой-нибудь компонент, имеющий свойства Text или Caption. Это, например, такие компоненты как Label и Edit, да и сама Форма имеет свойство Caption, куда тоже можно выводить информацию. Однако, в Delphi информацию перед выводом, как правило, необходимо преобразовывать. Так как присвоение возможно только между переменными одного типа, то такая программа (не пытайтесь её исполнять):

var A, B, C: Integer ;
begin
A := 5 ;
B := 10 ;
C := A+B ;
Label1.Caption := C ;
end ;

вызовет ошибку, так как свойство Caption имеет текстовый тип String, а использованные переменные — цифровой тип Integer. Значит, нужно преобразовать значение переменной C в текстовый тип. Для этого есть встроенная функция IntToStr. Строка в нашей «программе», вызывавшая ошибку, должна выглядеть так:

Такая программа, кроме показа числа 15, ни на что не способна. Мы должны научиться вводить в программу другие числа. Используем компоненты Edit. Введённые числа будут содержаться в свойстве Text этих компонентов. Расположим на форме два компонента Edit, один компонент Label и кнопку Button, по нажатию на которую и будем проводить вычисления. В компоненты Edit1 и Edit2 будем вводить числа для суммирования. Чтобы переместиться в редактор кода, щёлкнем дважды по нашей кнопке Button1. Мы попадём прямо в сформированную для нас средой Delphi заготовку обработчика нажатия на кнопку, непосредственно между операторами begin и end. Напишем такой простой код:

procedure TForm1.Button1Click(Sender: TObject);
var A, B, C: Integer;//Не забудьте описание переменных
begin
//Начало кода:
A := Edit1.Text;
B := Edit2.Text;
C := A+B;
Label1.Caption := IntToStr©;
//Конец кода
end ;

При попытке исполнить этот код Delphi покажет ошибки по аналогичной причине — переменные A и B имеют цифровой тип Integer, а свойство Text — текстовый тип String. Исправить ошибки поможет встроенная функция StrToInt, выполняющая обратное преобразование — текст в целое число. Операторы присвоения переменным A и B должны выглядеть так:

A := StrToInt(Edit1.Text);
B := StrToInt(Edit2.Text);

В данном случае переменные A, B, C использовались для наглядности. Можно обойтись одной строчкой:

LongTimeFormat — Переменная Delphi

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

Примечание. Следует иметь в виду, что при записи года двумя последними цифрами фактический год зависит от текущего года и глобальной переменной заданной в Delphi — TwoDigitYearCenturyWindow. По умолчанию эта переменная имеет значение, равное 50, что означает, что в конце этого столетия и начале следующего задаваемые двумя цифрами годы будут относиться к XX в., если число несколько больше 50, и к XXI в., если число несколько меньше 50.

В модуле SysUtils определен ряд стандартных функции работы с параметрами типа даты-времени.

  • Time — текущее время. Функция возвращает текущее значение времени в формате TTime.
  • Date — текущая дата. Функция возвращает текущее значение даты в формате TDate.
  • Now — текущая дата и время. Функция возвращает текущее значение даты и времени в формате TDateTime.
  • DateTimeToStr (DateTime) — символьное представление даты и времени. Функция формирует для параметра DateTime типа TDateTime символьное представление даты и времени с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DateTimeToString (Result, Format, DateTime) — сформатированное символьное представление даты и времени. Процедура формирует символьное представление параметра DateTime типа TDateTime с учетом формата, заданного строкой Format, и помещает результат в строку Result.
  • DateToStr (Date) — символьное представление даты. Функция формирует для параметра Date типа TDateTime или TDate символьное представление даты с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DayOfWeek (Date) — день недели. Функция возвращает день недели заданной даты Date типа TDateTime или TDate в виде числа от 1 до 7, причем нумерация начинается с воскресенья.
  • TimeToStr (Time) — символьное представление времени. Функция формирует для параметра Time типа TDateTime или TTime символьное представление времени с учетом региональной установки Windows и возвращает полученную строку в качестве результата своей работы.
  • DecodeDate (Date, Year, Month, Day) — выделение в дате года, месяца, дня. Процедура выделяет из параметра Date типа TDateTime или TDate год, месяц, день и помещает их соответственно в параметры Year, Month и Day типа Word.
  • DecodeTime (Date, Hour, Min, Sec, MSec) — выделение во времени часа, минуты, секунды и числа миллисекунд. Процедура выделяет из параметра Date типа TDateTime или TTime час, минуту, секунду и число миллисекунд и помещает их соответственно в параметры Hour, Min, Sec и MSec типа Word.
  • EncodeDate (Year, Month, Day) — формирование даты из компонент. Функция формирует из заданного года, месяца и дня (заданных в параметрах Year, Month, Day) комплексный параметр типа TDateTime и возвращает его как результат работы.
  • EncodeTime (Hour, Min, Sec, MSec) — формирование времени из компонент. Функция формирует из заданных часа, минуты, секунды и числа миллисекунд (заданных в параметрах Hour, Min, Sec, MSec) комплексный параметр типа TDateTime и возвращает его как результат работы.
  • FormatDateTime (Format, DateTime) — сформатированное символьное представление даты и времени. Функция формирует символьное представление параметра DateTime типа TDateTime с учетом формата, заданного строкой Format, и возвращает полученную строку как результат своей работы.
  • StrToDate (S) — преобразование символьного представления даты в тип TDateTime. Функция преобразовывает символьное представление даты, находящееся в строке S, в формат TDateTime или TDate и возвращает полученную величину как результат своей работы. Дата должна быть задана в соответствии с региональной установкой Windows.
  • StrToTime (S) — преобразование символьного представления времени в тип TDateTime. Функция преобразовывает символьное представление времени, находящееся в строке S, в формат TDateTime или TTime и возвращает полученную величину как результат своей работы. Время должно быть задано в соответствии с региональной установкой Windows.
  • StrToDateTime (S) — преобразование символьного представления даты и времени в тип TDateTime. Функция преобразовывает символьное представление даты и времени, находящееся в строке S, в формат TDateTime и возвращает полученную величину как результат своей работы. Дата и время должны быть заданы в соответствии с региональной установкой Windows.

Тепеть разберем некоторые функции на примерах.

DateTimeToString

DateTimeToStr

DateToStr

TimeToStr

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

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

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

А вот и сама процедура рисования аналоговых часов.

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

Delphi/Перевод переменных

Переменные можно перевести из одного типа в другой. Например, нужно в компоненте Edit отобразить число. Чтобы, изменить текст в Edit’e, нужно изменить его свойство Text. Что написано в Text, то отобразится в самом Edit’e. Тип свойтсва Text — string. Как отобразить число в Edit’e? Все очень просто. Существует команда IntToStr . Давайте мы её разберем.

Чтобы изменить свойство Text, нужно его «назвать». Общий вид вызова свойства какого-либо компонента имеет вид:

Теперь напишем простую программу, которая переводит переменную типа integer в тип string.

А как отобразить дробное число в Edit’e? Также как с целым числом, только команда другая — FloatToStr . Напишем такую же программу, только вместо integer — real.

Теперь усложним нашу программу — теперь она будет складывать числа в 2-х Edit’ах, а показывать результат в Edit 3-й. У вас появился вопрос: «Как сложить два числа из Edit’a?» Нужна обратная команда — StrToInt , она переводит string в integer.

Но мы поступили хитро — мы не использовали ни одной переменной. Можно было использовать их, но так было сложней. И напоследок про команду — StrToFloat , такая же как предыдущая, только вместо integer — real.

Ввод и вывод в Delphi

Читайте также:

  1. АНАЛИЗ ТЕОРЕТИКО-ЭКСПЕРИМЕНТАЛЬНЫХ ИССЛЕДОВАНИЙ И ФОРМУЛИРОВАНИЕ ВЫВОДОВ И ПРЕДЛОЖЕНИЙ
  2. Ввод и вывод данных
  3. Ввод и вывод двумерных массивов
  4. Ввод и вывод с помощью внешних файлов
  5. Ввод одномерных массивов. Вывод одномерных массивов
  6. Ввод-вывод одномерных и двухмерных массивов
  7. Ввод-вывод.
  8. Вывод данных
  9. ВЫВОД ДВУМЕРНОГО МАССИВА
  10. Вывод дифференциального уравнения Б-Ш-М
  11. Вывод закона Стокса в главной системе координат.

Классы в Delphi

Лекция 24

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

Предком всех классов Delphi является класс TObject. Он обладает самыми общими методами присущими любому объекту Паскаля. Этот класс описывает основные принципы поведения объектов во время работы программы (создание, уничтожение, обработка событий и так далее).

Класс TPersistent (наследник TObject) реализует основные методы копирования содержимого объектов.

Класс TComponent (наследникTPersistent) — это основной родительский класс для всех классов описывающих компоненты Delphi. Этот класс содержит набор общих свойств (число объектов подчиненных данному; список объектов, подчиненных данному, текущее состояние компонента и т.п.) и общих методов (добавление объекта в список компонентов; удаление объекта из списка компонентов и т.д.).

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

Эти средства должны обеспечивать возможность:

— создавать надписи на самой форме;

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

.5.12.1. Компонент Label (класс TLabel)

Пиктограмма: .

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

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

Пример. Пусть в форме мы хотим сделать заголовок «Решение уравнения».

Для создания такого текста надо:

1. В палитре компонентов выбрать страницу «Стандартные»;

2.В палитре компонентов со страницы «Стандартные»; выбрать кнопку с буквой А, щелкнуть по этой кнопке левой кнопкой мыши и нарисовать прямоугольник в нужном месте формы. В результате в форме появится выделенный прямоугольник с надписью «Label1».

Если посмотреть текст модуля формы, то в нем в описании класса формы появится текст

3. В Инспекторе объектов активизируем вкладку свойств компонента Label1 и в свойстве Caption запишем «Решение уравнения». Можно заметить, что сразу же этот текст появится и в форме.

Наглядный вид и характеристики этого компонента можно изменять задавая различные значения свойствам компонента (полезно поэкспериментировать), например:

— свойство Color позволяет изменить цвет фона;

— свойство Font позволяет задавать различные цвет, размер и шрифт символов (для открытия диалогового окна надо щелкнуть по кнопке с тремя точками);

— если свойство Autosize имеет значение True, то размеры прямоугольника будут автоматически устанавливаться в соответствии с размером текста;

n если для свойства WordWrap установить значение True, то текст будет располагаться на нескольких строках — горизонтальный размер окна будет зафиксирован, по мере ввода текста будет изменяться вертикальный размер окна.

Для вывода текста в процессе выполнения программы надо просто присвоить имени поля значение строки символов (переменной или константы)

Label1.Caption:= S; , где S- переменная строкового типа.

5.12.2. Компонент Edit (класс Tedit).

Это прямоугольное окно, в котором возможны ввод и редактирование текста. Можно: вводить, выводить, выделять, копировать, удалять текст.

Компонент Edit — это однострочный редактор, т.е. на экране отображается только одна строка. Записывать в Edit символы можно как со стороны пользователя, так и со стороны программы, т.е. строку Edit можно использовать как для ввода данных в программу, так и для вывода результатов из программы. В форме можно разместить несколько компонент EDIT, все они будут иметь оригинальные имена: Edit1, Edit2, и так далее. Значение вводимой строки присваивается свойству Text этого компонента.

Свойства компонента Edit.

Кроме типичного набора свойств -, Name, Enabled, Top, Height и т.п. этот компонент обладает следующими свойствами.

ReadOnly — это свойство позволяет запретить (значение True) ввод и редактирование текста со стороны пользователя.

TabOrder — задает порядок получения компонентом фокуса при нажатии клавиши Tab. По умолчанию этот порядок определяется порядком размещения компонентов в форме. Компонент с номером 0 получает фокус при открытии формы. Это свойство можно использовать только совместно со свойством TabStop.

TabStop — это свойство позволяет указать может ли компонент получать фокус (значение True) или нет.

Text — это свойство предназначено для записи в строку Edit значения вводимой строки и для чтения из строки последовательности символов. По умолчанию в этом свойстве записано EditX (X — номер компонента Edit в форме).

MaxLength — определяет максимальную длину текста строки в символах. Если значение этого свойства равно 0, то ограничений на длину текста нет.

Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.

Окна редактирования снабжены многими функциями, свойственными большинству редакторов. Например, в них предусмотрены типичные комбинации «горячих» клавиш:

Ctrl-C — копирование выделенного текста в буфер обмена Clipboard (команда Copy),

Ctrl-X — вырезание выделенного текста в буфер Clipboard (команда Cut), Ctrl-V — вставка текста из буфера Clipboard в позицию курсора (команда Paste),

Ctrl-Z — отмена последней команды редактирования.

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

Свойство PasswordChar позволяет превращать окно редактирования в окно ввода пароля. По умолчанию значение PasswordChar равно #0 — нулевому символу. В этом случае это обычное окно редактирования. Но если в свойстве указать иной символ (например, символ звездочки «*»), то при вводе пользователем текста в окне будут появляться именно эти символы, а не те, которые вводит пользователь. Тем самым обеспечивается секретность ввода пароля.

При создании строки редактирования автоматически создается переменная типа String, общая форма имени которой имеет вид

имя_поля.text;.

Например, если в окно с именем Edit3 ввести последовательность символов ‘ABC’, то переменная Edit3.text получит значение ‘ABC’. Это значение можно присвоить любой переменной типа string, например

var S: String;

Для записи последовательности символов из программы в строку Edit1 достаточно выполнить оператор присваивания

Edit1.Text := St; (St — переменная строкового типа).

Пример. Для иллюстрации ввода и вывода данных с помощью компонента Edit создадим проект с формой, показанной на рис.5.24.1

Рис. 5.24.1 Форма для примера

То есть форма должна содержать строку Edit и две кнопки: «закрыть» и «операция». В строку Edit будем записывать символы. При нажатии на кнопку «операция» программа должна забирать введенную последовательность символов, делать с ней некоторые преобразования (например, добавлять слева и справа символ #) и возвращать результат в строку Edit.

1.Создадим форму с заголовком «пример», для этого запишем в свойстве Caption формы слово «пример».

2.Создадим две кнопки «закрыть» и «операция». Как создать кнопки мы уже рассмотрели. Заметим только — при создании второй кнопки в описание класса будет добавлен компонент

и метод для обработки события связанного со второй кнопкой

а в конце модуля формы будет добавлена заготовка процедуры обработчика

2. Создадим строку редактирования Edit. Для этого

— в палитре компонентов выберем страницу «стандартные»;

— щелкнем по кнопке и нарисуем в форме прямоугольник.

На экране в форме появится выделенный прямоугольник с текстом Edit1.

Значение строки редактирования передается через свойство Text, по умолчанию в этом свойстве записано Edit1. Удалим этот текст из свойства Text.

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

5.12.3. Ввод и вывод символьных данных.

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

— взять строку символов и добавить слева и справа символ # ;

— удалить из строки исходную последовательность;

— вывести в строку Edit полученную последовательность.

Для реализации этих функций необходимо в модуле формы добавить следующее (выделено жирным шрифтом):

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

S : String;

б) в процедуру обработчика события для кнопки «операция» добавить текст:

procedure Tform1.Button2Click(sender: Tobject);

S:=Edit1.Text; //чтение из окна в S

Edit1.Text := »; //очистка окна

S:= ‘#’ + S + ‘#’; //добавление символов слева и справа

Edit1.Text := S; //запись в окно новой строки

Полный текст модуля формы приведен ниже.

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TForm1 = class(TForm)

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

var Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);

procedure TForm1.Button2Click(Sender: TObject);

5.12.4. Ввод и вывод чисел.

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

Val(S,m,n) — для преобразования последовательности символов (S) в число (m). Если число содержит недопустимый символ, то переменная n (целого типа) получает значение кода этого символа.

Пример: если в поле Edit1 мы ввели число, значение которого должна получить переменная А, то надо записать

(переменная cod должна быть объявлена как данное целого типа);

Str(Y,S) — для преобразования числа (У) в последовательность символов (S) (символьное изображение числа). В функции Str можно также указывать ширину поля (Sp) и количество десятичных знаков (dz) как и в процедуре write, т.е. форма записи функции Str имеет вид

Например, запись вида Str(y:7:3,S1);

означает, что символьное представление числа У будет занимать поле из 7 позиций и в дробной части числа будет 3 позиции, а переменная Z будет представлена в форме с буквой Е и мантисса будет содержать пять цифр в дробной части, например

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

FloatToStr(X) — преобразует вещественное число типа Extended в символьное представление.

IntToStr(N) — преобразует целое число типа Integer в строку символов.

StrToFloat(s) — преобразует строку s в двоичное вещественное число типа Extended.

StrToInt(s) — преобразует строку s в двоичное целое число типа Integer.

Пример. Преобразуем предыдущий пример так, чтобы при нажатии на кнопку «операция» программа:

— брала из поля Edit символьное представление числа;

— преобразовывала его в числовую форму (переменная Х);

— возводила в квадрат (Y:=X*X);

— полученный результат (У) преобразовывала в символьное представление и выводила его в окне Edit.

Для этого добавим в модуль формы следующее:

1) В раздел переменных добавим описание переменных X, Y и cod, т.е.

S :String;

X,Y :Real;

cod :Integer;

2) В обработчике события для кнопки «операция» запишем

Val(Edit1.Text,X,cod);

Edit1.Text:=»;

Y:=X*X;

Str(Y,S);

Edit1.Text:=S

Полный текст модуля формы для этого примера приведен ниже.

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TForm1 = class(TForm)

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

var Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);

procedure TForm1.Button2Click(Sender: TObject);

| следующая лекция ==>
Свойства компонентов | Свойства компонента StringGrid

Дата добавления: 2014-01-04 ; Просмотров: 7790 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

LongTimeFormat — Переменная Delphi

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

Вот список основных типов переменных в Delphi:

  • Integer — целые числа из диапазона: -2147483648..+2147483647
  • Shortin — целые числа из диапазона: -128..+127
  • Byte — целые числа из диапазона: 0..+255
  • Real — как целые так и дробные числа из диапазона: 5e-324..1.7e+308
  • Double — схож с типом Real
  • String — строковый тип данных
  • Char — символьный тип данных
  • Bollean — логический тип данных. Может принимать значение True — истина или False — ложь

С теорией мы закончили, теперь давайте откроем Delphi 7 и создадим новый проект. После этого кидаем на форму знакомый нам компонент Button и еще не знакомый Label. Компонент Label эта такая полезная вещь, в которую можно записать какую-нибудь подпись. Например подпись для другого компонента или просто записать в него автора программы. Попробуйте отыскать компонент Label сами, наводя на все компоненты в вкладке Standard и читая всплывающую подсказку. Кому сложно найти, то это четвертый компонент слева, не считая значка курсора.

Я всё сделал и у меня получилось вот так:

Сейчас нам нужно создать событие OnClick на кнопке, я надеюсь, что вы помните, как это делать.
Переменные объявляются между ключевыми словами procedure и begin. Объявление начинается с ключевого слова var, потом пишется имя переменной и через двоеточие её тип. Заканчивается все как всегда точкой с запятой.

Создадим переменную S типа String в процедуре OnClick: После этого между ключевыми словами begin end присвоим переменной значение равное ‘Моя первая переменная’. Присвоение пишется следующим образом. Пишем имя переменной, оператор присвоения := и значение. Если мы записываем информацию типа String, то информация заключается в одинарные кавычки.

Общий вид: Теперь если скомпилировать программу и нажать на кнопку ничего существенного не произойдет, просто в переменную запишется значение и всё. Попробуем вывести значение из переменной. Делается это также просто как и записывается. Выводить значение мы будем в наш Label.

Синтаксис такой: Разберем этот код подробно. Сначала мы написали Label1, потом пишем точку и в Delphi появляется огромный список со свойствами данного компонента. Можно конечно порыться и отыскать там Caption, но мы будем умнее! Мы, после того как поставили точку, напишем еще букву C и Delphi как бы отсортирует все свойства и найдет все, которые начинаются с буквы C. Первым в списке как раз будет свойство Caption.

Выбираем его из списка и нажимаем на Enter. Заметьте, что мы писали Label1.C, но после того, как нажали Enter, Delphi сам дописал название свойства. Далее опять же идет оператор присвоения и наша переменная.

Вы наверняка спросите: «Зачем же переменная, если можно было написать Label1.Caption:=’Моя первая переменная’;?». Ответ простой. Это нужно затем, что мы изучаем переменные :).
Нет, на самом деле так присваивать тоже можно, но представьте такую ситуацию, что вы написали очень большую, популярную программу и у вас, там в программе, пятидесяти компонентам присваивается одно и тоже значение и вот перед вами встала задача: «Поменять это значение на более универсальное и понятное для пользователя».

Что вы будете делать?

  • В первом случае у вас всем этим компонентам присваивается одна и та же переменная и чтобы изменить всем этим пятидесяти компонентам значение вам просто нужно поменять значение в переменной.
  • Во втором случае вы сидите 20 минут и всё копируете и копируете значение всем пятидесяти компонентам.

Вывод делайте сами.

И так, продолжаем! В общем виде должно быть так: Компилируем нашу программу и нажимаем на Button (батон/кнопку). Сразу же компонент Label вместо Label1 будет показывать Моя первая переменная.

На этом хотелось бы закончить, так как я уже устал писать урок :), но я еще не познакомил вас с типом Integer и как присваивать переменную с таким типом. Вы думаете, что присваивать ее нужно точно так же как и переменную типа String, но вы ошибаетесь.
Дело в том, что свойству Caption вообще у всех компонентов можно присвоить только текстовые значения. Как мы будем присваивать числовой тип если можно только текстовой? Всё проще некуда. Между типами переменных можно как бы переключаться, то есть можно из числового типа сделать текстовой и присвоить его компоненту Label. Этим мы сейчас и займемся.

Для начала нужно начать сначала :). Объявим переменную с именем I и типом Integer, дописав ее к переменной S. Код: Далее присвоим переменной I значение 21. Заметьте, что числовое значение записывается без одинарных кавычек! Теперь присвоим свойству Caption значение переменной I, для этого нужно воспользоваться оператором IntToStr(). Он как бы конвертирует числовой тип в текстовой. В скобках указывается переменная, которую нужно конвертировать.

Общий вид кода: Скомпилируйте программу и вы увидите, что Label будет отображать значение переменной I, то есть 21.

Ну вот и всё! Удачи!
Встретимся в следующем уроке!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 22 Апреля 2012
Просмотров:

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

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