Сортировка по содержимому нужного столбца в TStringGridDelphi , Синтаксис , СортировкаСортировка по содержимому нужного столбца в TStringGridunit olimp_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(TForm) Tabl: TStringGrid; Button1: TButton; Label1: TLabel; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormActivate(Sender: TObject); begin tabl.Cells[0, 0] := 'Страна'; tabl.Cells[1, 0] := 'Золотых'; tabl.Cells[2, 0] := 'Серебряных'; tabl.Cells[3, 0] := 'Бронзовых'; tabl.Cells[4, 0] := 'Всего'; tabl.Cells[5, 0] := 'Баллов'; tabl.Cells[0, 1] := 'Австралия'; tabl.Cells[0, 2] := 'Белоруссия'; tabl.Cells[0, 3] := 'Великобритания'; tabl.Cells[0, 4] := 'Германия'; tabl.Cells[0, 5] := 'Италия'; tabl.Cells[0, 6] := 'Китай'; tabl.Cells[0, 7] := 'Корея'; tabl.Cells[0, 8] := 'Куба'; tabl.Cells[0, 9] := 'Нидерланды'; tabl.Cells[0, 10] := 'Россия'; tabl.Cells[0, 11] := 'США'; tabl.Cells[0, 12] := 'Франция'; tabl.Cells[0, 13] := 'Япония'; end; procedure TForm1.Button1Click(Sender: TObject); var c, r: integer; // номер колонки и строки таблицы s: integer; // всего медалей у команды p: integer; // очков у команды m: integer; // номер строки с максимальным количеством очков buf: array[0..5] of string; // буфер для обмена строк i: integer; // номер строки используется во время сортировки begin for r := 1 to tabl.rowcount do // обработать все строки begin s := 0; // вычисляем общее кол-во медалей for c := 1 to 3 do if tabl.cells[c, r] <> '' then s := s + StrToInt(tabl.cells[c, r]) else tabl.cells[c, r] := '0'; // вычисляем количество очков p := 7 * StrToInt(tabl.cells[1, r]) + 6 * StrToInt(tabl.cells[2, r]) + 5 * StrToInt(tabl.cells[3, r]); // вывод результата tabl.cells[4, r] := IntToStr(s); // всего медалей tabl.cells[5, r] := IntToStr(p); // очков end; // сортировка таблицы по убыванию в соответствие // с количеством баллов (по содержимому 5-ого столбца) // сортировка методом выбора for r := 1 to tabl.rowcount - 1 do begin m := r; // максимальный элемент - в r-ой строке for i := r to tabl.rowcount - 1 do if StrToInt(tabl.cells[5, i]) > StrToInt(tabl.cells[5, m]) then m := i; if r <> m then begin // обменяем r-ую и m-ую строки таблицы for c := 0 to 5 do begin buf[c] := tabl.Cells[c, r]; tabl.Cells[c, r] := tabl.Cells[c, m]; tabl.Cells[c, m] := buf[c]; end; end; end; end; end.Скачать весь проект Эта проект Delphi использует компонент Код формы содержит два процедура: В процедуре В процедуре
Последняя часть процедуры - это алгоритм пузырьковой сортировки, который сортирует строки grid по счёту в порядке убывания (т.е., с наивысшим счётом первым). Это делается путем сравнения каждого ряда счёта с следующим рядом счёта, обмениванием их если необходимо, и повторением этого процесса до тех пор, пока не будет больше обменов. Вот предложенная улучшение: Вместо реализации алгоритма пузырьковой сортировки вручную можно использовать функциональность сортировки, встроенную в Delphi. Компонент Можно модифицировать процедуру
Эта APPROACH более эффективна и легче поддерживаемая, чем реализация custom sorting алгоритма. В статье описана сортировка TStringGrid по содержимому нужного столбца в Pascal-делопроме Delphi. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Сортировка ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |