Робота з файлами в delphi

Робота з файлами важлива річ в будь-якій мові програмування. Робота з файлами в Delphi дозволяє зчитувати, зберігати інформацію, і виконувати інші дії з файлами. У Delphi підтримуються всі операції з файлами - створення, пошук, читання і запис, перейменування як файлів, так і до директорій. У Delphi існує кілька способів роботи з файлами.

Для "ліричного" вступу потрібно згадати компоненти Delphi, які вміють працювати з файлами. Вони читають і зберігають свій вміст, рядки типу String. в файл текстового формату. Це компоненти ListBox. ComboBox і Memo. розташовані на першій же вкладці палітри компонентів.

Кожен рядок компонентів ListBox і ComboBox є об'єктом Items [i]. а Memo - Lines [i]. де i - номер рядка, який відраховується від нуля. Додавання рядків в компоненти виконується методами Add і Insert:

Робота з файлами в delphi

begin
Memo1.Lines.Add ( "Перший рядок ');
ComboBox1.Items.Add ( 'Перший рядок');
ComboBox1.Items.Add ( 'Другий рядок');
ListBox1.Items.Add ( 'Перший рядок');
ListBox1.Items.Add ( 'Другий рядок');
end;

Метод Add додає новий рядок в кінець. Метод Insert має додатковий параметр, який вказує, після якого рядка розмістити новий рядок. Доступ до рядків здійснюється так:

ComboBox1.Items [0]: = 'Перший рядок змінилася';
ListBox1.Items [1]: = 'Другий рядок змінилася';

У компонента ComboBox додатково є властивість Text. де (як і у компонента Edit) знаходиться текст, що вводиться:

ComboBox1.Text: = 'вводиться текст';

На виділену в даний момент рядок компонента ComboBox вказує властивість ItemIndex типу Integer. тобто це номер виділеної рядки. Отже, отримати саму виділену рядок компонента ComboBox можна наступною конструкцією:

або, користуючись оператором приєднання

With ComboBox1 do
S: = Items [ItemIndex];

Ось як після натискання клавіші Enter можна заносити в цей компонент вводиться в рядок інформацію і видаляти натисненням Escape:
Виділіть на Формі ComboBox і перейдіть в Інспектор об'єктів, на вкладку Events. Клацніть двічі по оброблювачу OnKeyPress. Система Delphi створить заготівлю обробника. Напишіть:

begin
if Key = # 13 then
ComboBox1.Items.Add (ComboBox1.Text);
if Key = # 27 then
ComboBox1.Items.Delete (ComboBox1.Items.Count-1);
end;

Key - певна в цьому обробнику змінна, що містить код натиснутоюклавіші, # 13 і # 27 - коди клавіш Enter і Escape відповідно. Items.Count - кількість містяться в компоненті рядків. Так як відлік рядків йде від нуля, ми забираємо одиницю. Після чергового видалення кількість рядків змінюється, таким чином, Items.Count-1 завжди вказує на останній рядок. Послідовно натискаючи Escape. ми можемо видалити всі рядки. командою
ComboBox1.Items.Delete (0);
можна домогтися того ж ефекту, тільки віддалятися будуть перші рядки. Втім, щоб стерти все відразу, є метод Clear!

Ну а тепер власне про збереження вмісту в файл. Для цього виконайте команду

Втім, розширення можна поставити будь-який за бажанням, не обов'язково. txt, як і взагалі без нього обійтися. Але розширення. txt дозволить легко відкрити файл стандартним віндовскій Блокнотом, що буває дуже зручно на етапі написання програми!
Для завантаження можна змінити метод LoadFromFile:

Що робити, якщо в своїй програмі ми не працюємо з компонентами Combobox. ListBox або Memo. а зберігати інформацію потрібно? Беремо один з компонентів і робимо його невидимим, для цього в інспектор об'єктів ставимо в властивість Visible значення False. Функціональність його від цього не зміниться!

Останній штрих - створимо програму, що зберігає своє становище на екрані в момент закриття і там же відкривається. Нам потрібно зберегти два параметра - значення властивостей Форми Left і Top, це відстань від лівого і верхнього країв екрану відповідно. Значення ці виражаються в пікселах і мають тип Integer. Необхідно перевести ці числа в рядок (тип String) за допомогою оператора IntToStr. Отже, розмістіть на Формі невидимий ListBox. клацніть по порожньому місці Форми. щоб її свйства з'явилися в інспектор об'єктів, і перейдіть на вкладку Events. Клацніть по оброблювачу OnClose і в створеній заготівлі напишіть:

begin
ListBox1.Items.Clear;
ListBox1.Items.Add (IntToStr (Form1.Left));
ListBox1.Items.Add (IntToStr (Form1.Top));
ListBox1.Items.SaveToFile ( 'MyFormPos.txt');
end;

Цей оброблювач зберігає положення Форми на екрані. Тепер напишемо обробник, що поміщає Форму на колишнє місце при старті програми. Створіть заготовку обробника події OnCreate. Ця подія відбувається в момент "створення" Форми операційною системою. У цей момент і потрібно присвоювати їй необхідні властивості. Пишіть:

begin
if FileExists ( 'MyFormPos.txt') then
begin
ListBox1.Items.LoadFromFile ( 'MyFormPos.txt');
Form1.Left: = StrToInt (ListBox1.Items [0]);
Form1.Top:=StrToInt(ListBox1.Items[1]);
end;
end;

У першому рядку відбувається перевірка на наявність файлу, адже якщо його не буде, станеться помилка. Втім, програма після видачі попередження відкриється в тому місці, де була на етапі проектування, а при закритті потрібний файл буде відтворений!
Потім в логічних дужках begin / end міститься сам код, який буде виконаний тільки приналичии файлу MyFormPos.txt в папці з програмою, так як використовується відносний шлях. Можна вказати конкретне місце розташування, наприклад, C: \ Program Files \ MyProg \ MyFormPos.txt.

Перевірку на существовованіе файлу можна виконати також за допомогою контролю виняткових ситуацій. Якщо файл не існує, то відбудеться виняткова ситуація. Перехопивши її за допомогою спеціального оператора, ми зможемо уникнути помилок в програмі.

Звичайно, професійні програми зберігають своє положення в Реєстрі Windows. Але всьому свій час.

Memo1.Lines.Add ( "Перший рядок ');
ComboBox1.Items.Add ( 'Перший рядок');
ComboBox1.Items.Add ( 'Другий рядок');
ListBox1.Items.Add ( 'Перший рядок');
ListBox1.Items.Add ( 'Другий рядок');

procedure TForm1.Button1Click (Sender: TObject);
begin
MP1.DeviceType: = dtAutoSelect;
MP1.FileName: = 'имя_файла';
if not MP1.AutoOpen then MP1.Open;
MP1.Play;
end;

procedure TForm1.Button2Click (Sender: TObject);
begin
MP1.Display: = Panel1;
with OpenDialog1 do
if Execute then
begin
MP1.FileName: = FileName;
MP1.Open;
MP1.Play;
end;
end;

Тут потрібно додати OpenDialog, можна і в попередній приклад його вставити. І ще. Розмір області відтворення, чи то пак панелі, потрібно подивитися заздалегідь у властивостях файлу, на вкладці "Відомості". Але краще зробити панель побільше, і встановити її властивість BevelInner і BevelOuter в bvNone, щоб її було не видно. А то розміри у файлів різні.

Ну далі переводимо в години, хвилини і секунди за допомогою функції

function taim (Length: Integer): String;
var chas, min, sec: Integer;
function mode (Length: Integer): String;
begin
Result: = IntToStr (Length);
if Length
Це що стосується довжини. А поточну позицію повертає властивість. - правильно, Position! Вимірюємо по спрацьовуванню таймера і виводимо в ProgressBar (краще візьміть TrackBar). Знову ж, властивість TrackBar.Max попередньо встановіть рівним Mediaplayer.Length.

Є проблемка з прокруткою. Щоб прокрутити, потрібно спочатку зупинити плеєр, і таймер. А потім запустити з іншим значенням:

Я був здивований, але TrackBar НЕ имееет подій миші. А то можна було б зупиняти за подією OnMouseDown. А втім, можна користуватися подією OnEnter! Але запускати все одно потім доводиться.

А щоб міняти кадри під час перемотування мишкою, доведеться ввести другий таймер, щоб працював коли відтворення завершиться, і задавав

але чомусь не працює, при запуску видає помилку Олександр, додано 1.05.12, 15:31:21
аааааааа, треба за формою два рази клацнути і писати, зрозумів. Олександр, додано 1.05.12, 17:11:13
виручайте.

написав через add все відмінно, потім використовував команду Insert.

вилітає помилка "Debugger exception notification Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0056D0FD in modul' Project1.exe'.Read of address 0000030C.Process stopped. Use Step or Run to continue."

Анонім, додано 1.05.12, 17:36:26
У помилках розбиратися ніколи. Ось як треба:

Memo1.Lines.Insert (0, 'Перший рядок');
Олександр, додано 1.05.12, 17:44:33
ви ж на самому початку уроку говорите що ось так:

ComboBox1.Items [0]: = 'Перший рядок змінилася';
ListBox1.Items [1]: = 'Другий рядок змінилася';

я це копіює вставляю в програму і вилазить помилка Олександр, додано 1.05.12, 17:54:49
і з якогось дива

коли пишу Memo1.Lines.Insert (0, 'Перший рядок'); або там comboBox1.Items.Insert (0, 'ваолоашло')

все відмінно, але стіт написати "Memo2.Lines.Insert (1, 'друга Троки');" без "Memo1.Lines.Insert (0, 'Перший рядок');" то вилазить опядже таже помилка.

Схожі статті