Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Grid [D6, WinXP]


dm37 ©   (2005-11-11 09:19:00) 

Подскажите, возможно ли сделать такое
как известно в grid текст выглядит так:

строка 1:   a1   a2   a3
строка 2:   b1   b2   b3

нужно так:

строка 1:   первая группа
строка 2:   a1   a2   a3
строка 3:   вторая группа
строка 4:   b1   b2   b3

т.е. перерисовать одну строку в таблице без столбцов (например, как в Excel)


ЮЮ   (2005-11-14 05:24:00) [1]


procedure TForm1.FormCreate(Sender: TObject);
begin
 // всю отрисовку берём на себя
 StringGrid1.DefaultDrawing := false;
 StringGrid1.Options := StringGrid1.Options - [goVertLine, goHorzLine];

 StringGrid1.ColCount := 3;
 StringGrid1.FixedCols := 0;
 StringGrid1.RowCount := 4;
 StringGrid1.FixedRows := 0;

 StringGrid1.Cells[0, 0] := 'первая группа';
 StringGrid1.Cells[1, 0] := '|';
 StringGrid1.Cells[2, 0] := '|';

 StringGrid1.Cells[0, 1] := 'a1';
 StringGrid1.Cells[1, 1] := 'a2';
 StringGrid1.Cells[2, 1] := 'a3';

 StringGrid1.Cells[0, 2] := 'вторая группа';
 StringGrid1.Cells[1, 2] := '|';
 StringGrid1.Cells[2, 2] := '|';

 StringGrid1.Cells[0, 3] := 'b1';
 StringGrid1.Cells[1, 3] := 'b2';
 StringGrid1.Cells[2, 3] := 'b3';
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var
 col: integer;
begin
 if StringGrid1.Cells[ACol, ARow] = '|' then exit;

 // включаем в Rect объединяемые ячейки
 col := Acol + 1;
 while
   (col < StringGrid1.ColCount) and (StringGrid1.Cells[col, ARow] = '|')
 do begin
   Rect.Right := Rect.Right + StringGrid1.ColWidths[col] +  StringGrid1.GridLineWidth;
   inc(col);
 end;

 // очищаем прямоугольник
 StringGrid1.Canvas.Brush.Style := bsSolid;
 StringGrid1.Canvas.Brush.Color := StringGrid1.Color;
 StringGrid1.Canvas.FillRect(Rect);

 // рисуем сетку
 StringGrid1.Canvas.Pen.Color := clSilver;
 StringGrid1.Canvas.Rectangle(Rect);

 //выводим текст
 Rect.Right := Rect.Right - 1;
 Rect.Bottom := Rect.Bottom - 1;
 StringGrid1.Canvas.Font.Assign(StringGrid1.Font);
 StringGrid1.Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, StringGrid1.Cells[ACol, ARow]);
end;


dm37   (2005-11-11 09:53:00) [2]

StringGrid


ЮЮ   (2005-11-11 09:45:00) [3]

Конечно можно. Никто ведь не запрещает рисовать на канвасе вне пределов ARect, переданного в качестве параметра соответствующего OnDrawCell

P.S. Grid-то какой?


Наверх

Титульная страница Поиск, карта сайта Написать письмо