Показать сообщение отдельно
  #6  
Старый 28.07.2012, 14:18
Pcrepair
 
Сообщения: n/a
По умолчанию

вот что получилось в результате, правда пришлось ввести ГлобПерем в качестве буфера. некоторые считают что так неправильно. сразу встречный вопрос - как правильно?

Код:
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.
Ответить с цитированием