Ноу Інти, лекція, тип tstringlist
Робота з папками
У Lazarus є кілька корисних функцій і процедур для різної роботи з папками (каталогами), які ви можете застосовувати в своїх програмах. Вивчимо їх. При бажанні, можете створити просте додаток з єдиною кнопкою TButton на формі. Згенеруйте процедуру OnClick для неї, і в цій процедурі по черзі можете перевіряти розглянуті далі приклади.
GetDir - функція повертає поточну папку на зазначеному в параметрі диску. Є два параметри: номер диска (ціле число) і ім'я текстової змінної, куди буде записаний результат роботи функції. Майте на увазі, що нумерація дисків починається з 1, це буде диск A. Перший жорсткий диск C: має номер 3. Якщо вказати номер диска 0, то буде виводиться інформація про поточну папці поточного диска. У Linux та інших Unix-подібних системах нумерація диска ігнорується. Функція описана в модулях System і SysUtils. для використання буде досить, якщо підключений один з них. Приклад використання:
ChDir - процедура, робить поточної зазначену в параметрі папку. Процедура описана в модулях System і SysUtils. щоб її використовувати, досить підключити один з них. Приклад використання:
SetCurrentDir - функція. робить зазначену в параметрі папку поточної і повертає True в разі успіху, або False. якщо сталася помилка (наприклад, зазначеної папки не існує). Функція описана в модулі SysUtils. Приклад використання:
CreateDir - функція. створює зазначену в параметрі папку. У разі успіху повертає True. в разі невдачі - False. Невдача може статися, якщо відсутні права на створення папки, наприклад, диск доступний тільки для читання, або така папка вже існує. Функція описана в модулі SysUtils. Наступний приклад буде успішним при першому зверненні (якщо звичайно, папку взагалі можна створити), і неуспішному при наступних, так як така папка вже буде:
ForceDirectories - функція. створює зазначену папку і всі відсутні папки. У разі успіху повертає True. в разі невдачі - False. Функція описана в модулі SysUtils. У наступному прикладі на диску C: буде створена папка MyNewDir. а в ній - папка 123:
RmDir - процедура, видаляє вказану в параметрі папку. На відміну від RemoveDir. не повертає ніяких значень і не може видалити поточну папку. При спробі видалити неіснуючу папку викликає помилку програми, так що застосовувати потрібно тільки спільно з DirectoryExists. щоб уникнути неприємних помилок. А краще завжди користуватися RemoveDir. Приклад використання:
Дякуємо за Ваш чудовий курс!
У самостійній роботі №2 при компіляції модуля MyCript.pas (ОС: Windows 7 x64, Lazarus 1.4 win64) видається помилка на код асемблера
mycript.pas (54,5) Error: Asm: [push reg32] invalid combination of opcode and operands
mycript.pas (95,5) Error: Asm: [pop reg32] invalid combination of opcode and operands
Я розумію, що курс готувався для 32 розрядних ОС, але як бути в разі 64 розрядних систем?
У обробниках пунктів меню FileCreate і FileOpen, а також в обробнику закриття форми OnClose - в цих трьох процедурах міститься один і той же код
їх перед створенням нового тексту>
if Memo1.Modified then begin
// якщо користувач згоден зберегти зміни:
if MessageDlg ( 'Збереження файлу',
'Поточний файл був змінений. Зберегти зміни?',
mtConfirmation, [mbYes, mbNo, mbIgnore], 0) = mrYes then
FileSaveClick (Sender);
end; // if
Дозвольте запитати: чи не краще було б винести цей код в окрему процедуру, наприклад - в обробник події форми OnCloseQuery? Наскільки я пам'ятаю з досвіду Delphi, виклик цієї процедури сам по собі не повинен призводити до закриття форми. А значить, її можна використовувати і в процедурах очищення Memo1 і читання з файлу. Або в Lazarus так робити не можна?