Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

CompPract_M3_Delphi

.pdf
Скачиваний:
6
Добавлен:
14.02.2016
Размер:
437.15 Кб
Скачать

Комп’ютерна практика

Спеціальність: Математика і інформатика (ІІІ курс)

Завдання

1.Робота із різновидами компонента “Календар”.

Вивести календар для заданого місяця і року (компоненти ListBox), в календарі вибрати день місяця, вивести повідомлення про те, яка сьогодні дата і скільки днів пройшло від заданої дати до сьогоднішнього дня.

1.1.Вивести календар за допомогою компонента Calendar (сторінка Samples палітри компонент);

1.2.Вивести календар за допомогою компонента MonthCalendar (сторінка Win32 палітри компонент);

1.3.Вивести календар за допомогою компонента DateTimePicker (сторінка Win32 палітри компонент).

2.Відтворення мультимедійних даних за допомогою:

2.1.компонента Animate (сторінка Win32 палітри компонент);

2.2.компонента MediaPlayer (сторінка System палітри компонент);

3.Робота з файловою системою.

3.1.Аналіз файлової системи за допомогою компонент DriveComboBox1, DirectoryListBox1, FileListBox1, FilterComboBox1 (сторінка Win 3.1) та DirectoryOutline1 (сторінка Samples)

3.2.Аналіз ієрархії об’єктів Windows допомогою компонент ShellComboBox1, ShellTreeView1,

ShellListView1 (сторінка Samples)

3.3.Виведення вмісту каталогу за допомогою компонента ListView (сторінка Win32)

3.4.Використанням компонента HotKey для формування гарячих клавіш.

3.5.Розробити програмний проект “My File Manager” (файловий менеджер)

4.Створення власного Web-браузера (подібного до Internet Explorer).

5.Створення найпростішого Web-сервера засобами Delphi.

Вказівкидовиконаннязавдання1

1.1. Розташуйте на формі 2 компоненти ListBox і за допомогою події OnCreate для форми заповніть їх списком назв місяців року та списком років 1980..2010.

procedure TForm1.FormCreate(Sender: TObject);

const mon: array[1..12] of string=('січень','лютий','березень',

var I: byte; begin

'квітень','травень','червень', 'липень','серпень','вересень', 'жовтень','листопад','грудень');

for I := 1 to 12 do

ListBox1.Items.Add(mon[I]); for I := 0 to 30 do

ListBox2.Items.Add(IntToStr(1980 + I));

end;

Властивість Items містить список стрічок списку вибору ListBox. Метод Add дозволяє добавити нову стрічку до списку.

Розташуйте на формі компонент Calendar (сторінка Samples палітри компонент), за допомогою властивості Calendar1.StartofWeek зафіксуйте номер дня, з якого розпочинається тиждень (0 – неділя, 1

– понеділок і т.д.). Для ListBox1 та ListBox2 запрограмуйте подію OnClick таким чином, щоб при виборі із списку ListBox1 назви місяця номер місяця передавався у властивість Calendar1.Month, а вибраний рік із списку ListBox2 передавався у Calendar1.Year. Після цього компонент Calendar1 буде

відображати календар на заданий місяць і рік.

procedure TForm1.ListBox1Click(Sender: TObject); begin

Calendar1.Month := ListBox1.ItemIndex + 1; end;

procedure TForm1.ListBox2Click(Sender: TObject); begin

Calendar1.Year := StrToInt(ListBox2.Items[ListBox2.ItemIndex]); end;

Копоненти Label розташуйте на формі таким чином, щоб під час виконання проекту вікно форми мало вигляд такий :

Подію OnChange для компонента Calendar1 запрограмуйте таким чином:

procedure TForm1.Calendar1Change(Sender: TObject); begin

Label9.Caption := DateToStr(Date);

Label4.Caption := DateToStr(Calendar1.CalendarDate);

Label6.Caption := IntToStr(Trunc(Date) - Trunc(Calendar1.CalendarDate));

Label7.Visible := True; end;

Функція Date повертає поточну дату типу TDateTime, а властивість Calendar1.CalendarDate містить зафіксовану в компоненті-календарі Calendar1 дату (те ж як значення типу TDateTime). Функція Trunc використовується тому, що значення типу TdateTime зберігаються у вигляді дійсного числа, у цілій частині якого записується дата, а у дробовій — час.

У полі Label7 з’являється текст “дні(в)” (компонент робиться видимим) лише після того, як буде відображена кількість днів, яка минула від заданої дати до поточної.

1.2. У новому проекті створіть аналогічну форму, використавши компонент MonthCalendar (сторінка Win32 палітри компонент). Цей компонент містить свій власний список вибору місяця та року для календаря, тому списки вибору ListBox1 та ListBox2 тут не потрібні.

Вибрана в календарі дата зберігається як значення властивості MonthCalendar1.Date. Властивість MonthCalendar1.ShowToday має значення True, якщо поточна дата додатково відображається у нижній частині календаря. Властивість MonthCalendar1.ShowTodayCircle має значення True, якщо поточна дата виділяється червоним кружечком.

1.3. Створіть аналогічний проект, використавши компонент DateTimePicker (сторінка Win32 палітри компонент). Цей компонент містить поле для введення дати або часу залежно від значення властивості DateTimePicker1.Kind (якщо значення властивості дорівнює dtkDate, то вводиться дата, а якщо — dtkTime, то — час). Режим роботи компонента залежить від властивості DateTimePicker1.DateMode. Якщо ця властивість має значення dmComboBox, то під час введення дати можна мишею виділяти елементи дати (число, місяць, рік), а курсорними клавішами на клавіатурі збільшувати чи зменшувати їх значення, після натискування мишею на кнопку із стрілкою донизу на компоненті (розкриття списку) відкриється календар у вигляді MonthCalendar. Якщо властивість DateTimePicker1.DateMode має значення dmUpDown, то кожний елемент дати можна збільшувати або зменшувати стрілками, які містяться у правій частині компонента. У цьому режимі можна лише задати дату, календар потрібно виводити окремо.

Дослідіть обидва ці режими.

Вказівкидовиконаннязавдання2

2.1. Помістіть на форму компонент Animate (сторінка Win32 палітри компонент) і дві кнопки Button1 та Button2. Animate дозволяє відтворювати кліпи в форматі AVI (без звуку). Адреса AVI вказується у властивості Animate1.FileName. Як значення цієї властивості виберіть файл C:\Program Files\Borland\Delphi7\Demos\CoolStuf\cool.avi (можна поекспериментувати із іншими файлами). Запрограмуйте кнопки Button1 та Button2:

procedure TForm1.Button1Click(Sender: TObject); begin

Animate1.Open := True; end;Animate1.Active := True;

procedure TForm1.Button2Click(Sender: TObject); begin

end;Animate1.Active := False;

Значення True для властивості Open дозволяє відкрити кліп (при цьому його копія завантажується в пам’ять і виконується підготовка до відтворення). Якщо властивість Active отримує значення True, то кліп для розпочинає відтворюватися. У нас кнопки Button1 та Button2 будуть запускати та зупиняти кліп.

Властивість Animate1.Repetitions задає кількість повторень. Якщо Animate1.Repetitions=0, то кліп відтворюватиметься неперервно до натискування на Button2.

Можна переглянути в такий спосіб стандартні кліпи Windows. Для цього потрібно вибрати для властивості Animate1.CommonAvi одне із значень, яке відмінне від aviNone.

Для того, щоб зупинити кліп, можна викликати метод Animate1.Stop в процедурі для Button2Click. Для того, щоб ім’я файла можна було вибрати в процесі виконання програми, помістимо на форму

кнопку Button2, яка буде відкривати стандартний діалог відкриття файла:

procedure TForm1.Button1Click(Sender: TObject); begin

if OpenDialog1.Execute then

Animate1.FileName := OpenDialog1.FileName;

end;

Дослідіть всі зазначені способи показу кліпів за допомогою компонента Animate.

2.2. Помістіть на форму наступні компоненти у відповідності до малюнку:

Panel1 (із сторінки Standard); Gauge1 (із сторінки Samples); Label1 (із сторінки Standard);

Button1 (із сторінки Standard); OpenDialog (із сторінки Dialogs); Timer (із сторінки System); MediaPlayer1 (із сторінки System).

MediaPlayer1 призначений для керування процесом показу (відтворення) мультимедіа-файлів і містить звичайні для побутових плеєрів кнопки. Властивість MediaPlayer1.EnableButtons дозволяє задати список кнопок плеєра, які відображаються, у вигляді множини значень btPlay, btPause, btStop, btNext, btPrev, btStep, btBack, btRecord, btEject. Ці значення відповідають кнопкам плеєра у такій же послідовності. Щоб вказати компонент, на якому буде відображатися кліп, властивості

MediaPlayer1.Display присвойте значення Panel1.

Наведемо весь розділ implementation модуля форми.

implementation var MPl:Boolean;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); begin

if OpenDialog1.Execute then begin

MediaPlayer1.FileName := Opendialog1.Filename; MediaPlayer1.Open;

MediaPlayer1.TimeFormat := tfMilliseconds;

Label1.Caption := MediaPlayer1.FileName; Mpl := True;

end;end;

procedure TForm1.Timer1Timer(Sender: TObject); begin

if MPl then

Gauge1.Progress := 100 * MediaPlayer1.Position div MediaPlayer1.Length;

end;

procedure TForm1.FormCreate(Sender: TObject); begin

end;Mpl := False;

Діалог Opendialog1 призначений для вибору media-файла. Кнопкою Button1 відкривається цей діалог, відкривається сам кліп, задається одиниця вимірювання довжини кліпу (властивість MediaPlayer1.TimeFormat= tfMilliseconds означає, що вимірювання довжини кліпу буде здійснюватися в мілісекундах, а не в кількості кадрів), в поле Label1 поміщається назва media-файла і за допомогою змінної MPl фіксується факт відкриття кліпу.

Gauge1 моделює індикатор, табло якого відображає певний процес, виконання якого можна охарактеризувати деякою величиною. На компоненті Gauge1 ми будемо показувати діаграму відтворення кліпу. Для цього властивості Gauge1.Progress будемо присвоювати через кожну секунду відсоток переглянутої довжини кліпу. Властивість MediaPlayer1.Length фіксує довжину кліпу, а MediaPlayer1.Position — поточну позицію носія кліпу. Присвоєння нового значення властивості Gauge1.Progress робимо в процедурі опрацювання події OnTime для компонента Timer1. В інспекторі об’єктів для компонента Timer1 властивості Interval потрібно присвоїти значення 1000 (мс). Це означатиме, що подія OnTime для компонента Timer1 буде спрацьовувати через кожні 1000 мс = 1 с, тобто щосекунди.

Виконайте запропонований проект, перегляньте кліп із файла C:\Program Files\Borland\Delphi7\Demos\CoolStuf\speedis.avi, поекспериментуйте з різними media-файлами,

дослідіть інші властивості компонент форми.

Спробуйте стиль компонента Gauge1 змінити за допомогою властивості Kind, яка може приймати наступні значення: gkText — виведення значення відсотка величини в текстовому вигляді; gkHorizontalBar — горизонтальне заповнення (діаграма); gkVerticalBar — вертикальне заповнення (діаграма); gkPie — відхилення стрілки на круговій діаграмі; gkNeedle — заповнення сектора круга.

Вказівкидовиконаннязавдання3

3.1. На формі розташуйте компоненти DriveComboBox1 (для вибору поточного диска), DirectoryListBox1 (для переміщення по дереву каталогів і вибору поточного каталогу), FileListBox1 (для відображення списку файлів каталогу), FilterComboBox1 (для для встановлення шаблонів (масок) відображення файлів в FileListBox1) та DirectoryOutline1 (для відображення дерева каталогів). Результат виконання програмного проекту з такими компонентами показано на малюнку.

Для синхронного відображення інформації створеними компонентами встановіть між ними наступні зв’язки:

DriveComboBox1.DirList = DirectoryListBox1 (для властивості DirList компонента

DriveComboBox1 зафіксуйте значення DirectoryListBox1);

DirectoryListBox1.FileList = FileListBox1;

FilterComboBox1. FileList = FileListBox1;

DirectoryListBox1.DirLabel = Label1 (для відображення повного шляху до вибраного каталогу);

FileListBox1.FileEdit = Edit1 (для відображення вибраного файлу);

Подію OnChange для DriveComboBox1 запрограмуйте таким чином, щоб вибраний диск відображався на DirectoryOutline1:

DirectoryOutline1.Drive:=DriveComboBox1.Drive;

Події DoubleClick для DirectoryListBox1 і DirectoryOutline1 запрограмуйте таким чином,

щоб властивість Directory в обох компонентах мала однакове значення. Тут, на жаль, при виборі каталогу на DirectoryOutline1 аналогічний каталог буде вибиратися в

DirectoryListBox1, але не навпаки.

Інформація про вибрані диск і каталог у всіх зазначених компонентах зберігається у властивостях Drive та Directory відповідно. Ім’я вибраного файла зберігається у FileListBox1.FileName. Тому інформацію про поточний каталог в Label1 та ім’я вибраного файла в Edit1 можна внести безпосередньо (зробіть це самостійно).

Задати шаблон для відображення файлів в FileListBox1 можна за допомогою властивості Mask (попробуйте). Атрибути файлів, які виводяться в FileListBox1 задають властивістю FileType (попробуйте). Але зручніше встановлювати шаблони для файлів в компоненті FilterComboBox1 на етапі розробки за допомогою властивості Filter (попробуйте).

Для того, щоб у FileListBox1 можна було вибирати декілька файлів звичайними засобами Windows (Ctrl + миша, Shift + миша) встановіть для властивості MultiSelect значення True.

3.2. Розташуйте на формі компоненти ShellComboBox1, ShellTreeView1, ShellListView1. Для синхронного відображення інформації на цих компонентах встановіть зв’язки між ними за допомогою властивостей ShellComboBox, ShellTreeView, ShellListView. Для задання виду значків в ShellListView1

використовують властивість ViewStyle, значення якої означають наступне: vsIcon — великі значки, vsSmallIcon — малі значки, vsList — список, vsReport — таблиця. (поекспериментуйте).

3.3. Розташуйте на формі компоненти ListView, ImageList (сторінка Win32), Edit1 та Button1. У методі FormCreate сформуємо колонки таблиці. Кожну колонку добавляємо за допомогою методу Add властивості Columns компонента ListView1. Цей метод створює об’єкт класу TlistColumn, властивість Caption якого зберігає назву колонки.

procedure TForm1.FormCreate(Sender: TObject);

var NewColumn: TListColumn; begin

with ListView1 do begin

ViewStyle := vsReport; NewColumn := Columns.Add; NewColumn.Caption := 'Name'; NewColumn := Columns.Add; NewColumn.Caption := 'Date'; NewColumn := Columns.Add; NewColumn.Caption := 'Size'; NewColumn := 'Columns.Add;

NewColumn.Caption := 'Attributes'; Columns[0].Width := 150; Columns[1].Width := 120; Columns[2].Width := 60;

end;end Columns[3].Width := 60;

Пошук файлів заданого в Edit1 каталозі будемо робити за допомогою функцій мови Object Pascal

— FindFirst та FindNext. Ці функції записують характеристики знайдених файлів у записи типу TSearchRec. Спочатку опишемо метод форми TForm1 з іменем AddNewFile для формування нового рядка у ListView1 на основі запису типу TsearchRec.

procedure TForm1.AddNewFile(F:TSearchRec); var SAttr:string;

begin

with ListView1.Items.Add, F do begin

Caption := Name;

if (Attr and faDirectory) <> 0 then elseImageIndex := 0

ImageIndex := 2; SubItems.Add(DateTimeToStr(FileDateToDateTime(Time))); SubItems.Add(IntToStr(Size));

if (Attr and faArchive) <> 0 then elseSAttr:='A'

SAttr:=' ';

if (Attr and faReadOnly) <> 0 then elseSAttr:=SAttr+'R'

SAttr:=SAttr+' ';

if (Attr and faHidden) <> 0 then elseSAttr:=SAttr+'H'

SAttr:=SAttr+' ';

if (Attr and faSysFile) <> 0 then elseSAttr:=SAttr+'S'

SAttr:=SAttr+' '; end;end SubItems.Add(SAttr)

Метод ListView1.Items.Add формує новий об’єкт-рядок, назва якого зберігається у властивості Caption (ім’я файла), всі решта характеристик файла поміщаємо у під властивості цієї властивості за допомогою методу Add підвластивості SubItems властивості Items. Але на екрані все разом буде відображатися в одному рядку.

Цикл для пошуку файлів запишемо в методі Button1Click:

procedure TForm1.Button1Click(Sender: TObject);

var F: TSearchRec; fa: Integer;

begin

fa:=faAnyFile;

if FindFirst(Edit1.Text, fa, F) <> 0 then Exit;

AddNewFile(F);

while FindNext(F)=0 do AddNewFile(F);

end;FindClose(F);

В результаті отримаємо наступну таблицю (але без значків в колонці Name).

Щоб у колонці name файли і каталоги відрізнялися значками сформуємо список значків ImageList1 і зафіксуємо його як список, що використовується для відображення малих значків у властивості SmallImages компонента ListView1. Для формування списку значків ImageList1 потрібно клацнути на ньому двічі, в діалоговому вікні, що з’явиться, вказати папку із *.bmp або *.ico файлами (наприклад, c:\Proram Files\Common Files\Borland Shared\Images\Buttons) і вибрати файли із значками (у кожному файлі міститься по 2 значки, тому їх потрібно розділяти, давши ствердну відповідь на відповідне питання). Індексуються значки, занесені у список ImageList1, розпочинаючи з нуля.

Отриманий список файлів і каталогів буде не впорядкованим. Для його сортування за зростанням імен використовують метод ListView1.AlphaSort. Для того, щоб у списку ListView1 спочатку відображалися каталоги, а потім файли, задамо опрацювальник події OnCompare, який дозволяє порівнювати два об’єкти Item1 і Item2 залежно від значень властивості ImageIndex.

procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);

begin

if Item1.ImageIndex = Item2.ImageIndex then

Compare:=0

else if Item1.ImageIndex < Item2.ImageIndex then elseCompare:=-1

Compare:=+1

end;

В кінець методу Button1Click добавимо виклик методу сортування:

ListView1.AlphaSort;

Отримаємо наступний результат.

Допрацюйте дану Delphi-програму таким чином, щоб у колонці Size значення 0 не виводилося для каталогів. Добавте ще одну колонку Ext для відображення розширень файлів.

3.4. Ознайомтеся із використанням компонента HotKey (сторінка Win32) для формування гарячих клавіш самостійно.

Доповніть функціонал однієї із створених форм реакцією на якусь гарячу клавішу.

Добавте можливість для користувача настроювати гарячу клавішу самостійно.

3.5. Розробіть програмний проект “My File Manager” (файловий менеджер) з наступними функціональними можливостями:

У двох панелях виводиться вміст двох каталогів;

Вибір диску для кожної панелі;

Можливість переходу у батьківський та дочірний каталоги;

Перемикання між панелями (при цьому відповідний диск і каталог мають ставати поточними);

Відображення структури диска у вигляді дерева;

Виконання стандартних команд (копіювання, переіменування, переміщення, вилучення, перегляд, створення каталогу) за допомогою функціональних клавіш та із віконного меню.

Завдання виконайте самостійно.

Поради:

Для відображення структури каталогів можна скористатись компонентом ShellTreeView. Для відображення структури лише одного диска чи папки у властивості Root вкажіть шлях до цієї папки чи диска.

Для реалізації команди копіювання файлів опишіть окрему процедуру, в якій файли розглядатимуться як файли без типу, а копіювання здійснюватиметься з використанням процедур BlockRead, BlockWrite. Решта операцій із файлами і каталогами можна реалізувати з використанням наступних підпрограм.

Стандартні підпрограми для роботи із файлами і каталогами (модулі System i SysUtils)

procedure ChDir(Dir: string);

Встановлює поточним каталог Dir

function SetCurrentDir(const Dir: string): Boolean;

 

function GetCurrentDir: string;

Повертає ім’я поточного каталога

procedure MkDir(S: string);

Створює новий каталог

function CreateDir(const Dir: string): Boolean;

 

function DirectoryExists(Name: string): Boolean;

Перевіряє чи існує каталог Name

procedure GetDir(D: Byte; var S: string);

Записує в S повний шлях до

 

поточного каталога.

 

значення D: 0 для диска А:, 1 для

 

диска С, 2 — D і т.д.

 

 

procedure RmDir(S: string);

Вилучає каталог

function RemoveDir(const Dir: string): Boolean;

 

function DeleteFile(const FileName: string): Boolean;

Вилучає файл

procedure Rename(var F, NewName: string);

Перейменовує файл, асоційований з

function RenameFile (const OldName,

файловою змінною F за допомогою

NewName: string): Boolean;

AssignFile

 

Перейменовує файл

 

 

function FileExists (const FileName: string): Boolean;

Перевіряє, чи існує заданий файл

function FileGetAttr (const FileName: string):Integer;

Повертає або встановлює атрибути

function FileSetAttr (const FileName: string;

файла

Attr: Integer): Integer;

 

function FileSize (var F): Integer;

Повертає розмір файла

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]