С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
Mixer FM
37 / 37 / 6
Регистрация: 28.11.2009
Сообщений: 90
1

Как удалить активную ячейку из Stringgrid

22.01.2010, 20:15. Просмотров 5406. Ответов 7
Метки нет (Все метки)

Здравсвуйте, я сейчас работаю с таблицей StringGrid и у меня возник вопрос: Как удалить активную ячейку из Stringgrid. То есть, например я в Stringgrid выделяю ячейку затем нажимаю на кнопку, и тем самым стока с активной ячейки должна удалиться, при том что все введеные значения имеющиеся ниже удаленной строки должны после удаление поднять вверх, то есть занять место удалено строки.
А так же, если вохмлжно подобным образом реализовать добавление строки.

Буду очень признателен за оказанную помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2010, 20:15
Ответы с готовыми решениями:

Как закрасить ячейку в StringGrid?
А как закрасить ячейку(и) в StringGrid?

Как выделить ячейку в StringGrid?
Задаю таблицу, заполняю, считаю сумму по столбцам, и вот столкнулся с такой...

Как закрасить ячейку в StringGrid?
Мне необходимо чтобы при нажатии bitbtn закрашивались все ячейки в StringGrid в...

Как внедрить checkbox в ячейку StringGrid?
подскажите каким образом можно внедрить checkbox в ячейку stringGrid

Как закрасить определённую ячейку в StringGrid
Как закрасить определённую ячейку черным цветом и чтобы в нее нельзя было...

7
Mawrat
12834 / 5742 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
22.01.2010, 21:27 2
В стандартном компоненте TStringGrid нет методов для удаления строк и столбцов. Вернее удалять/добавлять можно только "крайние" строки и столбцы с помощью изменения свойств RowCount и ColCount. Кроме этого, в TStringGrid нет возможности переносить (менять местами) строки и столбцы программно.
Но эти проблемы разрешимы. На самом деле в объявлении класса TStringGrid в секции Preotected (поля и методы доступные только потомкам класса) имеются два метода:
Delphi
1
2
3
4
5
6
7
8
9
10
  TStringGrid = class(TDrawGrid)
  private
    ...
  protected
    procedure ColumnMoved(FromIndex, ToIndex: Longint); override;
    ...
    procedure RowMoved(FromIndex, ToIndex: Longint); override;
  public
    ...
  end;
С помощью них можно реализовать все требуемые действия. Только предварительно их надо "вытащить" из секции Protected и сделать доступными.
---
Я в свое время наткнулся в инете на эту идею и написал модуль для собственных нужд, где, собственно, это всё и реализовал. Плюс ещё прикрутил процедуру для выравнивания ширины столбцов по их содержимому.
Код удобен тем, что не требуется создавать потомка класса TStringGrid и тем более не надо создавать новый компонент. Достаточно просто вызывать функции, объявленные в секции Interface представленного модуля:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
unit uStrGrUtils;
 
interface
 
uses
  Grids;
 
//**************************************************
//Процедуры для работы с объектом класса TStringGrid или его потомка.
//Вставка, удаление, перемещение строк и столбцов, выравнивание ширины
//столбцов по их содержимому.
//**************************************************
 
//Вставляет новую строку.
procedure InsertRow(aStringGrid : TStringGrid; aToIndex : Longint);
 
//Вставляет новый столбец.
procedure InsertColumn(aStringGrid : TStringGrid; aToIndex : Longint);
 
//Удаляет строку.
procedure DeleteRow(aStringGrid : TStringGrid; aFromIndex : Longint);
 
//Удаляет столбец.
procedure DeleteColumn(aStringGrid : TStringGrid; aFromIndex : Longint);
 
//Переносит строку из одной позиции в другую.
procedure MoveRow(aStringGrid : TStringGrid; aFromIndex, aToIndex : Longint);
 
//Переносит столбец из одной позиции в другую.
procedure MoveColumn(aStringGrid : TStringGrid; aFromIndex, aToIndex : Longint);
 
//Процедура выравнивания ширины столбца по его содержимому.
//Если aDefaultColWidth = -1, то ширина столбца не станет меньшей, чем aStringGrid.DefaultColWidth.
procedure ColumnWidthAlign(aStringGrid: TStringGrid; aColNum : Longword; aDefaultColWidth : Integer = -1);
 
 
implementation
 
 
//**************************************************
// Описание и реализация класса потомка TStringGrid
// в котором реализованы методы вставки, удаления, перемещения для
// строк и столбцов.
//**************************************************
 
type
  TMStringGrid = class(TStringGrid)
  private
  public
    procedure _MoveRow(aFromIndex, aToIndex : Longint);
    procedure _MoveColumn(aFromIndex, aToIndex : Longint);
    procedure _InsertRow(aToIndex : Longint);
    procedure _InsertColumn(aToIndex : Longint);
    procedure _DeleteRow(aFromIndex : Longint);
    procedure _DeleteColumn(aFromIndex : Longint);
  end;
 
procedure TMStringGrid._MoveRow(aFromIndex, aToIndex : Longint);
begin
  RowMoved(aFromIndex, aToIndex);
end;
 
procedure TMStringGrid._MoveColumn(aFromIndex, aToIndex : Longint);
begin
  ColumnMoved(aFromIndex, aToIndex);
end;
 
procedure TMStringGrid._InsertRow(aToIndex : Longint);
begin
  RowCount := RowCount + 1;
  MoveRow(RowCount - 1, aToIndex);
end;
 
procedure TMStringGrid._InsertColumn(aToIndex : Longint);
begin
  ColCount := ColCount + 1;
  MoveColumn(ColCount - 1, aToIndex);
end;
 
procedure TMStringGrid._DeleteRow(aFromIndex : Longint);
begin
  MoveRow(aFromIndex, RowCount - 1);
  //Rows[RowCount - 1].Clear;
  RowCount := RowCount - 1;
end;
 
procedure TMStringGrid._DeleteColumn(aFromIndex : Longint);
begin
  MoveColumn(aFromIndex, ColCount - 1);
  //Cols[ColCount - 1].Clear;
  ColCount := ColCount - 1;
end;
 
//**************************************************
 
procedure InsertRow(aStringGrid : TStringGrid; aToIndex : Longint);
begin
  with aStringGrid as TMStringGrid do begin
    if (aToIndex < FixedRows) or (aToIndex > RowCount) then
      Exit
    ;
    _InsertRow(aToIndex);
  end;
end;
 
procedure InsertColumn(aStringGrid : TStringGrid; aToIndex : Longint);
begin
  with aStringGrid as TMStringGrid do begin
    if (aToIndex < FixedCols) or (aToIndex > ColCount) then
      Exit
    ;
    _InsertColumn(aToIndex);
  end;
end;
 
procedure DeleteRow(aStringGrid : TStringGrid; aFromIndex : Longint);
begin
  with aStringGrid as TMStringGrid do begin
    if (aFromIndex < FixedRows) or  (aFromIndex > RowCount - 1) then
      Exit
    ;
    if (aFromIndex = FixedRows) and (aFromIndex = Pred(RowCount)) then
      Rows[aFromIndex].Clear
    else
      _DeleteRow(aFromIndex)
    ;
  end;
end;
 
procedure DeleteColumn(aStringGrid : TStringGrid; aFromIndex : Longint);
begin
  with aStringGrid as TMStringGrid do begin
    if (aFromIndex < FixedCols) or  (aFromIndex > ColCount - 1) then
      Exit
    ;
    if (aFromIndex = FixedCols) and (aFromIndex = Pred(ColCount)) then
      Cols[aFromIndex].Clear
    else
      _DeleteColumn(aFromIndex)
    ;
  end;
end;
 
procedure MoveRow(aStringGrid : TStringGrid; aFromIndex, aToIndex : Longint);
begin
  with aStringGrid as TMStringGrid do begin
    if (aFromIndex < FixedRows) or  (aFromIndex > RowCount - 1) then
      Exit
    ;
    if (aToIndex < FixedRows) or  (aToIndex > RowCount - 1) then
      Exit
    ;
    _MoveRow(aFromIndex, aToIndex);
  end;
end;
 
procedure MoveColumn(aStringGrid : TStringGrid; aFromIndex, aToIndex : Longint);
begin
  with aStringGrid as TMStringGrid do begin
    if (aFromIndex < FixedCols) or  (aFromIndex > ColCount - 1) then
      Exit
    ;
    if (aToIndex < FixedCols) or  (aToIndex > ColCount - 1) then
      Exit
    ;
    _MoveColumn(aFromIndex, aToIndex);
  end;
end;
 
procedure ColumnWidthAlign(aStringGrid: TStringGrid; aColNum : Longword; aDefaultColWidth : Integer = -1);
var
  RowNum       : Integer;
  ColWidth     : Integer;
  MaxColWidth  : Integer;
begin
  if (aColNum < 0) or (aColNum > Pred(aStringGrid.ColCount)) then
    Exit
  ;
  if aDefaultColWidth < 0 then
    MaxColWidth := aStringGrid.DefaultColWidth
  else
    MaxColWidth := aDefaultColWidth
  ;
  for RowNum := 0 to Pred(aStringGrid.RowCount) do begin
    ColWidth := aStringGrid.Canvas.TextWidth(aStringGrid.Cells[aColNum, RowNum]);
    if MaxColWidth < ColWidth then
      MaxColWidth := ColWidth
    ;
  end;
  //+5 - потому что иногда текст всёже немного не умещается по ширине. :-)
  aStringGrid.ColWidths[aColNum] := MaxColWidth + 5;
end;
 
end.
---
Внимание! В модуле ошибка. Исправленную версию смотрите здесь.
Для исправления сделана замена:
такой код:
Delphi
1
with aStringGrid as TMStringGrid do begin
заменён на такой:
Delphi
1
with TMStringGrid(aStringGrid) do begin
2
Вложения
Тип файла: rar uStrGrUtils.rar (4.0 Кб, 159 просмотров)
Mixer FM
37 / 37 / 6
Регистрация: 28.11.2009
Сообщений: 90
23.01.2010, 10:21  [ТС] 3
Спасибо ОГРОМНОЕ, Mawrat. Это то что нужно. А можете еще подсказать: как я понял в процедуре aToIndex : Longint это и есть те ячейки которые мы или удаляем или добавляем, а как вот определить что aToIndex есть активная ячейка?

Заранее спасибо.
0
Mawrat
12834 / 5742 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
23.01.2010, 13:57 4
Цитата Сообщение от Mixer FM Посмотреть сообщение
как я понял в процедуре aToIndex : Longint это и есть те ячейки которые мы или удаляем или добавляем
Верно. aToIndex - это индекс добавляемого столбца или строки. aFromIndex - индекс удаляемого столбца или строки. Либо в процедурах переноса - aFromIndex, aToIndex - обозначают координаты переноса - взять, строку (или столбец) с индексом aFromIndex и переставить её на позицию (на индекс) aToIndex. При этом нужно не забывать, что строки и столбцы в TStringGrid нумеруются с нуля. Поэтому, наример, строке с индексом равным 3 будет соответствовать 4 сверху строка.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uses
  uStrGrUtils;
...
//Вставить новую строку в позицию 3.
InsertRow(StringGrid1; 3);
 
//Вставить новый столбец в позицию 5
InsertColumn(StringGrid1; 5);
 
//Перенести строку с позиции 3 на позицию 7:
MoveRow(StringGrid1; 3, 7);
 
//Перенести столбец с позиции 10 на позицию 4:
MoveColumn(StringGrid1; 10, 4);
 
//Удалить строку, расположенную на позиции 6:
DeleteRow(StringGrid1; 6);
 
//Удалить стобец, расположенный на позиции 5:
DeleteColumn(StringGrid1; 5);
...
Добавлять строки и столбцы можно также и в конец таблицы. Т. е. например, пускай в нашей таблице имеется 10 строк и 10 столбцов. Т. е. индекс последней (самой нижней) строки и самого правого столбца = 9. Нам надо добавить 11 строку и столбец (их индексы будут = 10) - это делается точно так же как и вставка строки или столбца "внутрь" таблицы:
Delphi
1
2
3
4
5
//Вставить новую строку в позицию 10.
InsertRow(StringGrid1; 10);
 
//Вставить новый столбец в позицию 10.
InsertColumn(StringGrid1; 10);
Цитата Сообщение от Mixer FM Посмотреть сообщение
а как вот определить что aToIndex есть активная ячейка?
Например, пускай нам нужно удалить строку с активной ячейкой. В TStringGrid можно выделять одновременно целую группу ячеек, поэтому может быть однвременно несколько смежных строк, которые содержат выделенные ячейки. Значит нам надо удалить не одну, а несклько строк:
Delphi
1
2
3
4
5
6
7
8
9
10
uses
  uStrGrUtils;
...
var
  RowNum : Integer;
begin
  for RowNum := StringGrid1.Selection.BottomRight.Y downto StringGrid1.Selection.TopLeft.Y do begin
      DeleteRow(StringGrid1, RowNum);
  end;
end;
Аналогично можно удалить все столбцы, содержащие выделенные ячейки:
Delphi
1
2
3
4
5
6
7
8
9
10
uses
  uStrGrUtils;
...
var
  ColNum : Integer;
begin
  for ColNum := StringGrid1.Selection.BottomRight.X downto StringGrid1.Selection.TopLeft.X do begin
      DeleteColumn(StringGrid1, ColNum);
  end;
end;
---
Напомню ещё про один момент. В TStringGrid нельзя удалить строку, если она является единственной нефиксированной строкой. Это же относится и к столбцам. При попытке это сделать произойдёт ошибка.
Этот факт учтён в модуле uStrGrUtils. - При попытке удалить единственную нефиксированную строку (или столбец) эта строка (столбец) не будет удалена, а будет только очищена.
---
И ещё одна особенность. В стандартном компоненте TStringGrid есть один "плавающий" баг. Заключается он в следующем. Пускай, например, у нас имеется таблица с 10 строками и все ячейки содержат какой-то текст. Если теперь мы удалим 5 строк, а затем опять добавим 5 (или больше) строк, то, с некоторой вероятностью в 5 добавленных строках окажутся прежние данные. Т. е. добавятся не пустые строки, а как бы вернутся прежние строки, которые мы ранее удалили. Это связано с тем, что компонент TStringGrid не всегда освобождает память сразу же после удаления строк. Это не означает, что происходят утечки памяти, просто TStringGrid освобождает память, когда удаленных строк накопилось достаточное по его мнению количество. Если же мы добавляем строки, то TStringGrid просто использует свой запас - те, которые "спрятаны" но пока не удалены.
Именно поэтому в коде модуля имеются комадны очистки перед удалением строки или столбца. Но они закомментованы. Их можно (а может и нужно) раскомментовать:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TCSGrid._DeleteRow(aFromIndex : Longint);
begin
  MoveRow(aFromIndex, RowCount - 1);
  //Rows[RowCount - 1].Clear;
  RowCount := RowCount - 1;
end;
 
procedure TCSGrid._DeleteColumn(aFromIndex : Longint);
begin
  MoveColumn(aFromIndex, ColCount - 1);
  //Cols[ColCount - 1].Clear;
  ColCount := ColCount - 1;
end;
Раскомментовав строки в этом коде мы получим гарантию того, что вновь добавленные в таблицу строки будут обязательно пустыми (чистыми).
3
Mixer FM
37 / 37 / 6
Регистрация: 28.11.2009
Сообщений: 90
23.01.2010, 14:21  [ТС] 5
Mawrat, еще Раз Огромное спасибо! За полную информацию по моему вопросу.
0
Mixer FM
37 / 37 / 6
Регистрация: 28.11.2009
Сообщений: 90
23.01.2010, 19:14  [ТС] 6
Mawrat, вы немогли бы еще помощь, сейчас я пробывал воспользоватеся вашим модулем, для примера решил добавить строку. но выходит каждый раз ошибка. Главное и на другие команды тоже самая ошибка. Немогли бы вы для примера, если вас не затруднит написать исходный код для примера добавления строки. А по вашему примеры я разберусь и для отстальных случаев.

Заранее спасибо.
0
Миниатюры
Как удалить активную ячейку из Stringgrid  
Mawrat
12834 / 5742 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
23.01.2010, 20:54 7
Mixer FM, точно... Я когда этот модуль тут решил опубликовать, то заменил способ преобразования типов - с такого: TMStringGrid(aStringGrid) на такой: aStringGrid as TMStringGrid. Поэтому проблема. В общем надо использовать такое преобразование: TMStringGrid(aStringGrid).
Выкладываю исправленный модуль:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
unit uStrGrUtils;
 
interface
 
uses
  Grids;
 
//**************************************************
//Процедуры для работы с объектом класса TStringGrid или его потомка.
//Вставка, удаление, перемещение строк и столбцов, выравнивание ширины
//столбцов по их содержимому.
//**************************************************
 
//Вставляет новую строку.
procedure InsertRow(aStringGrid : TStringGrid; aToIndex : Longint);
 
//Вставляет новый столбец.
procedure InsertColumn(aStringGrid : TStringGrid; aToIndex : Longint);
 
//Удаляет строку.
procedure DeleteRow(aStringGrid : TStringGrid; aFromIndex : Longint);
 
//Удаляет столбец.
procedure DeleteColumn(aStringGrid : TStringGrid; aFromIndex : Longint);
 
//Переносит строку из одной позиции в другую.
procedure MoveRow(aStringGrid : TStringGrid; aFromIndex, aToIndex : Longint);
 
//Переносит столбец из одной позиции в другую.
procedure MoveColumn(aStringGrid : TStringGrid; aFromIndex, aToIndex : Longint);
 
//Процедура выравнивания ширины столбца по его содержимому.
//Если aDefaultColWidth = -1, то ширина столбца не станет меньшей, чем aStringGrid.DefaultColWidth.
procedure ColumnWidthAlign(aStringGrid: TStringGrid; aColNum : Longword; aDefaultColWidth : Integer = -1);
 
 
implementation
 
//**************************************************
// Описание и реализация класса потомка TStringGrid
// в котором реализованы методы вставки, удаления, перемещения для
// строк и столбцов.
//**************************************************
 
type
  TMStringGrid = class(TStringGrid)
  private
  public
    procedure _MoveRow(aFromIndex, aToIndex : Longint);
    procedure _MoveColumn(aFromIndex, aToIndex : Longint);
    procedure _InsertRow(aToIndex : Longint);
    procedure _InsertColumn(aToIndex : Longint);
    procedure _DeleteRow(aFromIndex : Longint);
    procedure _DeleteColumn(aFromIndex : Longint);
  end;
 
procedure TMStringGrid._MoveRow(aFromIndex, aToIndex : Longint);
begin
  RowMoved(aFromIndex, aToIndex);
end;
 
procedure TMStringGrid._MoveColumn(aFromIndex, aToIndex : Longint);
begin
  ColumnMoved(aFromIndex, aToIndex);
end;
 
procedure TMStringGrid._InsertRow(aToIndex : Longint);
begin
  RowCount := RowCount + 1;
  MoveRow(RowCount - 1, aToIndex);
end;
 
procedure TMStringGrid._InsertColumn(aToIndex : Longint);
begin
  ColCount := ColCount + 1;
  MoveColumn(ColCount - 1, aToIndex);
end;
 
procedure TMStringGrid._DeleteRow(aFromIndex : Longint);
begin
  MoveRow(aFromIndex, RowCount - 1);
  Rows[RowCount - 1].Clear;
  RowCount := RowCount - 1;
end;
 
procedure TMStringGrid._DeleteColumn(aFromIndex : Longint);
begin
  MoveColumn(aFromIndex, ColCount - 1);
  Cols[ColCount - 1].Clear;
  ColCount := ColCount - 1;
end;
 
//**************************************************
 
procedure InsertRow(aStringGrid : TStringGrid; aToIndex : Longint);
begin
  with TMStringGrid(aStringGrid) do begin
    if (aToIndex < FixedRows) or (aToIndex > RowCount) then
      Exit
    ;
    _InsertRow(aToIndex);
  end;
end;
 
procedure InsertColumn(aStringGrid : TStringGrid; aToIndex : Longint);
begin
  with TMStringGrid(aStringGrid) do begin
    if (aToIndex < FixedCols) or (aToIndex > ColCount) then
      Exit
    ;
    _InsertColumn(aToIndex);
  end;
end;
 
procedure DeleteRow(aStringGrid : TStringGrid; aFromIndex : Longint);
begin
  with TMStringGrid(aStringGrid) do begin
    if (aFromIndex < FixedRows) or  (aFromIndex > RowCount - 1) then
      Exit
    ;
    if (aFromIndex = FixedRows) and (aFromIndex = Pred(RowCount)) then
      Rows[aFromIndex].Clear
    else
      _DeleteRow(aFromIndex)
    ;
  end;
end;
 
procedure DeleteColumn(aStringGrid : TStringGrid; aFromIndex : Longint);
begin
  with TMStringGrid(aStringGrid) do begin
    if (aFromIndex < FixedCols) or  (aFromIndex > ColCount - 1) then
      Exit
    ;
    if (aFromIndex = FixedCols) and (aFromIndex = Pred(ColCount)) then
      Cols[aFromIndex].Clear
    else
      _DeleteColumn(aFromIndex)
    ;
  end;
end;
 
procedure MoveRow(aStringGrid : TStringGrid; aFromIndex, aToIndex : Longint);
begin
  with TMStringGrid(aStringGrid) do begin
    if (aFromIndex < FixedRows) or  (aFromIndex > RowCount - 1) then
      Exit
    ;
    if (aToIndex < FixedRows) or  (aToIndex > RowCount - 1) then
      Exit
    ;
    _MoveRow(aFromIndex, aToIndex);
  end;
end;
 
procedure MoveColumn(aStringGrid : TStringGrid; aFromIndex, aToIndex : Longint);
begin
  with TMStringGrid(aStringGrid) do begin
    if (aFromIndex < FixedCols) or  (aFromIndex > ColCount - 1) then
      Exit
    ;
    if (aToIndex < FixedCols) or  (aToIndex > ColCount - 1) then
      Exit
    ;
    _MoveColumn(aFromIndex, aToIndex);
  end;
end;
 
procedure ColumnWidthAlign(aStringGrid: TStringGrid; aColNum : Longword; aDefaultColWidth : Integer = -1);
var
  RowNum       : Integer;
  ColWidth     : Integer;
  MaxColWidth  : Integer;
begin
  if (aColNum < 0) or (aColNum > Pred(aStringGrid.ColCount)) then
    Exit
  ;
  if aDefaultColWidth < 0 then
    MaxColWidth := aStringGrid.DefaultColWidth
  else
    MaxColWidth := aDefaultColWidth
  ;
  for RowNum := 0 to Pred(aStringGrid.RowCount) do begin
    ColWidth := aStringGrid.Canvas.TextWidth(aStringGrid.Cells[aColNum, RowNum]);
    if MaxColWidth < ColWidth then
      MaxColWidth := ColWidth
    ;
  end;
  //+5 - потому что иногда текст всёже немного не умещается по ширине. :-)
  aStringGrid.ColWidths[aColNum] := MaxColWidth + 5;
end;
 
end.
2
Вложения
Тип файла: rar uStrGrUtils.rar (3.9 Кб, 136 просмотров)
SkyLine
2 / 2 / 2
Регистрация: 23.11.2009
Сообщений: 29
09.05.2010, 15:22 8
Mawrat, премного Вам благодарен за модуль. Действительно нужная штука. Выручили =)
0
09.05.2010, 15:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2010, 15:22

Как запретить повторный ввод нуля в ячейку StringGrid?
Здравствуйте, Уважаемые форумчане. Подскажите, пожалуйста, как можно...

Как можно разделить ячейку в StringGrid так, чтобы получилось в одной ячейке две записи?
у меня такой вопрос ,возможно ли в stringgrid разделить ячейку так что бы в...

Как закрасить ячейку в Stringgrid, в которой есть "*"
Всем привет! Подскажите мне пожалуйста, как закрасить ячейки Stringgrid в...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru