вот что получилось в результате, правда пришлось ввести ГлобПерем в качестве буфера. некоторые считают что так неправильно. сразу встречный вопрос - как правильно?
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Buffer:TStringList; (*ГлобПерем для хранения строк-пар*)
implementation
{$R *.dfm}
(*=======================================================*)
(* 28 июля 2012г. сортировка пары текст=число*)
(* ПРОЦ накопление строк в буфере*)
procedure TForm1.Button1Click(Sender: TObject);
var
T1: TStringList;
Text:string; Number:integer;
(* встроенная в процедуру функция. сшивает две ПЕРЕМ в одну *)
function AddUrl(const A:string; const B:integer):TStringList;
begin
AddUrl:=TStringList.Create;
AddUrl.AddObject(Text,Pointer(Number));
end;
(*ввод пар в накопитель*)
begin
T1:=TStringList.Create;
Number:=StrToInt(Edit1.Text); (*ввод числа*)
Text:=Edit2.Text; (*ввод текста*)
T1:=AddUrl(Text,Number); (*сборка двух ПЕРЕМ в одну*)
Buffer.AddStrings(T1); (*накопление строк в ГлобПерем*)
Memo1.Text:=Buffer.text; (*контроль*)
T1.Free;
end;
(*=====================================================*)
(*=====================================================*)
(* ПРОЦ сортировка строк из ГлобПерем*)
procedure TForm1.Button2Click(Sender: TObject);
var
T: TStringList;
function Compare(List: TStringList; Index1, Index2: Integer): Integer;
begin
if Integer(List.Objects[Index1])>Integer(List.Objects[Index2]) then Result:=-1
(* сейчас сортировка - максимум наверху, если 1 а далее -1 тогда наверху минимум*)
else if Integer(List.Objects[Index1])<Integer(List.Objects[Index2]) then Result:=1
else Result:=0;
end;
begin
T:=TStringList.Create;
T.AddStrings(Buffer); (*ввод накопленных пар*)
T.CustomSort(@Compare); (*сортировка от 1 до максимума*)
Memo2.Lines.Assign(T); (*контроль*)
T.Free;
end;
(*====================================================*)
(*инизиализация буфера при запуске программы*)
procedure TForm1.FormCreate(Sender: TObject);
begin
Buffer:=TStringList.Create;
end;
end.