урок 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 і вирівняти текст по центру або по правому краю таким способом не можна.

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

У тебе виникло питання чому це відбувається?
Вірно?
А як вона оформляється?
Поясни, що такого моторошно дурного я йому сказала?
Не знаю , як вивести годинник окремим рядком, а не «привласнюючи» їх до тексту другий текстового рядка?
Я права?
Е щось типу вирівнювання по лівому краю?
Такий собі align = "left"?
До речі, а як зробити, наприклад, по центру або праворуч?
Та й повинна ж ти проявляти творчу самостійність?