Мы сделали уже немало проектов, но пока не научились, как следует создавать форму. Разберем несколько полезных свойств формы, чтобы улучшить ее вид.
True, то есть кнопка есть, и False, то есть, ее нет.
BiSystemMenu определяет, будет ли у формы системное меню, которое показано в виде иконки слева на заголовке окна. Кроме того, будут ли там другие кнопки заголовка.BiMinimize определяет кнопку минимизации (сворачивания) окна. При этом False не убирает саму кнопку, а только делает ее неактивной.BiMaximize точно также определяет кнопку разворачивания окна.BiHelp – кнопка помощи в виде вопросительного знака. Не покажется у обычного вида формы, даже если поставить в True.BsSizeable – обычное окно. Установлено по умолчанию. Стандартное окно, которое может менять размеры.BsDialog – окно в форме диалога, имеет только кнопку "закрыть".BsNone – окно вообще без оборки и без заголовка окна.BsSingle – отличается от обычного окна тем, что у него нельзя изменить размеры.BsSizeToolWin – окно с тонкой оборкой. Особенно это заметно у заголовка окна.BsToolWindow – такое же, как предыдущее, но у этого окна нельзя менять размеры.Icon – иконка в заголовке окна. Если дважды щелкнуть по этому
свойству, выйдет окно загрузки другой иконки. По умолчанию установлена
стандартная иконка Delphi 7, но можно сделать и свою собственную. Чаще
всего используют коллекции иконок, скачанных из интернета. Но если Вы
чувствуете в себе талант художника, можете попробовать сделать иконку
для своего проекта самостоятельно. Для этого используйте встроенную
утилиту
Caption мы уже рассматривали, так что просто вспомним, что Name
главной формы желательно всегда указывать одинаково, например, fMain.
PoDefault – Windows сам будет решать, где расположить Ваше окно на экране, и какие у него будут размеры.PoDefaultPosOnly – Windows решает, где будет окно, а размеры его будут такими же, как Вы их установили.PoDefaultSizeOnly – позиция остается, как Вы указали, но Windows решает, какие у окна будут размеры.PoDesigned – это значение по умолчанию. И позиция, и размеры остаются такими, как Вы их создали.PoDesktopCenter – выбирайте этот вариант, если желаете, чтобы окно всегда выходило по центру рабочего стола.PoMainFormCenter – это значение используют для дочерних окон, о которых речь будет впереди. Если у дочернего окна выбран этот вариант, то оно всегда будет появляться по центру главной формы.PoOwnerFormCenter – это значение заставит дочернее окно появляться по центру того окна, из которого оно вызвано.PoScreenCenter – окно появляется по центру экрана. Почти то же самое, что и PoDesktopCenter.WsNormal – по умолчанию. Окно показывается в нормальном состоянии.WsMaximized – окно появляется в развернутом виде.WsMinimized – окно появляется в свернутом виде.Вот, собственно, и все основные свойства формы. Теперь попробуйте поэкспериментировать с этими свойствами, и посмотреть, как будет меняться внешний вид формы. Большинство из этих свойств общие для всех компонентов. Мы уже говорили, что свойства компонента (в данном случае, формы) можно рассматривать как переменные определенных типов. Значения в эти свойства чаще всего заносят в момент создания формы, с помощью Объектного инспектора. Однако многие свойства позволяют заносить в них новые значения программно, то есть, в момент работы готового приложения.
Здесь мы разберем только основные свойства кнопки, которые нам пригодятся для работы, и которых мы еще не знаем. Большинство свойств мы уже знаем. Свойство ModalResult мы будем разбирать позднее, когда будем работать с модальными окнами. Сейчас обращу Ваше внимание только на три свойства.
if. Однако
case Селектор of
значение 1 : begin
Инструкции 1
end;
значение 2 : begin
Инструкции 2
end;
значение n : begin
Инструкции n
end
else begin
Инструкции иначе
end;
Здесь "Селектор" – это переменная целого типа или символьного типа,
либо выражение, которое возвращает целое число или букву. Блок else не
является обязательным. В случае, если инструкция содержит только один
оператор, использовать begin .. end необязательно.
Пример применения
case i of
1 : ShowMessage('i = 1');
2 : ShowMessage('i = 2');
3 : ShowMessage('i = 3');
4 : ShowMessage('i = 4');
else ShowMessage ('i не равно 1, 2, 3 или 4');
end;
Теперь мы можем написать шуточную программу с формой и кнопкой, где
пользователь ни за что на свете не сможет нажать на кнопку мышью,
потому что кнопка будет убегать от указателя мыши. Эта простая
программа была описана в одном из номеров журнала "Хакер". Она как
нельзя лучше показывает, каким образом можно программным способом
менять свойства. Как кнопка будет убегать? С помощью программного
изменения свойств Left и Top! Однако, чтобы понять код программы от
начала до конца, познакомимся с новой функцией. Функция Random()
возвращает случайное число. Эту функцию еще называют генератором
случайных чисел. Синтаксис функции очень простой:
Random( Integer ) : Integer;
То есть, в качестве параметра мы должны передать целое число, и получить другое число в качестве результата. Например,
Random(5) будет возвращать в случайном порядке числа от 0 до 4
включительно. То есть, возвращаемое значение будет:
0 <= возвращаемое_значение < исходное_число.
Наша кнопка должна убегать от указателя мыши хаотично,
непредсказуемо, для этого и потребуется функция Random().
Создайте форму среднего размера и бросьте на нее только одну
кнопку. Для большего эффекта в свойстве Caption формы напишите:
"Выиграй приз!". А на кнопке напишите "Нажми меня".
Какой бы быстрой ни была реакция пользователя, она никак не сравниться со скоростью, с какой процессор обрабатывает инструкции. А процессор обрабатывает миллионы инструкций в секунду! Поэтому пользователь никогда не сможет нажать на кнопку мышью, но сможет это сделать с помощью клавиши <Enter> на клавиатуре. Учтем это. Создадим обработчик нажатия кнопки и там напишем только одну строку:
ShowMessage('Enter нажимать нечестно, пользуйся мышкой!');
Теперь осталось написать код убегания мыши. В инспекторе объектов
откройте вкладку Events (события). Нас интересует событие OnMouseMove,
которое происходит всякий раз, когда указатель мыши оказывается над
кнопкой. Щелкните дважды по событию, и в редакторе кода введите
следующее:
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
index : Integer;
begin
index := random(4); //присваиваем переменной случайное значение от 0 до 3
//в зависимости от значения переменной, выбираем действие
case index of
0: Button1.Left := Button1.Left + Button1.Width; //двигаем кнопку вправо, на значение ширины кнопки
1: Button1.Left := Button1.Left - Button1.Width; //кнопка влево, на значение ширины
2: Button1.Top := Button1.Top + Button1.Height; //кнопка вниз, на значение высоты
3: Button1.Top := Button1.Top - Button1.Height; //кнопка вверх, на значение высоты
end; //case
{Если кнопка вышла за пределы формы, вернем ее в положение 0}
if Button1.Left < 0 then Button1.Left := 0;
if Button1.Top < 0 then Button1.Top := 0;
if (Button1.Left + Button1.Width) > Form1.Width then
Button1.Left := Form1.Width - Button1.Width;
if (Button1.Top + Button1.Height) > Form1.Height then
Button1.Top := Form1.Height - Button1.Height;
end;
Разберем этот код. В самом начале в переменную index мы записываем
случайное число, от 0 до 3. Это нам нужно, чтобы знать, куда двигать
кнопку, ведь двигать ее можно влево, вправо, вверх или вниз. В
зависимости от того, какое значение мы получили, программа выберет
направление перемещения кнопки. Для этого используется конструкция case. Если в переменной у нас число 0, то кнопка будет двигаться
вправо. Как это происходит? Свойству Left (левая позиция) кнопки мы
присваиваем новое значение – левую позицию этой же кнопки, плюс ее
ширину. Другими словами, кнопка сдвинется вправо на расстояние, равное
ширине этой кнопки. Таким же образом мы сдвигаем кнопку влево, если
переменной index будет присвоено число 1. Только здесь мы не
прибавляем, а отнимаем ширину.
Почти таким же образом кнопка убегает вверх или вниз, но здесь мы
используем другие свойства – Top (расстояние от верхней границы окна
до кнопки) и Height (высота кнопки в пикселях). Соответственно, если
мы прибавляем высоту к верхней границе, кнопка убегает вниз, и
наоборот.
Когда заканчивается конструкция case, может оказаться, что кнопка
убежала за пределы формы. Поэтому далее идет проверка – если левая или
верхняя границы кнопки оказались меньше нуля, то возвращаем кнопку в
пределы формы, присвоив этой границе ноль.
Далее проверяем другую границу окна. Если левая позиция кнопки плюс ее ширина окажутся больше ширины окна, следовательно, кнопка вышла за пределы границы окна справа. Возвращаем ее в пределы окна, отняв от ширины окна ширину кнопки.
Точно также проверяем, не вышла ли кнопка за нижнюю границу окна.
Попробуйте самостоятельно добавить на форму еще одну кнопку, и запрограммировать ее поведение таким же образом.
Эта инструкция применяется в том случае, когда нужно выполнить несколько раз определенные действия. Причем заранее не известно, сколько раз этот цикл выполнять – это становится ясно только во время работы программы.
Синтаксис инструкции такой:
while условие do инструкция;
или расширенный вариант:
while условие do begin инструкция 1; инструкция 2; ... инструкция n; end;
Здесь условие – переменная или выражение логического типа. Сначала
вычисляется условие. Если условие ложно ( False ), то цикл не
выполняется и сразу заканчивает работу. Если же условие истинно
( True ), то цикл выполняет инструкции, затем вновь возвращается к
условию. Если условие опять возвращает True, цикл выполняется еще раз,
и так до тех пор, пока условие не вернет False. Будьте осторожны с
этим циклом! Не включайте туда условие, которое никогда не станет False. Компьютер в таком случае "зациклится", то есть зависнет. Обычно
для этого внутрь цикла помещают счетчик – переменную целого типа.
Только в отличие от цикла for, здесь переменная не увеличивает свое
значение автоматически, за этим должен следить сам программист. Пример
применения инструкции:
i := 1;
while i < 10 do begin
ShowMessage('Число равно ' + IntToStr(i));
i := i + 1;
end;
В этом простом примере мы целой переменной i присваиваем значение
1. Затем выполняем цикл while до тех пор, пока i не станет больше или
равно 10. Если бы мы внутри цикла не указали " i := i + 1; ", то этого
никогда бы не произошло, и мы зациклили бы программу! Попробуйте
выполнить этот пример в новом проекте, привязав код к обработке
нажатия кнопки. В дальнейшей практике Вам не раз придется использовать
этот цикл с куда более полезными примерами.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.