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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2013, 20:57   #1
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию Перестановка столбцов в StringGrid (Delphi)

Доброго времени суток!
Подскажите как реализовать это через цикл, если допустим будем иметь 10 столбцов ( не считая нулевого).
Я смог написать код только для замены 1 и 2 столбца, как цикл к этому привязать, пока не знаю.


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 s: String;
begin
 with StringGrid1 do
   for I := 0 to RowCount - 1 do
   begin
     s := Cells[1, i];
     Cells[1, i] := Cells[2, i];
     Cells[2, i] := s
   end
end;

end.
ShaoKhan вне форума Ответить с цитированием
Старый 06.03.2013, 21:04   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
for j:=0 to ColCount-2 do
   for I := 0 to RowCount - 1 do
   begin
     s := Cells[j, i];
     Cells[j, i] := Cells[j+1, i];
     Cells[j+1, i] := s
   end
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.03.2013, 21:08   #3
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Код:
for j:=0 to ColCount-2 do
   for I := 0 to RowCount - 1 do
   begin
     s := Cells[j, i];
     Cells[j, i] := Cells[j+1, i];
     Cells[j+1, i] := s
   end

Так не пойдёт

Получается, что цифры забитые в массиве просто сдвигаются влево.
ShaoKhan вне форума Ответить с цитированием
Старый 06.03.2013, 21:16   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Так а Вам какой-то порядок перестановки нужен? В задаче этого не сказано... А так как цикл у Вас и так изначально привязан, вообще непонятен сам вопрос. Жажду конкретики
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.03.2013, 22:14   #5
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Как говорится: Шарик - ты балбес =)

Нужно поменять местами столбцы чётные с нечётными, т.е. в нашем случае 1 с 2 , 3 с 4, 5 с 6 и так далее.
ShaoKhan вне форума Ответить с цитированием
Старый 06.03.2013, 22:17   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Нужно поменять местами столбцы чётные с нечётными, т.е. в нашем случае 1 с 2 , 3 с 4, 5 с 6 и так далее.
Ну вот и долгожданная конкретика

Меняем код:

Код:
j:=0;
while j<=ColCount-2 do begin
   for I := 0 to RowCount - 1 do
   begin
     s := Cells[j, i];
     Cells[j, i] := Cells[j+1, i];
     Cells[j+1, i] := s
   end
   j:=j+2;
end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.03.2013, 22:26   #7
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Ну вот и долгожданная конкретика

Меняем код:

Код:
j:=0;
while j<=ColCount-2 do begin
   for I := 0 to RowCount - 1 do
   begin
     s := Cells[j, i];
     Cells[j, i] := Cells[j+1, i];
     Cells[j+1, i] := s
   end
   j:=j+2;
end;


Огромнейшее спасибо!
Только надо было j:=1 , что бы не прыгал в нулевой столбец!
Ещё раз СПАСИБО!
ShaoKhan вне форума Ответить с цитированием
Старый 07.03.2013, 00:14   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если столбцы целиком нужно менять, то можно ещё таким ("извращённым") способом воспользоваться:
Код:
procedure TForm4.Button1Click(Sender: TObject);
var i,k:integer;
begin
  k := StringGrid1.ColCount + 1;
  for i := 1 to (StringGrid1.ColCount - 1) div 2 do begin
    StringGrid1.Cols[k] := StringGrid1.Cols[(i-1)*2+1];
    StringGrid1.Cols[(i-1)*2+1] := StringGrid1.Cols[(i-1)*2+2];
    StringGrid1.Cols[(i-1)*2+2] := StringGrid1.Cols[k]
  end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестановка столбцов в матрице. Тони003 Помощь студентам 2 15.09.2012 20:10
Перестановка столбцов матрицы по заданному ключу Pretty_girl_666 Помощь студентам 9 17.08.2011 00:31
[ C/C++ ] Перестановка строк и столбцов zord Помощь студентам 2 18.11.2009 12:20
Перестановка столбцов bagfinder Паскаль, Turbo Pascal, PascalABC.NET 1 25.06.2009 19:28
Перестановка столбцов матрицы и строки. MaGWaY_minsk Помощь студентам 3 06.02.2009 00:55