
Снежинкам / Пример String
.docunit Fview;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Menus;
type TForml = class(TForm)
Bevel1: TBeve1;
Memo1: TMemo;
MainMenul: TMainMenu;
Filel: TMenuItem;
Openl: TMenuItem;
N1: TMenuItem;
Save1: TMenuItern;
SaveAs1: TMenuItem;
N2: TMenuItem;
Exit1: TMenuItem;
Panel1: TPanel;
Button1: TButton;
RadioButtonl: TRadioButton;
RadioButton2: TRadioButton;
OpenDialogl: TOpenDialog;
SaveDialogl: TSaveDialog;
procedure OpenlClick(Sender: TObject);
procedure SavelClick(Sender: TObject);
procedure SaveAslClick(Sender: TObject);
procedure RadioButtonlClick(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure ButtonlClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ExitlClick(Sender: TObject);
private
{ Private declarations }
sortMode: boolean; { true для сортировки по возрастанию, a false - по убыванию }
public
{ Public declarations }
end;
{ Новый класс StringList, поддерживающий сортировку как по возрастанию, так и по убыванию }
TNewStringList = class(TStringList)
public
procedure Sortup; { метод, реализующий сортировку по возрастанию }
procedure Sortdn; { метод, реализующий сортировку по убыванию }
procedure Reverse; { метод, обеспечивающий изменение порядка строк в списке }
end;
var
Forml: TForml;
implementation
{$R *.DFM}
procedure TForml.OpenlClick(Sender: TObject);
begin
{ вызвать стандартный OpenDialog для получения требуемого файла }
if OpenDialogl.Execute then begin
Memo1.Lines.LoadFromFile(OpenDialogl.FileName);
{ Загрузить мемо из файла }
SaveDialog1.FileName := OpenDialogl.FileName;
{ Определить имя файла для сохранения }
Caption := OpenDialogl.FileName;
{ Установить заголовок формы }
end;
end;
procedure TForm1.Save1Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile(SaveDialogl.FileName);
{ Сохранить мемо в файл }
end;
procedure TForm1.SaveAs1Click(Sender: TObject);
Begin
if SaveDialogl.Execute then { Разрешить пользователю выбрать имя файла для сохранения }
begin
Memo1.Lines.SaveToFile(SaveDialogl.FileName); { Сохранить в файл с новым именем }
Caption := SaveDialogl.FileName; { Установить новый заголовок формы }
OpenDialogl.FileName := Caption; { Установить новое имя в OpenDialog }
end;
end;
{ определение функций и процедур для нового класса строк }
procedure TNewStringList.Sortup;
begin
Sorted := true; { просто установить свойство Sorted из TStringList }
end;
procedure TNewStringList.Sortdn;
begin
Sorted := true; { установить свойство Sorted для сортировки по возрастанию }
Reverse; { и затем вызвать Reverse для изменения порядка следования строк в списке }
end;
procedure TNewStringList.Reverse;
var
i: integer;
lc: integer;
begin
lc := Count div 2; { это количество перестановок, которые необходимо выполнить }
for i := 0 to lc - 1 do
begin
exchange(i, Count - 1 - i); {ну это совсем просто }
end;
end;
procedure TForm1.RadioButtonlClick(Sender: TObject);
begin
sortMode := true; { записать изменение в sortMode }
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
sortMode := false; { записать изменение в sortMode }
end;
procedure TForml.ButtonlClick(Sender: TObject);
var
ts: TNewStringLis t;
begin
if sortMode = true then begin
ts := TNewStringList.Create; { создать новый экземпляр списка строк }
ts.assign(Memol.Lines); { скопировать содержимое мемо в список строк }
ts.Sortup; { сортировать по возрастанию }
Memo1.Lines.Assign(ts); { присвоить результаты сортировки в мемо }
ts.free; { разрушить рабочий объект }
end else begin
ts := TNewStringList.Create;
ts.assign(Memol.Lines);
ts.Sortdn; { данный вызов - это единственное отличие сортировки по убыванию }
Memo1.Lines.Assign(ts);
ts.free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{ соответствующим образом проинициализировать }
RadioButton1.Checked := true;
RadioButton1Click(Sender); { установить начальное состояние в сортировку по возрастанию }
end;
procedure TForm1.ExitlClick(Sender: TObject);
begin
halt; { завершить программу }
end;
end.