Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306
1

Копирование столбцов из SGrid1 в SGrid2

18.07.2015, 01:08. Показов 1108. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. На форме расположено несколько StringGridов размерностью 6х6. Как скопировать последний столбец 1-го stringgrid в первый столбец 2-го stringgrid.
Delphi
1
2
3
4
5
6
Stringgrid2.Cell[0,0]:=Stringgrid1.Cells[5,0];
Stringgrid2.Cell[0,1]:=Stringgrid1.Cells[5,1];
Stringgrid2.Cell[0,2]:=Stringgrid1.Cells[5,2];
Stringgrid2.Cell[0,3]:=Stringgrid1.Cells[5,3];
Stringgrid2.Cell[0,4]:=Stringgrid1.Cells[5,4];
Stringgrid2.Cell[0,5]:=Stringgrid1.Cells[5,5];
Сохраняется только последний результат - а 1-е нули (((
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2015, 01:08
Ответы с готовыми решениями:

Копирование столбцов
Здравствуйте! Ситуация такая. У меня есть текстовый файл примерно такого вида: 11 21 31 41 12 22...

Копирование столбцов бд
Доброй ночи)Имеется Таблица1, в ней 10 столбцов, 3 первых-столб1 столб2 столб3 нужно копирывать в ...

Копирование данных столбцов
Добрый день! Существует столбец А содержащий следующие данные: Текст1 Пробел Пробел Текст2...

Копирование столбцов с формулами
Здравствуйте. У меня возник такой вопрос... есть таблица на одном листе которой есть 3 столбца...

10
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,252
18.07.2015, 01:24 2
Цитата Сообщение от maksmkv Посмотреть сообщение
Как скопировать последний столбец 1-го stringgrid в первый столбец 2-го stringgrid
Именно так как в этом коде, если последний столбец 1-го stringgrid имеет индекс 5.
Цитата Сообщение от maksmkv Посмотреть сообщение
Сохраняется только последний результат
А вот тут нужно уже привести код более подробно. Этот обрывок кода слишком мал.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
18.07.2015, 07:32 3
Лучший ответ Сообщение было отмечено maksmkv как решение

Решение

Delphi
1
Stringgrid2.Cols[0].Text:= Stringgrid1.Cols[5].Text
1
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306
18.07.2015, 11:14  [ТС] 4
В продолжение темы, есть опять же 24 StringGrid. Как занулить их все ??? Вот мой код для 2-х, но их 24. Спасибо
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.FormCreate(Sender: TObject);
var i,ii,j,n : integer;
begin
  for i:=1 to 8 do
  for j:=1 to 8 do
 
  with StringGrid8 do begin
  //StringGrid8.Font.Color:=RGBtocolor(255, 255, 255);
  If Trim(StringGrid8.Cells[j-1, i-1])= '' Then StringGrid8.Cells[j-1, i-1] := '0';
  end;
 
  with StringGrid16 do begin
//  StringGrid16.Font.Color:=RGBtocolor(255, 255, 255);
  If Trim(StringGrid16.Cells[j-1, i-1])= '' Then StringGrid16.Cells[j-1, i-1] := '0';
  end;
 
 
end;
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
18.07.2015, 11:33 5
Лучший ответ Сообщение было отмечено maksmkv как решение

Решение

Delphi
1
2
3
4
5
for k := 1 to 24 do
for i:=1 to 8 do
for j:=1 to 8 do
If Trim(TStringgrid(FindComponent('Stringgrid'+inttostr(k))).Cells[j-1,i-1])= ''
Then  TStringgrid(FindComponent('Stringgrid'+inttostr(k))).Cells[j-1,i-1]:= '0';
1
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306
18.07.2015, 11:53  [ТС] 6
Я идею правильно понял, а вот до такого кода не получилось нормально довести. Спасибо

Добавлено через 6 минут
Последнее с чем столкнулся - вот применил код копирования ячеек, который был описан выше (код отлично работает), но после копирования в ячейке не поменять значение с 1 на 0 и наоборот - видимо свойство text меняет функцию закрашивания:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  sg : TStringGrid;
  Col, Row : Integer;
begin
  sg := Sender as TStringGrid;
  //Определяем координаты ячейки, на которой произошёл щелчок мыши.
  sg.MouseToCell(X, Y, Col, Row);
  //Если произошёл щелчок левой кнопкой мыши - устанавливаем флаг.
  if Button = mbLeft then begin
    //Под видом указателя на объект, который связан с ячейкой, записываем
    //значение флага. Значение флага, равное 1, означает, что цвет ячейки изменён.
    sg.Rows[Row].Objects[Col] := TObject(1); //Или: := Pointer(1);
    sg.Cells[col,row]:='1';   //значение 1
 
    //Если произошёл щелчок правой кнопкой мыши - сбрасываем флаг.
  end else if Button = mbRight then begin
    sg.Rows[Row].Objects[Col] := TObject(0); //Или: := Pointer(0);
    sg.Cells[col,row]:='0'; //значение 0
  end;
end;
 
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
type
  TSave = record
    FontColor : TColor;
    FontStyle : TFontStyles;
    BrColor : TColor;
  end;
var
  sg : TStringGrid;
  Save : TSave;
  Flag : Integer;
begin
  sg := Sender as TStringGrid;
  //Читаем значение флага, которое записано под видом указателя на объект.
  Flag := Integer(sg.Rows[ARow].Objects[ACol]);
  //Если флаг не равен 1 - выходим.
  if Flag <> 1 then Exit;
  //В противном случае, изменяем цвет ячейки.
  with sg.Canvas, Save do begin
    //Запоминаем параметры шрифта и кисти.
    FontColor := Font.Color;
    FontStyle := Font.Style;
    BrColor := Brush.Color;
    //Устанавливаем новые парметры.
    //Цвет шрифта - белый.
    Font.Color := RGBtocolor(255, 255, 255);
    //Стиль шрифта - жирный.
    Font.Style := Font.Style + [fsBold];
    //Цвет кисти - коричневый.
    Brush.Color := RGBtocolor(207, 20, 36);
    //Прорисовываем ячейку.
 
    //Заливаем квадрат ячейки цветом кисти.
    FillRect(aRect);
    //Прорисовываем в ячейке текст. Здесь +2 - так мы задаём ширину полей в ячейке.
    TextOut(aRect.Left + 2, aRect.Top + 2, Sg.Cells[ACol, ARow]);
 
    //Восстанавливаем прежние параметры канвы.
 
    Font.Color := FontColor;
    Font.Style := FontStyle;
    Brush.Color := BrColor;
  end;
       DrawTable();
end;          
 
......
 
procedure TForm1.DrawTable;
begin      
 Stringgrid16.Cols[0].Text:= Stringgrid8.Cols[7].Text;
  Stringgrid15.Cols[0].Text:= Stringgrid8.Cols[6].Text;
  Stringgrid14.Cols[0].Text:= Stringgrid8.Cols[5].Text;
  Stringgrid13.Cols[0].Text:= Stringgrid8.Cols[4].Text;
  Stringgrid12.Cols[0].Text:= Stringgrid8.Cols[3].Text;
  Stringgrid11.Cols[0].Text:= Stringgrid8.Cols[2].Text;
  Stringgrid10.Cols[0].Text:= Stringgrid8.Cols[1].Text;
  Stringgrid9.Cols[0].Text:= Stringgrid8.Cols[0].Text; 
end;
С чем может быть это связано??? (P.S. Ячейки все закрыты от редактирования - мне не надо их редактировать )руками.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
18.07.2015, 12:45 7
Цитата Сообщение от maksmkv Посмотреть сообщение
но после копирования в ячейке не поменять значение с 1 на 0 и наоборот
Это почему? И при чем здесь закрашивание?

Добавлено через 6 минут
Пройдитесь по таблице и замените 0 на 1
Pascal
1
2
3
4
5
6
7
procedure TForm1.Button2Click(Sender: TObject);
var i,j:byte;
begin
for i:=1 to 8 do
for j:=1 to 8 do
If Stringgrid1.Cells[j-1,i-1])= '0'Then Stringgrid1.Cells[j-1,i-1]):='1';
end;
А потом уж раскрашивайте.
0
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306
18.07.2015, 13:56  [ТС] 8
Приложил исходник. Т.е. если нажимать на 2-й строке Stringgrid - не меняется значения, а в 1-й все ок
Вложения
Тип файла: rar Проект.rar (2.03 Мб, 4 просмотров)
0
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306
23.07.2015, 14:36  [ТС] 9
(((
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.07.2015, 14:41 10
Если пишете в Lazarus, то в том разделе и создавайте темы.
0
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306
23.07.2015, 23:53  [ТС] 11
Да я на самом деле специально написал в delphi , т.к. в принципе компонент очень похож и все функции есть в delphi. Написал в раздел сюда, т.к. аудитория больше. Можете посмотреть исходник??? Проблема описана выше. Спасибо
0
23.07.2015, 23:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2015, 23:53
Помогаю со студенческими работами здесь

Копирование ширины столбцов таблицы
В Excel такое можно сделать через специальную вставку, а как в ворде? MS Office 2010

Копирование столбцов в несколько StringGrid
Серия вопросов, выпуск 3,141592... Всем доброго дня и хорошего настроения. Очередной вопрос: Есть...

Копирование столбцов из одной таблицы в другую.
В БД у меня есть 2 таблицы tabl1 и tabl2. В tabl1 поля: a, a1, a2, a3; В tabl2 Поля: b, a1, a2,...

Копирование столбцов с одного листа на другой
Здравствуйте! Помогите пожалуйста с написанием макроса. Необходимо что бы макрос копировал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru