Урок 3 - Конструкция IF...THEN...ELSE

  Здравствуйте, в этом уроке я познакомлю вас с конструкцией if...then...else и мы напишем программу проверки логина и пароля! И так, приступим! Конструкцией if...then...else можно проверять какое-нибудь условие, дословно она переводится так: если...то...иначе.

Конструкция имеет такой вид:

if (условие) then
begin
//Если условие верно, выполняем действия
end
else
begin
//Если условие не верно, выполняем действия
end;
Кстати, после двойного слеша "//" пишется комментарий. Он никак не влияет на код программы, потому что компилятор его игнорирует.

Теперь я попытаюсь вам объяснить всё на практике. Открываем Delphi и создаем новый проект.
Кидаем на форму уже знакомые нам компоненты Button, Label 3 штуки и еще не знакомый Edit 2 штуки (он находится правее от компонента Label).

Edit, это Ученик. Ученик, это Edit. Вот я вас и познакомил :)
Извините за мой глупый юмор, Edit это обычное поле ввода, которое встречается в повседневной жизни, например при регистрации на сайте.
Располагаем компоненты так, как показано на рисунке:

Пример формы


Переходим в инспектор объектов и изменяем свойства у компонентов по очереди:
  • Label1.Caption = 'Логин'
  • Label2.Caption = 'Пароль'
  • Label3.AutoSize = False Выставив значение False у свойства AutoSize, мы запретили автоматически менять размер компоненту
  • Label3.Caption = ' ' Когда мы стёрли весь текст, размер компонента не изменился
  • Edit1.Text = ' '
  • Edit2.Text = ' '
  • Button1.Caption = 'Авторизоваться'
Сейчас выделяем компонент Label3 и растягиваем его ширину на всю форму:

Пример формы


Нужно изменить еще одно свойство у компонента Label3, оно называется Alignment и отвечает за выравнивание текста по центру. Выставляем значение taCenter. Теперь весь текст будет появляться в этом лейбле по центру.

Мы завершили с настройкой формы, теперь создаем обработчик OnClick на нашей кнопке. И так, принцип работы нашей программы: если логин и пароль верны, то оповещаем об этом, иначе - выдаем ошибку.

Начнем с простого - проверка логина:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text = 'admin' then //Если логин верный, то...
begin
Label3.Caption:='Вы авторизованны!'; //Авторизовываем пользователя
end
else //Иначе
begin
Label3.Caption:='Логин не верный!'; //Выдаем ошибку
end;
end;
Компилируем программу и вводим в наш Edit1 слово admin, нажимаем на кнопку и вуаля - Label3 оповестит о том, что мы авторизованы, теперь напишите что-нибудь другое в Edit1 и нажмите на кнопку. Label3 оповестит, что логин не верный.

Идем дальше - проверяем логин и пароль. Так как нужно проверять 2 условия, каждое из условий нужно окружить скобками, а между скобок напишем ключевое слово and:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text = 'admin') and (Edit2.Text = 'pass') then //Если логин И пароль верны то...
begin
Label3.Caption:='Вы авторизованны!'; //Авторизовываем пользователя
end
else //Иначе
begin
Label3.Caption:='Логин ИЛИ пароль не верный!'; //Выдаем ошибку
end;
end;
Компилируем программу и проверяем правильность работы кода.

Идем дальше - так же проверяем логин и пароль, но теперь между условиями напишем ключевое слово or вместо and это означает что авторизация пройдет если верно хоть одно из условий:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text = 'admin') or (Edit2.Text = 'pass') then //Если логин ИЛИ пароль верны то...
begin
Label3.Caption:='Вы авторизованны!'; //Авторизовываем пользователя
end
else //Иначе
begin
Label3.Caption:='Логин И пароль не верны!'; //Выдаем ошибку
end;
end;
Вернемся к коду, где использовали ключевое слово and между условиями. У нас там выдается ошибка 'Логин ИЛИ пароль не верный', если пользователь ошибся. Давайте сделаем ошибку конкретней, чтобы она сообщала, что именно не верно, логин или пароль? Для этого сотрем нашу не конкретную ошибку и добавим еще 3 конструкции if...then. Вместо знака равенства в условии, мы будем использовать знак не равенства <>
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text = 'admin') and (Edit2.Text = 'pass') then //Если логин И пароль верны то...
begin
Label3.Caption:='Вы авторизованны!'; //Авторизовываем пользователя
end
else //Иначе
begin
if Edit1.Text <> 'admin' then //Если логин не верный
begin
Label3.Caption:='Логин не верный!'; //Выдаем ошибку
end;
if Edit2.Text <> 'pass' then //Если пароль не верный
begin
Label3.Caption:='Пароль не верный!'; //Выдаем ошибку
end;
if (Edit1.Text <> 'admin') and (Edit2.Text <> 'pass') then //Если логин и пароль не верны
begin 
Label3.Caption:='Логин и пароль не верны!';  //Выдаем ошибку
end;
end;
end;
Компилируем и проверяем! У меня всё работает, а у вас? Пишите в комментариях, если возникли трудности.

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

Пример работы XPManifest


Задание на закрепление: дополнить в программу несколько пользователей со своими паролями.

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




Добавил(а): 4eJloBeK Дата: 2012-08-08
Проверка логина - можно сказать скопировал код из урока, но все равно не компилирует. Вот эта ошибка-[Error] Login.pas(44): Declaration expected but end of file found. В чем может быть ошибка?



Добавил(а): Programer Дата: 2012-08-01
Спасибо огромное за этот урок и за этот компонент XPManifest теперь с помощью этого компонента мои программы выглядят современнее



Добавил(а): Admin Дата: 2012-08-01
А я еще думал, рассказывать про этот компонент или нет...



Добавил(а): Admin Дата: 2012-08-09
Проверь соответствие begin end.



Добавил(а): 4eJloBeK Дата: 2012-08-09
Проверил, все верно, код точно такой же как и в уроке, не компилирует( мб стоит скачать другой/переустановить Delphi? у меня стоит Delphi 7.



Добавил(а): Admin Дата: 2012-08-09
Переустанавливать Delphi из-за ошибки - глупо. Скопируй весь код своей программы мне в ЛС. Возможно в коде (в самом конце) не стоит заключительный "end."



Добавил(а): 4eJloBeK Дата: 2012-08-09
насчет переустановки-спасибо, буду знать, код кидаю в лс.



Добавил(а): SyGaK Дата: 2012-10-05
Ребята, не могу найти свойство Alignment. Можно бы скрин где он находится?



Добавил(а): SyGaK Дата: 2012-10-05
Ах да, все. Нашел, сайт 5+



Добавил(а): Admin Дата: 2012-10-06
SyGaK, спасибо, очень приятно!



Добавил(а): eXstra Дата: 2013-01-08
очень хороший урок



Добавил(а): Programer Дата: 2013-05-01
Конечно вопрос не к теме относится но всё же спрошу кто знает где можно скачать Windows 8 X64 bit?



Добавил(а): Admin Дата: 2013-05-01
Programer, гугл не помогает уже? http://rutracker.org/forum/viewtopic.php?t=4386639



Добавил(а): Programer Дата: 2013-05-02
А X64 bit версия активирована навсегда ?



Добавил(а): Admin Дата: 2013-05-02
Нет, там же написано, что активатор пока на 180 дней, потом можно вновь активировать. Хотя, лично у меня винда больше 4 месяцев не стоит



Добавил(а): Ulibrext Дата: 2013-05-11
Извеняюсь за тугоумие не понял куда вписывать других пользователей!



Добавил(а): delfiSkin Дата: 2013-05-15
изучал до этого паскаль,как то там было поменьше *begin* и *end* при работе с if then else, а здесь можно как-то укратить их количество?



Добавил(а): Admin Дата: 2013-05-16
Конечно, если после условия выполняется одно действие, то можно записать без begin и end. Например: if a=b then a=1;



Добавил(а): Asyanya Дата: 2013-06-05
При добавлении новых пользователей, программа поступает следующим образом: - если ввожу правильную пару логин-пароль, то программа выдает "Вы авторизованы!" - если ввожу одно значение неправильным, то программа выдает "Логин И пароль не верны!" Где я напортачила?



Добавил(а): RinDproramer Дата: 2013-07-14
Решил написать простенькую компьютерную игру, только сколько нужно условий(if).И даже получается условие в условии: if (условие) then begin if (условие) then begin end else begin end; end else begin end;



Добавил(а): CrossF1re5 Дата: 2013-09-05
Вообшем у меня проблема заключается в том что даже при банальной компиляции 1 кода -проверка логина вылетает ошибка!!!33 раза переписывал,копипастил и.т.д толку 0 может у меня проблема в самом Delphi?Что делать?



Добавил(а): Lammer Дата: 2013-09-05
CrossF1re5, Delphi тут не причем видимо ты что то намудрил кинь свой код.. Совет: Скачай СnPack очень полезная вещь показывает закрыл ты полностью процедуру или нет



Добавил(а): CrossF1re5 Дата: 2013-09-05
Lammer спс уже разобрался !



Добавил(а): мультик Дата: 2013-11-05
я ароде всё правильно прописал а компиляция не происходит



Добавил(а): Lammer Дата: 2013-11-09
мультик ,в чем ошибка то скинь мне сво



Добавил(а): sema- 2014 Дата: 2013-12-03
Добавил компонент XPManifest, на прогу и ничего в проге не изменилось, всё как было, до этого компанента, может что не допонял я ?... никаких кнопочек новых не появилось, прога не изменилась, вообще никаких изменений на проги не вижу, что с этим компанентом, что без него, не понял в чём его фишка?.



Добавил(а): sema- 2014 Дата: 2013-12-03
А так урок суперский!!! понятней всяких томов по программированию, где всё написано на фалехов - гонте - хоселапе!!! Учителю респект и Уважуха!!!



Добавил(а): Program Дата: 2013-12-26
А как сделать чтоб в программе можно было новый аккаунт создать?



Добавил(а): RinDproramer Дата: 2013-12-31
Если создать систему создания новых аккаунтов, то программа расширится в 2-3 раза. Во первых нужно создать файл хранения аккаунтов, во вторых нужно чтобы Делфи распознавал эти аккаунты, в третьих нужно делать доп. условия, для проверки правильности введенных данных.



Добавил(а): Samil Дата: 2014-01-16
А какая разница написать столько "begin" и "end". Я написал только с двумя "begin" и "end" в начале и в конце и все работает нормально.



Добавил(а): RamaL Дата: 2014-01-29
Spasibo za uroki ya yeshe ne vstrechal takix ponyatnix urokov kak v etom sayte... esheraz spasibo



Добавил(а): zhambylgaziz Дата: 2014-04-05
admin, я сделал проект новый и включил туда if then elsе, но у меня не как этот а другой, и вот он показывает в строке где написано условие есть ошибка, что то должно быть булеан



Добавил(а): Enselensess Дата: 2014-04-27
admin, привет Сайт отличный, Спасибо У меня вопрос, вот как можно ONClick Event cделать и на кнопке Enter, я вот попробовала, но к сожалению, не получается. Спасибо, еще раз



Добавил(а): Admin Дата: 2014-04-27
Enselensess, у большинства компонентов есть событие OnKeyDown, сравнивайте в этой процедуре (например у Edit2) переменную Key с кодом клавиши Enter. Например: if (Key = VK_RETURN) then ...



Добавил(а): belogod Дата: 2014-05-21
Круто. И огромное Вам спасибо. Главное, что всё понятно, без глюков и на будущее пригодится.



Добавил(а): Dianne_Fox Дата: 2014-10-07
у меня при первой же компиляции вылетают ошибки, код точь в точь такой же, даже не знаю в чем проблема



Добавил(а): Lammer Дата: 2014-10-12
про OR то забыли



Добавил(а): Nothing Дата: 2014-12-01
Скиньте пожалуйста файл для скачивания с готовой программой



Добавил(а): azzell999 Дата: 2014-12-07
Доброго времени суток! не могу компилировать... выдает ошибку. Подскажите пожалуйста что делать, переписывал уже кучу раз)



Добавил(а): azzell999 Дата: 2014-12-07
Разобрался! Ложная тревога! урок замечательный спасибо админ!



Добавил(а): Artemjke Дата: 2015-01-14
Уже 2 часа сижу голову ломаю, как других пользователей добавить, может кто-нибудь подскажет код? P.S. Спасибо за уроки отличный сайт



Добавил(а): Weller Дата: 2015-04-30
Я тоже не смог сделать еще несколько пользователей..



Добавил(а): Volodymyr Дата: 2015-07-26
Спасибо за урок! Все вышло!



Добавил(а): nicmir Дата: 2015-08-03
Здравствуйте Отличный урок! У меня вот есть маленькое дополнение, возможно кому-нибудь пригодится. Обычно при вводе пароля, реальные символы скрываются. А вместо них видны точечки или звёздочки. Что бы добавить такую возможность, нужно у компонента edit2 найти свойство PasswordChar и указать в нём символ (звёздочку например), которым будут заменяться символы при вводе.



Добавил(а): RootKit Дата: 2016-01-08
Спасибо за урок. Давно хотел научиться. Школьная программа и университет 2 семестра не дали результатов. Тут все понятно, сам быстро разбираешься.



Добавил(а): erbuz Дата: 2016-01-14
чот код задания не отправился



Добавил(а): erbuz Дата: 2016-01-14
/les/les3.php



Добавил(а): sirynka Дата: 2016-04-03
после того как добавил елемент XPManifest пропадает кнопка, но если я наведу курсор на место кнопки она возвращаеться как быть?



Добавил(а): pashok Дата: 2016-07-11
Здравствуйте, все было понятно, кроме того, как добавить еще пользователей.



Добавил(а): qwerty001 Дата: 2016-08-25
У меня ошибки выходят в делфи почему



Добавил(а): kirill.abdulov Дата: 2016-08-28
Я много видел различных сайтов с уроки изучения Delphi но этот сайт , шикарен



Добавил(а): nadia010897 Дата: 2016-09-17
не получилось добавить других пользователей



Добавил(а): vol4ek Дата: 2016-12-23
Доброе время суток друзья. У меня программа почему то поступает так: Если ввожу правильную пару логин-пароль, то программа выдает "Вы авторизованы!" - если ввожу одно значение неправильным, то программа выдает "Логин и пароль не верны!" Где мог запороть проверил код несколько разв се верно. И еще вопросик по XPManifest как его правильно добавить как не пробовал ничего не меняется. Спасибо оч жду ответы.


  1. volchok
    volchok a year ago
    Все работает, спасибо за урок
  2. Gg
    Gg a year ago
    Коменты свежее чем хлеб
  3. Аскар
    Аскар 8 months ago
    Последний комментарий в 2016м году.... ну а я только дошел))) короче в этом уроке такая байда, если ввести правильно пароль, а логин не правильно все равно выдает сообщение что Логин или пароль не верен, тоже самое и с логин правильно а пароль нет и тоже самое при логин неправильно, пароль не правильно.... только если и логин и пароль правильно, то пишет вы авторизованы.... почему не выдает или Логин не верен или Пароль не верен???
  4. Lily
    Lily 7 months ago
    Autoblogging Pro has Arrived and now makes creating Blog Content for your site thedelphi.ru easier than ever and affordable.

    Autoblogging Pro combined with ChatGPI API can create a range of content based on your specifications and usig their WorPress plugin,
    automatically uploads the new article, complete with image, ready to edit an go live quicklly.

    Autoblogging Pro offers a variety of packages to suit your needs.

    LIFETIME FREE - FREE- 4 Articles per/month

    BASIC PLAN - $29 - 70 Articles per/month
    PRO PLAN - $49 -135 Articles per/month
    PRO PLUS PLAN - $89 -290 Articles per/month

    https://bit.ly/3s3ogYT

    Build Your Ad Revenues and SEO Market Share with Autoblooging Pro! Set Up is Fast an Easy with Great Technical Support!

    Try it FREE!
Отменить.