Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

tfile:= TStringList.Create; // создание списка строк tfile.LoadFromFile('File in Russian.txt'); str:= tfile.Text;

{$IFDEF WINDOWS}

str:= SysToUTF8(str); // преобразование в кодировку UTF-8

{$ENDIF} Memo1.Lines.Add(str); tfile.Free;

end;

Функция SysToUTF8() преобразует строку из системной кодировки (в

данном случае СР1251) в кодировку UTF-8.

Наборы строк TStringList "невидимы" для пользователя, в отличие от набора строк TMemo. Обычно с помощью TStringList производят различ-

ные операции с набором строк, а в TMemo выводят уже окончательно сформи-

рованные (например, отсортированные) строки. Некоторые операции с набором строк можно производить и непосредственно в TMemo, но, обычно, так не де-

лают. Так как, если вы будете делать какие-то операции со строками в TMemo, а

количество строк достаточно велико, то во время выполнения вашего приложе-

ния в его окне будет что-то быстро "мелькать". Разумеется, это нехорошо. Так что, операции со строками в TMemo "на виду" у пользователя является призна-

ком дурного тона!

Здесь мы создаем список строк типа TStringList, методом

LoadFromFile загружаем файл. Для этого создайте текстовый файл с именем

'File in Russian' с русским текстом в той же папке, что и ваш проект. В

примерах, содержащихся на приложенном к книге диске, такой файл имеется.

Используя свойство Text, копируем содержимое списка в одну строку. Затем,

если приложение выполняется в Windows, используя функцию SysToUTF8(),

преобразуем полученную строку в UTF-8. И только после этого добавляем в

566

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

Memo1. Если вы используете Linux, то применять функцию SysToUTF8() не надо, так как строка уже в UTF-8. В принципе ничего страшного не произой-

дет, если вы примените функцию SysToUTF8() к строке, которая уже в ко-

дировке UTF-8. Функция просто вернет исходную строку, не преобразовывая ее. Если хотите, вы можете убрать директивы компилятора

{$IFDEF WINDOWS}

{$ENDIF}

Обратите внимание, что после завершения работы с TStringList мето-

дом Free память, выделенная набору строк, освобождается.

Точно так же, при сохранении списка строк TMemo в файл необходимо обратное преобразование, например, вот таким образом:

procedure UTF8_Ansi; var

tfile: TStringList; str: string;

begin

tfile:= TStringList.Create; // создание списка строк str:=Memo1.Text;

{$IFDEF WINDOWS}

str:= UTF8ToSys(str);// преобразование в системную кодировку

{$ENDIF} tfile.Add(str);

tfile.SaveToFile('File in Russian.txt'); tfile.Free;

end;

В этой программе загружается файл с фиксированным именем

567

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

'File in Russian.txt' находящийся в той же папке, что и сама про-

грамма. Сохранение производится в файл с тем же именем.

Естественно, можно предоставить возможность пользователю самому вы-

бирать файл для открытия и задавать имя файла при сохранении. Для этого ис-

пользуется компоненты TOpenDialog и TSaveDialog из вкладки Dialogs.

Рассмотрим некоторые свойства этих компонентов:

DefaultExt - указывает значение расширения файла по умолчанию. В

нашем случае укажите DefaultExt= .txt

Filter – задает шаблоны фильтра при выборе файлов. Если в окне этого свойства нажать на кнопку с троеточием, появится окно редактора фильтров,

рис. 6.46.

Рис. 6.46. Редактор фильтров

Задайте фильтр как показано на рисунке. Тогда значение свойства будет равно Filter= 'Текстовый файл (*.txt)|*.txt', т.е. имя фильтра и сам фильтр разделены вертикальной линией. Если вы зададите еще один фильтр, то они бу-

дут разделены точкой с запятой. Таким образом, значение свойства Filter

можно задавать программно.

Filterlndex – определяет номер фильтра, который будет по умолчанию

568

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

показан пользователю в момент открытия диалога.

InitialDir – определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения.

Title – задает заголовок диалогового окна.

Для вызова диалога открытия и загрузки файла в TMemo следует написать следующий обработчик:

procedure TForm1.Button1Click(Sender: TObject);

var

fname, str: string;

tfile: TStringList;

begin

tfile:= TStringList.Create; // создание списка строк

if OpenDialogl.Execute

then fname:= OpenDialogl.FileName;

// преобразование в системную кодировку fname:= UTF8ToSys(fname); tfile.LoadFromFile(fname); str:= tfile.Text;

{$IFDEF WINDOWS}

str:= SysToUTF8(str); // преобразование в кодировку UTF-8

{$ENDIF} Memo1.Lines.Add(str); tfile.Free;

end;

После запуска приложения и нажатии кнопки Button1 будет открыт диа-

569

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

лог открытия файла, рис. 6.47, 6.48.

Рис. 6.47. Стандартный диалог открытия файла в Windows.

Рис. 6.48. Стандартный диалог открытия файла в Linux.

После

выбора

пользователем

файла,

в

свойстве

OpenDialog1.FileName будет находиться имя файла вместе с путем к не-

570

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773