function SlashSep (Path, FName: string): string;
if Path [Length (Path)] про 'V then Result: = Path + + FName else
Result: = Path + FName; end;
Функцію siashsep вже один раз використовували, але згадаємо, що тут відбувається. Ця функція отримує два параметри - шлях до файлу та ім'я файлу, які вона повинна з'єднати в один рядок, щоб вийшов повний шлях до файлу. Але спочатку ми повинні перевірити, чи закінчується шлях (перший отриманий параметр - Path) знаком V. Мінлива Path - це рядок типу string, а значить, ми можемо до неї звертатися як до масиву символів. Щоб отримати доступ до першого символу, ми повинні написати Path.
Нам потрібно перевірити останній символ, тому В квадратних дужках використовується Length (Path). Функція Length повертає довжину переданої їй строкової змінної, а це значить, що в квадратних дужках ми вказуємо довжину рядка, т. Е. Останній символ.
Якби потрібен був передостанній символ, то ми б написали Path [Length (Path) -1]. В цьому випадку з довжини рядка віднімається одиниця і в результаті виходить індекс передостаннього символу.
Якщо останній символ НЕ дорівнює \\ додаємо спочатку його, а потім ім'я файлу. Якщо цей символ в рядку має місце, то потрібно тільки додати ім'я файлу та записати в змінну Result, щоб функція повернула повний шлях до файлу.
З цією функцією покінчено, і пора повернутися до нашого перерахуванню файлів. Наступним йде виклик системної функції SHGetFileinfo. Вона повертає інформацію про файл. Не будемо на ній зараз зупинятися. В принципі, вона проста і ви, напевно, зможете її зрозуміти за кодом, а якщо немає, то до неї ми повернемося трохи пізніше.
Зараз нас більше цікавить робота з компонентом Listview. Наступний код додає в список новий елемент: Listviewi.items.Add. Це робиться всередині конструкції with, значить, всі наступні дії між begin і end будуть виконуватися з новим елементом. А саме - змінюється заголовок нового елемента:
У кожного елемента є властивість Subitems, яке зберігає додаткову інформацію. Коли компонент знаходиться в режимі відображення іконок, то додаткова інформація, хоч я знаю. Але якщо вибрати в властивості viewstyle значення vsReport, то компонент буде виглядати у вигляді таблиці, де кожен стовпець відображає додаткову інформацію, як це показано на рис. 11.38.
Щоб додати додаткові колонки до нового елементу, треба виконати оператор:
Щоб колонки відображалися, потрібно у властивості columns вказати імена колонок. Якщо імена колонок не вказані, то нічого відображатися не буде. І не забувайте, що при описі колонок перша - це заголовок елементів, інші - це додаткові параметри в порядку їх додавання за допомогою subitems.Add.
І останнє, ЩО треба ще розглянути, - ЦЕ функція FileTimeToDateTimeStr, яка переводить час / дату з системного формату в рядок. Її код можна побачити в лістингу:
function FileTimeToDateTimestr (FileTime: TFileTime): string;
LocFTime: TFileTime; SysFTime: TSystemTime; Dt, Tm: TDateTime; begin
FileTimeToLocalFileTime (FileTime, LocFTime); FileTimeToSystemTime (LocFTime, SysFTime); try
with SysFTime do begin
Dt: = EncodeDate (wYear, wMonth, wDay);
Tm: = EncodeTime (wHour / wMinute, wSecond, wMilliseconds);
Result: = DateTimeToStr (Dt + Tm); except
На самому початку ми наводимо дату файлу в Універсальний скоординований час (за Гринвічем). Для ЦЬОГО використовується функція FileTimeToLocalFileTime, у яких два параметри:
- змінна типу TFileTime, яку потрібно перевести;
- змінна, в яку буде записаний результат.
Другим етапом ми переводимо Універсальний скоординований час в системний час вашого комп'ютера. Для цього потрібна функція FileTimeToSystemTime, у якій також два параметри:
- Універсальний скоординований час;
- змінна результату.
Тепер у нас дата зберігається в змінної sysFTime і має тип TSystemTime. Мінлива SysFTime має тип структури і наступні властивості:
- wYear - рік;
- wMonth - місяць;
- wDay - день;
- wHour - годинник;
- wMinute - хвилини;
- wsecond - секунди;
- wMilli seconds - мілісекунди.
Все це числа, і нам треба перетворити їх в рядок, але так, щоб рядок дати виглядала відповідно до локальних настройками системи. Якщо ми пишемо програму, яка буде виконуватися в однотипної системі (наприклад, в російській версії Windows з російським уявленням дати і часу), то ви можете скористатися функцією IntToStr, щоб перетворити все поля в рядки і відформатувати їх на свій розсуд.
Однак зараз зробимо більш універсально. Спочатку дані перетворимо в формат DateTime. Для цього є функції EncodeDate і EncodeTime. Ці функції створюють змінні типу TDate і TTime на основі переданих їм числових значень.
Отримавши ці змінні, ми об'єднуємо їх в більш загальний формат DateTime простим додаванням і переводимо в рядок за допомогою функції DateTimeToStr. Ця функція переводить дату в рядок відповідно до локальних настройками регіону в ОС Windows. Ви ж можете скористатися і функцією FormatDate, яка може створити рядок дати в будь-якому вигляді.