Вопрос № 178204: огромная просьба! помогите с решением задач из лабораторной, в делфи я полный ноль! Текст лабораторной в приложении, а задания вот: 1. Сохранение данных блокнота. a) Модифицируйте код приложения так, чтобы вопрос «Сохранить изменения?» появлял...
Вопрос № 178204:
огромная просьба! помогите с решением задач из лабораторной, в делфи я полный ноль! Текст лабораторной в приложении, а задания вот: 1. Сохранение данных блокнота. a) Модифицируйте код приложения так, чтобы вопрос «Сохранить изменения?» появлялся только, если данные блокнота были изменены. b) После щелчка по системной кнопке закрытия формы (крестик в правом верхнем углу формы), форма закрывается без предупреждения о необходимости сохранить данные блокнота. Исправьте этот недостаток. 2. Считывание
данных в блокнот. a) При запуске приложения страницы заполняются данными из файлов. b) Создайте модальное окно выбора папки для сохранения (и считывания) данных блокнота. Модифицируйте код приложения так, чтобы при запуске появлялось модальное окно для выбора папки, в которой хранятся данные. Примечание. Используйте компоненты DriveComboBox, DirectoryListBox, FileListBox, FilterComboBox со страницы Win 3.1 палитры компонентов. 3. Данные блокнота хранятся
в восьми файлах – это не является рациональным с точки зрения компактности данных. Продумайте структуру файла для хранения записей блокнота и внесите необходимые изменения в программный код.
procedure TFormvubor.Button1Click(Sender: TObject); var i: integer; TempComponent: TListBox; f: TextFile; dir, s, s1: string; begin dir:= FileListBox1.Directory + '\NoteBook.ttxt'; // Получаем полный путь к файлу if not FileExists(dir) then // Проверяем существование файла begin ShowMessage('Файл блокнота не найден!'); // Показ окна с сообщением exit; // Выход из процедуры
end; AssignFile(f, dir); // Связали файловую переменную с файлом Reset(f); // Встали на начало файла while not eof(f) do // Делаем пока не дойдём до конца файла begin Readln(f, s); // Считали строку из файла s1:= copy(s, 1, 5); // Скопировали первые 5 символов из строки if s1 = '[Page' then // Если это метка номера страницы делаем begin i:= StrToInt(copy(s, 6, 1)); // Получил
и номер страницы With NoteBookF do // Делаем для основной формы begin TempComponent:= TListBox(FindComponent('ListBox' + IntToStr(i))); // Нашли нужный listbox Readln(f, s); // Считали строку из файла s1:= copy(s, 1, 5); // Скопировали первые 5 символов из строки while s1 <> '[Page' do // Пока недойдём до следущей метки страницы делаем begin
TempComponent.Items.Add(s); // Добавляем строку в listbox Readln(f, s); // Считали строку из файла s1:= copy(s, 1, 5); // Скопировали первые 5 символов из строки end; end; end; end; CloseFile(f); // Закрыли файл Close; // Закрыли форму end;
procedure TFormvubor.Button2Click(Sender: TObject); begin NoteBookF.SaveAll; // Вызов процедуры сохран
ения в файл Close; // Закрыли форму Button2.Visible:= false; // Спрятали кнопку end;
var NoteBookF: TNoteBookF; modif: Boolean; {переменная хранящая изменение блокнота}
implementation
uses vubor;
{$R *.dfm}
procedure TNoteBookF.SaveAll; var i, j: integer; TempComponent: TListBox; f: TextFile; // переменная для работы с текстовым файлом begin dir:= Formvubor.FileListB
ox1.Directory + '\NoteBook.ttxt'; // Получаем полный путь к файлу AssignFile(f, dir); // Связали файловую переменную с файлом Rewrite(f); // Открыли файл для перезаписи for i:= 0 to 7 do // проходим все страницы блокнота begin NoteBook1.PageIndex:= i; // Активная страница блокнота TempComponent:= TListBox(FindComponent('ListBox' + IntToStr(i + 1))); // Нашли компонент listbox Writeln(f, '[Page' + IntToStr(i + 1) + ']');
// Записали метку номера страницы for j:= 0 to TempComponent.Items.Count - 1 do Writeln(f, TempComponent.Items.Strings[j]); // записали содержтмое listbox в файл end; CloseFile(f); // Закрыли файл end;
procedure TNoteBookF.FormCreate(Sender: TObject); begin TabSet1.Tabs:= NoteBook1.Pages; {копируем содержимое свойства Pages компонента NoteBook в свойство Tabs компонента TabSet} TabSet1.TabIndex:= No
teBook1.PageIndex; {Независимо от того, какая страница блокнота активна во время проектирования (свойство ActivePage) будет выбрана соответствующая этой странице закладка} end;
procedure TNoteBookF.AddBtnClick(Sender: TObject); var TempComponent: TListBox; {введем вспомогательную переменную} begin TempComponent:= TListBox(FindComponent('ListBox' + IntToStr(Notebook1.PageIndex + 1))); {TListBox(<компонент>) используется для преобразования к типу TListBox} if
RecordEdt.Text <> '' then TempComponent.Items.Add(RecordEdt.Text); RecordEdt.Text:= ''; modif:= true; end;
procedure TNoteBookF.TabSet1Click(Sender: TObject); begin NoteBook1.PageIndex:= TabSet1.TabIndex; {страница блокнота и страница набора закладок должны совпадать} end;
procedure TNoteBookF.CloseBtnClick(Sender: TObject); begin Close; {Закрыли приложение} end;
procedure TNoteBookF.Cha
ngeBtnClick(Sender: TObject); var TempComponent: TListBox; {введем вспомогательную переменную} begin TempComponent:= TListBox(FindComponent('ListBox' + IntToStr(Notebook1.PageIndex + 1))); {TListBox(<компонент>) используется для преобразования к типу TListBox} if RecordEdt.Text <> '' then TempComponent.Items.Strings[TempComponent.ItemIndex]:= RecordEdt.Text; // Записали данные в listbox modif:= true; // идентифокатор модификации блокнота end;
procedure
TNoteBookF.DeleteBtnClick(Sender: TObject); var TempComponent: TListBox; {введем вспомогательную переменную} i: integer; begin TempComponent:= TListBox(FindComponent('ListBox' + IntToStr(Notebook1.PageIndex + 1))); {TListBox(<компонент>) используется для преобразования к типу TListBox} i:= TempComponent.ItemIndex; // Сохранили номер выделнной строки TempComponent.Items.Delete(i); // Удалили выде
ленную строку TempComponent.ItemIndex:= i; // Выделили следующую запись RecordEdt.Text:= TempComponent.Items.Strings[i]; //
Записали выделенную запись в поле редактирования modif:= true; end;
procedure TNoteBookF.ClearBtnClick(Sender: TObject); var i: integer; TempComponent: TListBox; {введем вспомогательную переменную} begin for i:= 1 to 8 do begin {Очищаем все listbox} TempComponent:= TListBox(FindComponent('ListBox' + IntToStr(i))); // Нашли активный listbox TempComponent.Clear; // Очищаем весь listbox end; modif:= true; end;
procedure
TNoteBookF.ListBox1Click(Sender: TObject); var TempComponent: TListBox; {введем вспомогательную переменную} begin TempComponent:= TListBox(FindComponent('ListBox' + IntToStr(Notebook1.PageIndex + 1))); {TListBox(<компонент>) используется для преобразования к типу TListBox} RecordEdt.Text:= TempComponent.Items.Strings[TempComponent.ItemIndex]; // Записали выделенную запись в поле редактирования end;
procedure TNoteBook
F.RecordEdtKeyPress(Sender: TObject; var Key: Char); begin if key = #13 then AddBtn.Click; // Если нажата клавиша ввод, добавляем запись в блокнот end;
procedure TNoteBookF.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if modif then // Если делались изменения в блокноте выдаём диалог с вопросом о сохранениии if MessageDlg('Сохранить изменения?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin // Ответили да Formvubor.Button2.Visible:=
true; // Сделали видемую кнопку "Сохранить" Formvubor.ShowModal; // Показать форму выбора папки end; end;
procedure TNoteBookF.FormShow(Sender: TObject); begin Formvubor.ShowModal; // Перед показом основной форму, показываем форму выбора папки end;
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.