![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сортировка StringGrid [D7]
Roman_S © (2007-04-14 08:17:00)Нашёл несколько примеров сортировки StringGrid. Но как сделать это при клике по заголовку колонки? Или как мышью выбрать определённую колонку (не строку)?
Roman_S (2007-04-14 10:31:00) [1]В ComboBox записывал завания столбцов!
Roman_S (2007-04-14 10:30:00) [2]Всё разобрался, спасибо!
SortStringGrid(StringGrid1, ComboBox.ItemIndex+1), а не SortStringGrid(StringGrid1, ComboBox.ItemIndex)!
ЮЮ (2007-04-14 09:30:00) [3]Воспользовался приведенным кодом:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
SortStringGrid(StringGrid1, 1);
end;
И Москва оказывается выше, чем Харьков.
Может твой Харьков с Икса начинается, а не с Хэ?
Roman_S (2007-04-14 09:20:00) [4]Нашёл несколько примеров сортировки StringGrid.:-)
Появился ещё вопрос: как сортировать записи - слова.
Воспользовался следующим кодом:
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
const
// Define the Separator
TheSeparator = '@';
var
CountItem, I, J, K, ThePosition: integer;
MyList: TStringList;
MyString, TempString: string;
begin
// Give the number of rows in the StringGrid
CountItem := GenStrGrid.RowCount;
//Create the List
MyList := TStringList.Create;
MyList.Sorted := False;
try
begin
Application.ProcessMessages;
for I := 0 to (CountItem - 1) do
begin
MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator + GenStrGrid.Rows[I].Text);
end;
Application.ProcessMessages;
//Sort the List
Mylist.Sort;
for K := 1 to Mylist.Count do
begin
Application.ProcessMessages;
//Take the String of the line (K – 1)
MyString := MyList.Strings[(K - 1)];
//Find the position of the Separator in the String
ThePosition := Pos(TheSeparator, MyString);
TempString := '';
{Eliminate the Text of the column on which we have sorted the StringGrid}
TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
MyList.Strings[(K - 1)] := '';
MyList.Strings[(K - 1)] := TempString;
end;
Application.ProcessMessages;
// Refill the StringGrid
for J := 0 to (CountItem - 1) do
GenStrGrid.Rows[J].Text := MyList.Strings[(J)];
end;
finally
//Free the List
MyList.Free;
end;
end;
Но Москва оказывается ниже, чем Харьков!