
Министерство образования и науки республики казахстан Учреждение образования «Центральноазиатский технико-экономический колледж»
ОТЧЁТ
по учебной практике № 4
по дисциплине «Основы объектно-ориентированного программирования
на языке Delphi»
Выполнил студент:
Омаров Жасулан
группа: П2А
Проверил преподаватель:
Бесбаева М.Н
Защищен с оценкой
Дата защиты . .
Алматы 2014 г
Содержание
Стр.
|
ВВЕДЕНИЕ |
|
1 |
ОБЩАЯ ЧАСТЬ |
|
2 |
СПЕЦИАЛЬНАЯ ЧАСТЬ |
|
2.1 |
Постановка задачи № 1 |
|
2.1.1 |
Листинг программы |
|
2.1.2 |
Контрольный пример |
|
2.2 |
Постановка задачи № 2 |
|
2.2.1 |
Листинг программы |
|
2.2.2 |
Контрольный пример |
|
2.3 |
Постановка задачи № 3 |
|
2.3.1 2.3.2 2.4 2.4.1 2.4.2 2.5 2.5.1 2.5.2 |
Листинг программы Контрольный пример Постановка задачи № 4 Контрольный пример Листинг программы Постановка задачи № 5 Листинг программы Контрольный пример |
|
2.6 |
Постановка задачи № 6 |
|
2.6.1 |
Листинг программы |
|
2.6.2 |
Контрольный пример |
|
2.7 |
Постановка задачи № 7 |
|
2.7.1 |
Листинг программы |
|
2.7.2 2.8 2.8.1 2.9 2.9.1
|
Контрольный пример Постановка задачи № 8 Контрольный пример Постановка задачи №9 Контрольный пример |
|
Стр.
ВВЕДЕНИЕ
Delphi (Де́лфи, произносится /ˈdɛlˌfi:/) — императивный, структурированный, объектно-ориентированный язык программирования, диалект Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документахBorland стала использовать название Delphi для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi (производный от Object Pascal) начал жить своей самостоятельной жизнью и претерпевал различные изменения, связанные с современными тенденциями (например, с развитием платформы .NET) развития языков программирования: появились class helpers, перегрузки операторов и другое. Изначально среда разработки Delphi была предназначена исключительно для разработки приложений Windows, затем был реализован вариант для платформ Linux (какKylix), однако после выпуска в 2002 году Kylix 3 его разработка была прекращена, и вскоре было объявлено о поддержке Microsoft .NET, которая, в свою очередь, была прекращена с выходом Delphi 2007.На сегодняшний день, наряду с поддержкой разработки 32 и 64-разрядных программ для Windows, реализована возможность создавать приложения для Apple Mac OS X (начиная с Embarcadero Delphi XE2), iOS (включая симулятор, начиная с XE4 посредством собственного компилятора), а также, в Delphi XE5, для Google Android (непосредственно исполняемые на ARM-процессоре).Независимая, сторонняя реализация среды разработки проектом Lazarus (Free Pascal, компиляция в режиме совместимости с Delphi) позволяет использовать его для создания приложений на Delphi для таких платформ, как Linux, Mac OS X и Windows CE.
При создании языка (и здесь качественное отличие от языка C) не ставилась задача обеспечить максимальную производительность исполняемого кода или лаконичность исходного кода для экономии оперативной памяти. Изначально, язык ставил во главу угла стройность и высокую читаемость, поскольку был предназначен для обучения дисциплине программирования. Эта изначальная стройность, в дальнейшем, как по мере роста аппаратных мощностей, так и в результате появления новых парадигм, упростила расширение языка новыми конструкциями.
Так,
сложность объектного C++, по сравнению
с C, выросла весьма существенно и
затруднила его изучение в качестве
первого языка программирования, чего
нельзя сказать об Object Pascal относительно
Pascal.
Ниже перечислены некоторые отличия синтаксических конструкций Delphi от семейства C-подобных языков (C/C++/Java/C#):
В Delphi формальное начало любой программы четко отличается от других участков кода и расположено в определенном, единственном в рамках проекта, исходном файле с расширением dpr (тогда как другие файлы исходных текстов программы имеют расширение pas)
program Project32;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Компонент Delphi Memo это простой текстовый редактор. Delphi Memo позволяет вводить многострочный текст с клавиатуры, загружать его из файла, редактировать и сохранять в файл текстового формата. При изучении работы с Delphi Edit советую посетить страничку работа со строками Delphi, так как там описываются функции Delphi для работы с данными, представленными в текстовой форме, с которыми и оперирует компонент Memo. Простота текстового редактора компонента Delphi Memo заключается в том, что текстовый редакторDelphi Memo не обладает возможностями форматирования содержещегося в нём текста. Это означает, что все атрибуты выбранного шрифта будут относиться ко всему тексту. Текст в компоненте Delphi Memo размещается построчно. Поэтому имеется доступ к каждой строке текста отдельно. Строки в редакторе Delphi Memo являются объектами Lines[i] типа String, где i - номер строки, отсчитываемый от нуля. Объект Lines[i] доступен и для чтения, и для записи. Соответственно, текст в компоненте Memo можно редактировать не только с клавиатуры, но и программно: var S: String; begin Memo1.Lines[3]:='Четвёртая строка по счёту'; S:=Memo1.Lines[3]; end;
Компонент Delphi
Edit представляет
собой однострочное текстовое поле,
служащее для
ввода
данных пользователем. Основным свойством
компонента Delphi
Edit,
передающим введённую информацию,
является свойство Edit1.Text типа String.
При изучении работы с Delphi Edit советую
посетить страничкуработа
со строками Delphi,
так как там описываются функции Delphi для
работы с данными, представленными в
текстовой форме. Например,чаще всего,
судя по поисковым запросам, посетители
хотят знать, как работать с числами,
введёнными в компонент Edit:
с
целыми X:=StrToInt(Edit1.Text);
с
дробными X:=StrToFloat(Edit1.Text);
Можно вводить информацию с клавиатуры, присваивать в программе и считывать в переменную типа String: var S: String; begin Edit1.Text:='Присваиваем текст'; S:=Edit1.Text; end; Также при конструировании элементов Формы текст, вводимый в Инспектор объектов, сразу же появляется в компоненте Delphi Edit. |
В отличие от компонента Delphi Label, который автоматически подстраивает свою длину под размер текста в свойстве Caption, вводимый в компонент Delphi Edit текст никак не влияет на длину (свойствоWidth) этого компонента. Не помещающаяся в установленную длину часть текста сдвигается вправо или влево за границы компонента:
begin Edit1.Text:='Текст, не помещающийся в установленные границы'; end; И хотя весь текст остаётся доступен для просмотра и редактирования путём перемещения курсора в ту или иную сторону, программист должен предусмотреть достаточную длину компонента Delphi Edit заранее, на этапе конструирования. |
|
|
Это не касается размера компонента по вертикали. Если изменить размер шрифта (свойство Font), то высота компонента Delphi Edit подстроится под высоту выбранного размера шрифта. Впрочем, это будет так, если не менять свойство AutoSize, имеющего тип Boolean. По умолчанию оно равно True. Если же установить его в False, то придётся подстраивать и высоту компонента Edit вручную. Теперь рассмотрим события компонента Delphi Edit. В момент изменения свойства Text происходит событие OnChange. Причём не имеет значения, каким способом было произведено это изменение, вручную с клавиатуры или присвоением в программе. Новое значение Edit1.Text можно сразу присвоить переменной и использовать. Нужно только учитывать такой нюанс. По событию OnChange нельзя менять значение самого свойства Text этого компонента. Это естественно, ведь при этом изменении опять произойдёт событие OnChange, которое вызовет следующее, и так далее. То есть, программа зациклится и зависнет. А если без этого не обойтись, в обработчике события OnChange необходимо предусмотреть условие, при выполнении которого изменения свойства Text уже не будет. Далее, рассмотрим события, происходящие при вводе с клавиатуры. При нажатии кнопки последовательно происходят события:
OnKeyDown
OnKeyPress
OnChange
OnKeyUp
События OnKeyDown и OnKeyPress происходят практически перед нажатием, когда клавиша ещё находится в верхнем положении. Этим можно воспользоваться, чтобы переопределить символ, который появится в строке компонента. Вот как выглядят заголовки обработчиков этих событий: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Специально подчёркнуто отличие: в обработчике KeyDown переменная Key имеет тип Word, то есть это число, а в обработчике KeyPress эта переменная имеет тип Char, то есть это символ. Отсюда следует, что обработчик KeyPress обрабатывает нажатия только клавиш клавиатуры с символами букв и цифр, а обработчик KeyDown также и остальных клавиш. То есть, зная коды клавиш клавиатуры, можно в обработчике KeyDown присвоить переменной Key код нужной клавиши, а в обработчике KeyPress присвоить нужный символ, и это будет имитация нажатия соответствующей клавиши клавиатуры. Возникает вопрос, как же узнать код клавиши клавиатуры, если под рукой нет справочника. Это очень просто. Нужно в обработчике события OnKeyDown значение переменной Key вывести на Форму, например, в заголовок: procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Caption:=IntToStr(Key); end; Ну вот, и не нужно в справочники лезть, чтобы узнать код клавиши клавиатуры! Например, код клавишиEnter равен 13, а код клавиши Esc равен 27. В обработчике KeyPress можно написать процедуру ввода пароля. Обычно при вводе пароля вместо нажатого символа выводится символ ' * '. Для достижения такого эффекта сначала переменную Keyсохраняем в глобальной переменной Pass, а затем переопределяем её, заменяя на звёздочку. Для наглядности пароль, равный слову "пароль" :), я выведу в заголовок Формы:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin Pass:=Pass+Key; Key:='*'; Caption:=Pass; end; |
|
|
Возникает вопрос, а как вообще запретить ввод символа с клавиатуры? Для того, чтобы никакой символ не появился в поле ввода компонента Delphi Edit (да и любого компонента ввода данных), нужно в процедуре-обработчике KeyPress переопределить его символ на код символа "отсутствие символа"! Код "отсутствие символа" равен #0. Таким образом можно разрешить ввод только определённых символов. Например, напишем программу для ввода только цифр. Для этого создадим множество разрешённых для ввода символов. В программе будем проверять, входит ли вводимый символ в множество разрешённых, и если нет - запрещаем его появление: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); const Digit: Set of Char=['0' .. '9']; begin if not (Key in Digit) then Key:=#0; end; А вот здесь текст модуля, который для компонента Delphi edit обеспечивает все операции по вводу и удалению только чисел, в том числе дробных. В нём используется всего две процедуры. Одна обеспечивает ввод только допустимых символов, а вторая корректирует получившееся число, приводя его к привычному нам, общеупотребительному виду. Что касается обработчика KeyUp, то его использование аналогично использованию обработчикаKeyDown, только принимая во внимание, что событие OnKeyUp происходит в момент отпускания клавиши. Напоследок о возможности программного управления курсором и выделения текста в компоненте Delphi Edit. Для реализации этих задач служат свойства
SelStart
SelLength
SelText
Все эти свойства доступны и для чтения, и для записи. - Свойство SelStart (типа Integer) определяет порядковый номер символа, перед которым находится курсор. Отсчёт идёт от нуля; - Свойство SelLength (типа Integer) задаёт количество выделенных символов. Причём оно может быть и отрицательным. Тогда выделение идёт в обратную сторону, справа налево; - Свойство SelText (типа String) содержит выделенный текст. Чтобы выделенный текст был заметен, необходимо, чтобы компонент Edit обладал фокусом ввода. Для перемещения фокуса ввода к нужному компоненту служит свойство SetFocus. То есть, чтобы было видно выделение второго символа, нужно написать: begin Edit1.SetFocus; Edit1.SelStart:=1; Edit1.SelLength:=1; end; Если пропустить первый оператор, то свойство SelText всё равно будет содержать в себе второй символ, но на экране заметно этого не будет, если, конечно, фокус ввода не был перемещён туда ранее.
Delphi компонент Label предназначен для отображения статического текста, то есть надписей и меток на Форме, которые не меняются в течение всего времени работы программы. Конечно, текст надписи, отображаемый компонентом Label можно изменить, но не непосредственно, а только программно. Хотя считается, что компонент Delphi Label предназначен для отображения именно однострочного текста, это не совсем верно. Свойство WordWrap компонента Label позволяет выводить текст в несколько строк.
Устанавливаем свойство WordWrap в True и смотрим на результат. Как видим, в этом случае происходит автоматический переход на новую строку слова, не помещающегося на текущую строку. Очевидно, если растянуть компонент Label на всю Форму, он способен отобразить достаточно большой текст. Так как свойствоCaption компонента Label имеет тип String, то размер текста может достигать 2 Гбайт! |
|
|
Свойство Font компонента Label предоставляет возможности по изменению шрифта выводимого текста. При переходе на строку Font в Инспекторе объектов появляется кнопочка, предоставляющая доступ к диалоговому окну выбора шрифта, такому же, с каким мы встречаемся работая, например, в Worde. Плюсик слева на строке Font раскрывает атрибуты шрифта для установки прямо в Инспекторе объектов:
В комментариях возник вопрос, как отобразить с помощью метки только текст. Дело в том, что метка - это и текст, и проямоугольник фона. Так вот, как сделать так, чтобы был виден только текст, а фон не был заметен? Если фон метки совпадает по цвету с компонентом, на который она установлена, то фон метки незаметен. А если нужно разместить метку на цветной картинке (компонент Image)? Как раз для этого существует свойство Transparent. Установленное в True, оно делает фон метки прозрачным, и на рисунке будет виден только текст.
\bitbtn
Компонент Delphi BitBtn это пиктографическая кнопка, представляющая собой один из вариантов стандартной кнопки Button. В отличие от последней кнопка Delphi BitBtn умеет отображать на своей поверхности не только надпись, но и изображение, которое задаётся свойством Glyph. В состав Delphi входит большое количество готовых изображений, которые можно размещать на кнопках Delphi BitBtn. В стандартном случае они располагаются по адресу C:\Program Files\Common Files\Borland Shared\Images\Buttons. Свойство Kind компонента Delphi BitBtn определяет один из стандартных вариантов кнопки BitBtn:
Нажатие на любую из них (кроме кнопок со свойством BitBtn.Kind, равным bkCustom или bkHelp) приводит к закрытию модального окна, в котором она установлена, а результат, возвращаемый в программу равен mrName (Name - Yes, Abort, Cancel и т.д. - название кнопки). Отличие есть у кнопки Close, её нажатие (после закрытия модального окна) приводит к возвращению не mrClose а mrCancel, а для главное окно программы просто закрывается, поэтому работа программы сразу завершается. В случае если пиктограмма Glyph у кнопки Delphi BitBtn была изменена, система Delphi автоматически изменит и её значение BitBtn.Kind, которое станет равным bkCustom Специфические свойства компонента - пиктографической кнопки Delphi BitBtn перечислены в таблице:
Glyph: TBitmap |
Определяет рисунок, который может содержать от одного до четырёх изображений, связанных с состояниями, которые может принимать кнопка. |
Kind |
Определяет одну из разновидностей кнопки BitBtn (см. рисунок вверху). |
Layout |
Определяет к какому краю кнопки будет прижиматься пиктограмма:
|
Margin |
Определяет расстояние в пикселах, на котором будет располагаться пиктограмма от края кнопки. |
NumGlyph |
Определяет сколько растровых изображений размещается в файле, содержащем пиктограмму (*см. ниже). |
Spacing |
Определяет расстояние в пикселах от рисунка до текста на кнопке. |
Style |
Определяет как выглядит кнопка в зависимости от стиля предпочтительной операционной системы. Значение bsNew соответствует современным вариантам Windows. Стиль bsAutoDetect приводит оформление кнопки к стилю операционной системы, управляющей работой программы в настоящий момент. |
Рисунок с изображениями для кнопки может состоять из нескольких (до 4-х) частей. Стандартная пиктограмма имеет размер 16х16 пикселов. Соответственно, если рисунок состоит из 2-х частей (для активного или неактивного состояния кнопки - именно такие изображения содержатся в стандартной поставке Delphi), то рисунок будет иметь размер 32х16. Количество пиктограмм задаётся свойством Glyph. Однако, если изображение состоит из нескольких квадратных пиктограмм одного размера, система Delphi сама распознает их количество. Если в растре задана только одна пиктограмма, то Delphi сама может менять её изображение: в состоянии "нажата" изображение на кнопке смещается на 1 пиксель вниз-вправо, а в состоянии "недоступная" (Enabled=False) все цвета, кроме чёрного, меняются на светло-серый, а чёрный - на белый, что создаёт эффект вдавленности.
Компонент Delphi Button это простая командная кнопка. Командная кнопка Delphi Button используется для реализации в программе команд с помощью обработчика события OnClick этого компонента. Один и тот же обработчик может обрабатывать события нескольких компонентов TButton (да и не только TButton, но и даже компонентов других типов). Для определения того, событие какого именно компонента нужно обрабатывать, используется встроенная переменная Sender типа TObject, обозначающая объект, вызвавший данное событие. Для иллюстрации этой возможности рассмотрим простую процедуру, определяющую нажатую кнопку. Создадим обработчик кнопки Button1, а для Button2 и Button3 в Инспекторе Объектов на вкладке Events выберем событие OnClick, и из выпадающего списка выберем появившийся там обработчик Button1Click. Теперь он обрабатывает нажатие всех трёх кнопок.
|
|
procedure TForm1.Button1Click(Sender: TObject); begin Form1.Caption:=(Sender as TButton).Caption; end; |
Конструкция Sender as TButton позволяет работать со свойствами объекта Sender как со свойствами кнопки. Непосредственно же различить кнопку как объект можно обычным оператором сравнения: if (Sender = Button1) then Form1.Caption:=Button1.Caption; Иногда события инициированы даже компонентами разных типов. В таком случае, проверить компонент какого типа вызвал событие, можно таким образом: if (Sender is TButton) then Form1.Caption:='Кнопка';
Компонент Delphi MainMenu предназначен для добавления к программе главного меню, элемента, без которого не обходится ни одно из приложений для Windows. Чтобы добавить к программе Delphi главное меню, нужно расместить на Форме в произвольном месте компонент MainMenu. Компонент MainMemuневизуальный, то есть, хотя и отображается на прототипе Формы как небольшой квадрат, в работающей программе не будет виден. Опции главного меню создаются с помощью специального редактора. Редактор меню вызывается с помощью двойного щелчка по компоненту MainMenu. Первоначально меню пустое, но имеет один выделенный элемент:
Для создания первой опции (как правило, опция главного меню программы File) нужно перейти в Инспектор объектов и свойству Caption присвоить нужное название. В Windows опции меню, как правило, имеют возможность выбора при помощи сочетания клавиш ALT+<Key>, где Key - первая буква в названии данной опции должна иметь подчеркивание. Для создания такого подчеркивания перед этой буквой ставится символ &. После нажатия Enter созданный пункт меню появляется на Форме:
Обратите внимание на то, что автоматически Delphi создаёт следующий пустой пункт меню верхнего уровня. А щёлкнув в редакторе меню по синему прямоугольничку File, мы сразу получим пустой пункт меню второго уровня. Они не выделены, и отображаются белыми прямоугольниками. Щелкнув по одному из них, мы получим возможность редактировать его совершенно аналогично. Пока их свойства не заданы, в работающей программе на Форме они не появятся, и удалять в редакторе их не нужно. Далее, в редакторе меню щёлкнув по пункту меню правой клавишей мыши, мы получим контекстное меню, в котором есть пункты Insert (вставить) и Delete (удалить). Пункт Insert добавляет новый пункт меню над выделенным, а Delete - удаляет выбранный пункт. То, что мы пользуемся Инспектором объектов, говорит о том, что опция меню для Delphi - это объект, со своими свойствами и методами. И без их настройки будет пассивной структурой надписей. Для того чтобы меню выполняло свои функции, как минимум нужно описать обработчик события OnClick каждого пункта меню. Делается это совершенно стандартным способом. Опишем пункт меню, который будет закрывать программу. Выделим нижний элемент меню, в Инспекторе объектов изменим свойство Caption на Exit (ну или по-русски тоже можно - Выход). Затем перейдём на вкладку Инспектора объектов Events и щелкнем дважды мышкой по обработчику OnClick. В созданной процедуре напишем просто - Close; Всё, скомпилируем программу (нажмите F9). В работающей программе наше меню функционирует - при нажатии мышкой Exit программа закрывается. И при нажатии на клавиатуре ALT появляется подчеркивание первой буквы пунктов меню верхнего уровня - File, и далее можно выбрать нужный пункт, работая кнопками управления курсором. Во всплывающем меню выделенного элемента есть также пункт Create SubMenu, нажав на который мы создадим подменю выбранного элемента, а к его названию прибавится изображение треугольника - стрелки, указывающей на его наличие. Работа с подменю осуществляется также совершенно аналогично. Кстати, описывать обработчик OnClick пунктов меню верхнего уровня не обязятельно, раскрывание меню при щелчку мышкой происходит автоматически. Но в случае необходимости произвести какие-либо действия при раскрытии меню этот обработчик позволит это сделать. Наш компонент MainMenu обладает также возможностью сопровождать названия опций меню пиктограммами. Для этого нужно из редактора меню перейти к самому компоненту, и в Инспекторе объектов его свойству Image присвоить значение одного из компонентов ImageList, который необходимо предварительно поместить на Форму, и наполнить нужными пиктограммами (компонент ImageList описывается на странице Win32). Далее, выбрав нужный пункт меню в редакторе меню, его свойству ImageIndex нужно присвоить номер пиктограммы, который она имеет в компоненте ImageList. Для удобства выбора свойство ImageIndex имеет раскрывающийся список, содержащий пиктограммы, находящиеся в компоненте ImageList. Значение -1 означает отсутствие пиктограммы. Есть более простой альтернативный способ задать пиктограмму для пункта меню - через свойство BitMap этого пункта. Щёлкните по кнопочке, появляющейся при переходе в эту строку Инспектора объектов. Появится окно выбора файла, где можно выбрать и загрузить нужную пиктограмму. Стандартный набор пиктограмм поставляется в дистрибутиве Delphi и находится в папке Buttons по адресу C:\Program Files\Common Files\Borland Shared\Images. Правда, пиктограммы представлены в сдвоенном формате - для активного и неактивного состояния кнопки или пункта меню. Удобство применения компонента ImageList состоит в том, что он умеет разделять стандартные пиктограммы на две. Ненужную затем можно удалить, а оставшуюся сохранить для использования в других программах. Обычно это цветная пиктограмма для активного состояния, так как неактивная кнопка или меню умеют отображать свои пиктограммы в оттенках серого.
Компонент Delphi Timer очень простой компонент, который не виден на экране, но, тем не менее, Timer Delphi выполняет очень важные функции в программе. Delphi Timer позволяет вводить необходимые задержки между выполнением тех или иных действий. Компонент Timer имеет всего четыре свойства и одно событие, и работать с компонентом Delphi Timer очень просто.
|
|
|
|
СВОЙСТВО |
НАЗНАЧЕНИЕ |
||
Enabled |
"Включение-выключение" таймера |
||
Interval |
Интервал срабатывания (в миллисекундах) |
||
Name |
Имя компонента в программе |
||
Tag |
Произвольный числовой параметр |
Помещаем компонент Delphi Timer на Форму. Задаём в свойстве Interval нужный интервал времени (измеряется в миллисекундах). Переходим на вкладку Events и видим единственное событие, поддерживаемое компонентом Delphi Timer: OnTimer. Выполнив по нему двойной щелчёк, или также двойной щелчёк по самому компоненту, мы попадём в сформированный средой Delphi обработчик события, где и введём код, предусматривающий выполнение тех или иных действий. Так как по умолчанию сойство Enabled установлено в True, то в программе через установленный в свойстве Interval промежуток времени таймер сработает, то есть выдаст событие OnTimer. Будут выполнены необходимые действия. Иногда же запланированные действия должны произойти не автоматически при старте программы, а при выполнении каких-либо других действий. В этом случае необходимо свойство Enabled в Инспекторе Объектов установить в False. Затем в необходимый момент нужно выполнить команду: Timer1.Enabled:=True; Учтите, что пока Timer1.Enabled равно True, компонент продолжит генерировать событие OnTimer по истечении каждого промежутка времени, равного значению свойcтва Interval. Поэтому, если нужно только единичное срабатывание, то таймер нужно остановить, причём сразу же: procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled:=False; { Необходимые действия } end; Если же запрограммировать "выключение" таймера после выполнения предусмотренных в программе действий, то при достаточно малом по сравнению с продолжительностью необходимых действий значении свойства Interval таймер вновь сработает, и это может помешать ходу программы. Компонент Delphi Timer не является очень точным и не подходит для измерения малых промежутков времени. Его точность порядка 50 миллисекунд. В качестве примера приведу простую программу, отображающую текущее время. На форме будут только компонент Label и собственно наш компонент Delphi Timer. Свойство Timer можно оставить равным 1000, но раньше на более медленных компьютерах приходилось отображать время несколько раз в секунду, так как из-за влияния других выполняемых компьютером процессов выводимые раз в секунду показания "плавали", что было хорошо заметно на глаз. Размер шрифта возьмём побольше - 50, и подберём более гладкий, я взял Bell MT. Растянем на всю Форму: Align=alClient. Ну и, собственно, сам код: procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption:=TimeToStr(Now); end; Вот и всё! Delphi Now - это системная функция, возвращающая текущую дату-время в соответствующем формате TDateTime. Если преобразовывать её в строку функцией TimeToStr, то она вернёт текущее время, если DateToStr, то текущую дату. Если мы хотим отображать в нашей программе и дату тоже, достаточно поставить ещё один компонент Label, и функцией DateToStr передавать в него дату.
Компонент Delphi ScrollBar — элемент управления в виде ползунка представляет собой горизонтальную или вертикальную полосу прокрутки (рис 1).
рис 1
С помощью ползунка ScrollBar мы можем выбрать целое число, не выходящее за пределы диапазона чисел от Min до Max в свойстве компонента. Изменять положение ScrollBar можно мышью, клавишами вверх, вниз, влево и вправо, или Page Up и Page Down. При перемещении ползунка изменяется свойство position, которое при необходимости можно можно задать программно, но только если позиция не будет выходить за пределы диапазона.
Свойства ScrollBar
Position |
значение которое может изменяться в пределах значений, задаваемые свойствами Min и Мах. |
max |
максимальное значение для полосы прокрутки |
min |
минимальное значение для полосы прокрутки |
Kind |
устанавливает ориентацию ползунка: trHorizontal — горизонтальное расположение, trVertical — вертикальное |
PageSize |
определяют, размер ползунка |
SmallChange |
определяют сдвиг при клике на кнопки в конце и начале полосы прокрутки или нажатием клавиши со стрелкой |
LargeChange |
определяет сдвиг при перемещении кликом рядом с бегунком или при нажатии клавиш PageUp или PageDown |
Name |
имя компонента |
Для примера использования ScrollBar можно взять функцию RGB для этого нам понадобится на форме 3 ScrollBar каждый из которых будет отвечать за определенный цвет из RGB т.е красный, зеленый и голубой в свойстве min в каждом ползунке ставим 0, а в свойстве max 255. Затем находим событием OnChange и двойным щелчком по пустому полю открываем редактор кода куда вставляем
Form1.color:=RGB(ScrollBar1.Position,ScrollBar2.Position,ScrollBar3.Position); |
Аналогично вставляем данный код для двух других компонентов ScrollBar. Теперь при перемещении ползунков мы меняем цвет формы.
Компонент delphi MediaPlayer обеспечивает воспроизведение звуковых файлов различных форматов (WAV, MID, MP3), компакт дисков, сопровождаемой звуком анимации и видео роликов (AVI). Внешне компонент MediaPlayer представляет собой группу кнопок подобных тем, которые можно видеть на аудио или видеоплеере. Название этих кнопок пояснено ниже в таблице.
|
Воспроизведение(btPlay) |
Воспроизведение звука или видео |
|
Пауза(btPause) |
Приостановка воспроизведения |
|
Стоп(btStop) |
Остановка воспроизведения |
|
Следующий(btNext) |
Переход к следующему кадру |
|
Предыдущий(btPrev) |
Переход к предыдущему кадру |
|
Шаг(btStep) |
Переход к следующему фрагменту, например к следующему треку на CD |
|
Назад(btBack) |
Переход к предыдущему фрагменту, например к предыдущему треку на CD |
|
Запись(btRecord) |
Активирует процесс записи |
|
Открыть(btEject) |
Открывает CD-дисковод компьютера |
В следующей таблице представлены свойства MediaPlayer
Name |
Имя компонента |
DeviceType |
Тип устройства. Определяет конкретное устройство, которое представляет собой компонент MediaPlayer. Тип устройства задается именованной константой:dtAutoSelect – тип определяется автоматически, по расширению файлов; dtVaweAudio – проигрыватель звука; dtCDAudio – CD-проигрыватель; dtAVIVideo – видеопроигрыватель. |
FileName |
Имя файла |
AutoOpen |
Признак автоматической загрузки сразу после запуска нашей программы, файла видео ролика или звукового фрагмента |
Display |
Определяет компонент, который используется в качестве экрана для открытия видеоролика (обычно используется компонент Panel) |
VisibleButtons |
Составное свойство. Определяет видимость кнопок компонента |
Помимо свойств, которые доступы в процессе разработки, компонент MediaPlayer представляет свойства, которые доступны во время работы программы позволяющие получить информацию о состоянии MediaPlayer, воспроизводимом файле или треке CD. Обратите внимание, что значения свойств, которые содержат информацию о длительности, могут быть представлены в разных форматах. Наиболее универсальный формат является формат tfMilliseconds, в котором длительность выражена в миллисекундах. Но некоторые устройства поддерживают несколько форматов. Напремер, если MediaPlayer используется для воспроизведения CD, то информация об воспроизводимом треке может быть представлена в формате tfTMSF (Track-трек, Minute-минуты, Second-секунды, Frame-кадр).
Для преобразования миллисекунд в секунды и минуты надо воспользоваться известнымы соотношениями. Если значение свойства представлено в формате tfTMSF, то для преобразования можно использовать функции MCI_TMSF_TRACK, MCI_TMSF_SECOND и MCI_TMSF_MINUTE.
В таблице рассмотрим свойства доступные во время работы программы
Length |
Длина открытого файла |
Tracks |
Количество треков на устройстве |
TrackLength |
Длина треков |
Position |
Позиция (время воспроизведения) |
TimeFormat |
Формат представления значений свойств Length, TrackLength и Position. Наиболее универсальным является формат tfMilliseconds |
Mode |
Состояние устройства воспроизведения. mpPlaying — состояние воспроизведения; mpStopped – процесс остановлен; mpPaused — приостановлен; mpNotReady — не готово к работе; mpOpen – в устройстве (CD-деске) отсутствует носитель. |
Display |
Экран, на котором отображается клип. Если значение не задано, то клип отображается в отдельном окне (создаваемом во время работы программы) |
DisplayRect |
Размер и положение области отображения клипа на поверхности экрана |