ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 19.09.2024

Просмотров: 14

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

TStringList *List = new TStringList;

List->Duplicates = dupIgnore;

List->Sorted = true;

for(int i = 0; i < Memo1->Lines->Count; i++)

{

List->Add(Memo1->Lines->Strings[i]);

}

Memo1->Clear();

List->SaveToFile("NEW.txt"); //сохранение значения поля Memo без дубликатов строк в файл "NEW.txt"

Memo1->Text = List->Text; //в Memo будет уже отредактированное значение без дубликатов

Работа с файлами с использованием функций компонент

Многим визуальные компоненты и некоторые классы имеют доступ к функциям:

LoadFromFile("Имя файла");

SaveToFile("Имя файла");

Эти функции особенно удобны для работы с текстовыми фыйлами.

Примеры загрузки и сохранения файлов:

//Визуальный компонент TMemo:

Memo1->Lines->Clear();

Memo1->Lines->LoadFromFile("a.txt");

......

Memo1->Lines->SaveToFile("a.txt");

......

//Класс TStringList:

TStringList * ptStrintList;

ptStrintList->Clear();

ptStrintList=new TStringList();

ptStrintList->LoadFromFile("a.txt");

......

ptStrintList->SaveToFile("a.txt");

......

ptStrintList->Free();

//Визуальный компонент TListBox1:

ListBox1->Items->Clear();

ListBox1->Items->LoadFromFile("a.txt");

......

ListBox1->Items->SaveToFile("a.txt");

//Визуальный компонент TListBox1:

ComboBox1->Items->Clear();

ComboBox1->Items->LoadFromFile("a.txt");

......

ComboBox1->Items->SaveToFile("a.txt");

//Визуальный компонент TRichEdit:

RichEdit1->Lines->Clear();

RichEdit1->Lines->LoadFromFile("a.txt");

.....

RichEdit1->Lines->SaveToFile("a.txt");

И.т.д.

При использовании функции SaveToFile если файл не существует, то он будет создан. Во всех приведенных выше примерах создаются текстовые файлы. Компонент TRichEdit создает текстовый файл в формате .rtf, поэтому логичнее записать:

RichEdit1->Lines->SaveToFile("a.rtf");

Работа с текстовыми файлами с использованием методов перечисленных классов и компонент аналогична. Все они имеют счетчик строк:

Memo1->Lines->Count;

RichEdit1->Lines->Count;

ptStrintList->Count;

ListBox1->Items->Count;

ComboBox1->Items->Count;

Все компоненты позволяют удалять, вставлять и добавлять строки (пример удаления второй строки вставки на ее место новой строки и добовления в конец списка новой строки):

AnsiString vasS="Yes";

if(Memo1->Lines->Count >= 2)

{

Memo1->Lines->Delete(1);

Memo1->Lines->Insert(1,vasS);

}

Memo1->Lines->Add(vasS);

if(RichEdit1->Lines->Count >= 2)

{

RichEdit1->Lines->Delete(1);

RichEdit1->Lines->Insert(1,vasS);

}

RichEdit1->Lines->Add(vasS);

if(ptStrintList->Count >= 2)


{

ptStrintList->Delete(1);

ptStrintList->Insert(1,vasS);

}

ptStrintList->Add(vasS);

if(ListBox1->Items->Count >= 2)

{

ListBox1->Items->Delete(1);

ListBox1->Items->Insert(1,vasS);

}

ListBox1->Items->Add(vasS);

if(ComboBox1->Items->Count >= 2)

{

ComboBox1->Items->Delete(1);

ComboBox1->Items->Insert(1,vasS);

}

ComboBox1->Items->Add(vasS);

Содержимое строк можно получит по номеру строки n:

AnsiString vasS;

vasS=Memo1->Lines->Strings[n];

vasS=RichEdit1->Lines->Strings[n];

vasS=ptStrintList->Strings[n];

vasS=ListBox1->Items->Strings[n];

vasS=ComboBox1->Items->Strings[n];

Возможно присвоить некоторой строке текст для дальнейшей манипуляции содержимым текста как единой строкой и далее перенести исправленный текст опять в компоненты:

AnsiString vasS;

vasS=Memo1->Lines->GetText();

... манипуляции с текстом как единой строкой

Memo1->Lines->SetText(vasS.c_str());

RichEdit1->Lines->LoadFromFile("a.txt");

vasS=RichEdit1->Lines->GetText();

... манипуляции с текстом как единой строкой

RichEdit1->Lines->SetText(vasS.c_str());

vasS=ptStrintList->GetText();

... манипуляции с текстом как единой строкой

ptStrintList->SetText(vasS.c_str());

vasS=ListBox1->Items->GetText();

... манипуляции с текстом как единой строкой

ListBox1->Items->SetText(vasS.c_str());

vasS=ComboBox1->Items->GetText();

... манипуляции с текстом как единой строкой

ComboBox1->Items->SetText(vasS.c_str());

Кроме того компоненты TComboBox и TListBox позволяют (лучше в обработчике своих событий OnChange) получить доступ к выбранным строкам:


Void __fastcall

TForm1::ComboBox1Change(TObject *Sender)

{

AnsiString vasS=ComboBox1->Items->Strings[ComboBox1->ItemIndex];

}

Void __fastcall

TForm1::ListBox1Click(TObject *Sender)

{

AnsiString vasS=ListBox1->Items->Strings[ListBox1->ItemIndex];

}

Компоненты TComboBox и TListBox кроме того позволяют определить номер строки по тексту в строке:

int n;

n=ComboBox1->Items->IndexOf("Yes");

n=ListBox1->Items->IndexOf("Yes");

Компоненты TComboBox и TListBox, класс TStringList кроме того позволяют выполнить сортировку загруженных строк:

ptStrintList->Sort();

ListBox1->Sorted=true;

ComboBox1->Sorted=true;

Перечисленные методы практически полностью перекрывают все потребности для работы с текстовыми файлами. Как правило в большинстве случаев достаточными являются TMemo TrichEdit и класс TStringList.

Однако многими возможностями при работе с текстом обладает класс TFileStream.

В начало

Работа с файлами с использованием класса tFileStream

Следующий пример работы с текстовым файлом с использованием класса TFileStream может показаться некоторым программным извращением (класс более подходит для работы с бинарными файлами), но посколько при работе с текстовыми ресурсами наиболее удобными являются потоки, то рассмотрим и эту возможность.

Ниже приведенный пример демонстрирует эту возможность:

Void __fastcall

TForm1::Button1Click(TObject *Sender)

{

//Создаем поток и загружаем в него содержимое файла

TFileStream * tfile=new TFileStream("b.txt",fmOpenReadWrite);

//При открытии указатель и так на нуле и следующая строка лишняя

tfile->Seek(0,0);

//Буфер для информации

char *vchrgBuf;

//Выделяем память для него

if ((vchrgBuf = (char *) malloc(tfile->Size)) == NULL)

{

//Здесь можно поместить сообщение об ошибке выделения памяти

return;

}

//Читаем информацию в буфер

tfile->Read(vchrgBuf,tfile->Size);

//Копируем информацию в AnsiString

AnsiString vasS=vchrgBuf;

//На всякий случай

vasS.SetLength(tfile->Size);

//Освобождаем память

free(vchrgBuf);

//Очищаем поток

tfile->Size=0;

//Заносим данные в компонент TMemo для того

//чтобы посмотреть, что там есть

//Memo1->Lines->Clear();

Memo1->Lines->Add(vasS);

//Изменим содержимое данных

if(Memo1->Lines->Count >= 2)

{

Memo1->Lines->Delete(1);

String vasS1="WWWW";

Memo1->Lines->Insert(1,vasS1);

}

//Забираем содержимое TMemo в AnsiString

vasS=Memo1->Lines->GetText();

//Выделяем память для буфера


if ((vchrgBuf = (char *) malloc(vasS.Length())) == NULL)

{

//Здесь можно поместить сообщение об ошибке выделения памяти

return;

}

//Переносим измененный текст в буфер

vchrgBuf=vasS.c_str();

tfile->Write(vchrgBuf,vasS.Length());

//Освобождают поток и переносим в память

tfile->Free();

//Освобождаем память

//free(vchrgBuf);

}

Выбор компонентов для групповых операций

Для эффективной разработки пользовательских интерфейсов приложений C++ Builder нередко возникает необходимость в манипулировании компонентами на формах.. Большинство операций для манипулирования компонентами находятся в меню Edit: К различным опциям этого меню следует обращаться после того, как на форме вы ран один или несколько компонентов, свойства которых требуется изменить.

Выбрать один компонент можно следующими способами:

  • Выбрав с помощью мыши компонент на форме

  • Выбрав имя компонента в селекторе объектов.

  • Переходом к компоненту на форме, нажимая клавишу Tab.

Выбрать несколько компонентов можно следующими способами:

  • Удерживая нажатой клавишу Shift, щелкнуть мышью на каждом компоненте

  • Нажать левую клавишу мыши и окружить нужные компоненты прямоугольным контуром

Установка разделяемых свойств компонентов

Большинство визуальных компонентов имеют общие свойства, (например, Visible, Width, Left). Для установки одинаковых значений общих свойств для нескольких компонентов необходимо выполнить следующие действия:

1. Выбрать несколько настраиваемых компонентов. При этом страница свойств и спектора объектов будет отображать только те свойства, которые имеются у всех выбра ных компонентов.

Рис. 1. Выбор нескольких компонентов для групповых операций

2. Установить значения свойств, общих для выделенных компонентов.

Рис.2 показывает результаты изменения свойства Font и Left . Все выбранные компоненты приобрели одинаковые значения этих свойств.

Рис. 2 Установка разделяемых свойств компонентов

Изменение размера компонентов

Изменение размера компонента можно проводить как при добавлении его на форму, так и после этого.

При добавлении компонента следует выбрать его на палитре компонентов. Далее ужно поместить курсор мыши на форму, нажать левую клавишу и перемещать мышь, в результате чего на форме появится прямоугольник, изображающий границы бу ущего компонента. Когда прямоугольник приобретет необходимые размеры, нужно отпустить кнопку мыши (рис.3).


Рис. 3. Изменение размера компонента при его добавлении на форму.

Если перевести курсор мыши на один из появившихся вокруг компонента мале ьких черных квадратиков, курсор мыши изменяет форму. Перемещая этот курсор и вместе с ним границу компонента, можно изменять его размеры.

Для изменения размеров нескольких компонентов следует выбрать их одним из описанных выше способов. Далее нужно выбрать пункт меню Edit/Size. Появится диалоговое окно Size. Выберите опции размера. Для точной установки размера в пикселах можно ввести числа в поля Width и Height. Далее нужно нажать кнопку OK.

Рис. 4. Установка свойств компонентов c использованием меню EDIT/SIZE

Можно добавить несколько копий компонента одного типа, выбирая компонент из палитры при нажатой клавише Shift. В этом случае вокруг компонента появляется п ямоугольник, окружающий этот компонент. После этого каждый щелчок мышью на фо ме приводит к появлению на ней копии компонента. Закончив режим многократного копирования, следует щелкнуть мышью на инструменте выбора курсора (первая кнопка на палитре компонентов с изображением стрелки).

Выравнивание компонентов

Для выравнивания компонентов на форме можно использовать следующие комбинации клавиш:

Shift + стрелки

Изменяет размер компонента на один пиксел в направлении выбранной стрелки

Shift + Ctrl + стрелки

Перемещает компонент на одну единицу сетки в направлении выбранной стрелки

Ctrl + стрелки

Перемещает компонент на один пиксел в направлении выбранной стрелки

Можно также выровнять компоненты, используя пункт меню View/Alignment Palette. Для этого нужно:

  1. Выбрать компоненты для выравнивания.

  2. Выбрать пункт меню View/Alignment Palette.

  3. Выбрать нужную кнопку (см. рис. 5).

Рис.5 Выравнивание компонентов с помощью View/Alignment Palette

Можно выровнять компоненты, используя пункт меню Edit/Align. Для этого нужно:

  1. Выбрать компоненты для выравнивания.

  2. Выбрать пункт меню Edit/Align. Появится диалоговое окно Alignment.

  3. Выбрать нужную опцию и нажать на кнопку OK (рис 6).