Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 11:55   #1
GaleI
 
Регистрация: 29.03.2012
Сообщений: 8
По умолчанию Сортировка в StringGride (поправить)

Код:
procedure TReportFiles.SgSort(aSg : TStringGrid; const aCol : Integer);
var
  SlSort, SlRow : TStringList;
  i, j : Integer;
    n:integer;
  st,st1: string;
begin
  SlSort := TStringList.Create;
  for i := aSg.FixedRows to aSg.RowCount - 1 do begin
    SlRow := TStringList.Create;
    SlRow.Assign(aSg.Rows[i]);
    SlSort.AddObject(aSg.Cells[aCol, i], SlRow);
  end;
  SlSort.Sort;
  j := 0;
  for i := aSg.FixedRows to aSg.RowCount - 1 do begin
    SlRow := Pointer(SlSort.Objects[j]);
    aSg.Rows[i].Assign(SlRow);
    SlRow.Free;
    Inc(j);
  end;
  SlSort.Free;
  Ass;
  {n:=ReportFiles.StringGrid1.RowCount;
  for i:=0 to n-1 do
  if (pos('Том',ReportFiles.StringGrid1.Cells[0,i])<>0) and
     (pos('Том',ReportFiles.StringGrid1.Cells[0,i+1])<>0)
     then
     begin
      if WordToNumber(i)>WordToNumber(i+1) then
      swap(i,i+1); end;}
end;
 
function TReportFiles.WordToNumber(i: integer): double;
var
  st,st1:string;
  pus1,pus2,p,t:integer;
begin
  st:=ReportFiles.StringGrid1.Cells[1,i];
  pus1:=pos(' ',st);
  st[pus1]:='*';
  pus2:=pos(' ',st)-1;
  //p:=pus2-pus1;
  //st1:=copy(st,pus1+1,p);
 
  //p := pos(' ', st) - 1;
  if st[pus2] = '.' then
    p := pus2 - pus1 - 1
  else
    p := pus2 - pus1;
  st1:=copy(st,pus1+1,p);
  if pos('.',st1) <> 0 then
    begin
 
  t :=pos('.',st1);
  st1[t]:=',';
  end;
  result:=strtofloat(st1);
end;
 
procedure TReportFiles.swap(x, y: integer);
begin
  TStringGridX(ReportFiles.StringGrid1).MoveRow(x - 1, y - 1);
end;
 
Procedure TReportFiles.Ass;
var
  n,i,j:integer;
  st,st1: string;
 
begin
  n:=ReportFiles.StringGrid1.RowCount;
  for i:=0 to n-1 do
  if (pos('Том',ReportFiles.StringGrid1.Cells[1,i])<>0) and
     (pos('Том',ReportFiles.StringGrid1.Cells[1,i+1])<>0)
     then
     begin
      if WordToNumber(i)>WordToNumber(i+1) then
      swap(i,i+1); end;
end;
 
procedure TStringGridX.MoveColumn(FromIndex, ToIndex: Integer);
begin
  inherited;
end;
 
procedure TStringGridX.MoveRow(FromIndex, ToIndex: Integer);
begin
   inherited;
end;
 
procedure TReportFiles.Button3Click(Sender: TObject);
begin
  Sgsort( StringGrid1, StrToIntDef(inttostr(1),0));
end;

_______________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
_______________


сортировать нужно строки массива по первому сстолбцу
Безымянный1.JPG

Последний раз редактировалось Serge_Bliznykov; 31.03.2012 в 15:23.
GaleI вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа на stringgride Kazakhstan Общие вопросы Delphi 1 31.01.2012 19:01
СТРУКТУРА=))) ПОПРАВИТЬ НА С++ Мальvina Помощь студентам 1 20.12.2010 21:34
Сортировка по возрастанию в Stringgride Китти Помощь студентам 2 22.12.2009 23:42
вопрос по StringGride Dimati87 Общие вопросы Delphi 1 15.07.2009 07:57
Помогите с сортировкои в stringgride? aks Помощь студентам 3 16.03.2009 07:31