Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по Delphi для чайника, который хочет стать самоваром Урок 2. Выводим дату


Информационный Канал Subscribe.Ru

Другие материалы на сайте "ЕЖИдневник" 

Урок 2. Выводим дату

Исходные тексты программы здесь


Работа с событиями в инспекторе объектов. Функция даты. Функция перевода формата даты в строку. Специальные символы в строке. Оператор присваивания.

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

1. Выдели форму (если ты только что открыла программу, то форма у тебя и выделена, иначе кликни по пустому месту формы или выбери форму из списка в инспекторе объектов). Пока у тебя в проекте имеются только два компонента: форма и метка. Так вот, выделена должна быть форма.

2. В инспекторе объектов переключись на закладку Events (закладка Properties - свойства, а Events - события). Найди событие OnCreate и сделай на нём двойной щелчок. В тексте программы у тебя появятся строки:

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

Процедура TForm1.FormCreate называется обработчиком события OnCreate.

3. Обрати внимание, что в тексте программы у тебя написано довольно много. Всё это Delphi написала самостоятельно, пока не обращай внимания на всё остальное. Давай разберёмся с этими тремя строками.

Слово procedure обозначает, что начинается описание процедуры, то есть обособленного участка программы, который не будет исполняться до тех пор пока не будет вызван. Слово FormCreate - это имя нашей процедуры. Слово TForm1 означает, что эта процедура принадлежит нашей форме. Sender - имя параметра, который передаётся процедуре (при вызове процедуры надо будет обязательно указывать реально существующий объект в качестве такого параметра). TObject - тип параметра. Обрати внимание на синтаксис: хозяин процедуры отделяется от имени точкой, параметры процедуры указываются в круглых скобках, завершается заголовок процедуры точкой с запятой.

Между словами begin и end заключается тело процедуры. В конце обязательно ставится точка с запятой.

Внимание, сюрприз! Всё, что я сказал по поводу заголовка процедуры - это пока для общего развития. Delphi уже почти всё сделала за нас, прописала заголовок процедуры в описании формы, связала эту процедуру с событием OnCreate, позаботилась о передаче параметра. Нам нужно написать только тело процедуры.

4. Напишем между словами begin и end следующий текст:

  Label1.Caption := Label1.Caption+#13#10+DateToStr(Date);

Не забудь отступить на два пробела от левого края. Здесь мы вызываем функцию Date, которая возвращает текущую дату в специальном формате, с помощью функции DateToStr переводим дату в строковый формат. Формируем строку путём сложения строк Label1.Caption (да, да это то самое свойство Caption нашей метки, которое на прошлом уроке мы правили в инспекторе объектов), двух специальных символов «перевод строки» (#13) и «возврат каретки» (#10) - их нам приходится задавать указывая соответствующие номера после символа диеза, и той строки, которую нам вернула функция DateToStr. Результат сложения присваиваем свойству Caption метки. Обрати внимание, что для присваивания используется последовательность символов «:=». В конце ставим точку с запятой.

5. Запустив программу, мы увидим, что теперь после строки «Здравствуй, Alёna!» печатается текущая дата. У тебя возник вопрос почему это происходит? Мы ведь нигде не вызывали процедуру TForm1.FormCreate! Она вызывается автоматически при возникновении события OnCreate, а оно в свою очередь при исполнении программы происходит один раз, сразу после создания формы.

Домашнее задание. Аналогично дате выведи время. Для определения времени служит функция Time, перевести время из специального формата в строку можно с помощью функций DateTimeToStr и TimeToStr.

В следующем уроке мы соорудим из нашей программы простенькие часы.

«Я не дурак, я всё ловлю на лету,
Но я не понял, что ты конкретно имела в виду…»

Во-первых, не Label1, а Label2. Поскольку у меня, как ты можешь видеть, две текстовые строки, логически взаимосвязанные друг с другом, поэтому разбивать их, вклинивая между ними указание временные указатели как минимум нелогично. Верно?

Во-вторых, я чего-то не догоняю… DateTimeToStr - насколько я понимаю, это функция для того, что программа одновременно выводила дату и время? А как она оформляется? При попытке написать вот такую команду:

Label2.Caption := Label2.Caption+#13#10+ DateTimeToStr (DateTime);

Дельфинчик сказал мне: «Сама дура» и начал подчёркивать красным (объясни, что такого жутко глупого я ему сказала?)… В результате имеем то, что имеем: две строки, одна из которых с датой, другая - с временем. Это смотрится неэстетично. :( А ещё мне не нравится то, что дата и время наследуют свойства Label2.Caption - если ты понимаешь, что я имею в виду. Мне бы хотелось, чтобы дата-время были в одну строку и печатались нормальным, неярким шрифтом. Не знаю, как вывести часы отдельной строкой, а не «присваивая» их к тексту второй текстовой строки? :о( Кстати, ИМХО, строка дата-время была бы гораздо более к месту в самом верху формы, до этого импровизированного «диалога» раздвоенной личности. ;о)

Зарубка на память (попрошу поправить, если поняла неверно значение):
#13 - это означает, что какая-то переменная будет выводиться с новой строки.
Я права?
#10 - это что-то типа выравнивания по левому краю? Этакий align="left"?
Кстати, а как сделать, например, по центру или справа?

Ну, поскольку этот урок я написал задолго до того, как ты засела за программирование, то я не мог знать, что ты используешь две метки. Да и должна же ты проявлять творческую самостоятельность?

DateTimeToStr действительно возвращает в текстовом виде дату и время. Если ты ей передашь в качестве параметра дату и время во внутреннем формате Delphi, который так и называется TDateTime и определяет количество суток, прошедшее с полуночи 30 декабря 1899. Функция Date возвращает целое число суток, а функция Time - дробь - часть суток. Таким образом, что бы получить дату и время «в одном флаконе» нужно сложить Date+Time.

Если ты не хотела чтобы дата и время печатались в рамках второй метки, то кто тебе мешал создать третью метку? И поместить её в верху формы?

А вот с символами #10 и #13 ты похоже не совсем поняла. :-( Это просто символы, такие же как и символы «-», «Д», «о», «б», «р» и т.д. Каждый символ имеет свой код, например символ «-» имеет код 189. Всего в таблице символов ANSI (которой мы пользуемся) имеется 256 символов. Символы с кодами от 32 до 255 являются отображаемыми символами и могут быть вставлены в любую строку программы как в виде самих себя так и в виде своего кода (со знаком диеза в начале), неотображаемые символы с кодами от 1 до 31 могут быть вставлены в строку только в виде кода, а символ с кодом 0 служит для того, что бы пометить конец строки. Когда твоя программа рисует метку, она перебирает все символы, которые ты присвоила свойству Caption и, если встречает символ с кодом 189, то рисует горизонтальную чёрточку с текущей позиции и смещает текущую позицию вправо, если встречает символы с кодами 13 и 10, то ничего не рисует и в первом случае смещает позицию вниз, а во втором - влево в самое начало строки. То есть это не аналог align="left", а скорее аналог отсутствия align и выравнить текст по центру или по правому краю таким способом нельзя.


Все комментарии (цензурные и по возможности грамотные) рассматриваются в порядке живой очереди, принимаются к сведению и даже публикуются на сайте. Так что если тебе есть что сказать по поводу вышепрочитанного - мыль сюда!!! ;)


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.samovar
Отписаться

В избранное