15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Многострочные ячейки в StringGrid.

Компилятор: Delphi

Сперва необходимо установить свойство DefaultDrawing в False. Далее, необходимо вставить следующий код в обработчик события OnDrawCell:


procedure TForm1.StringGrid1DrawCell(Sender: TObject;
                                     Col, Row: Longint;
                                     Rect: TRect;
                                     State: TGridDrawState);
var
   Line1: string;
   Line2: string;
   ptr: integer;
   padding: integer;
   hGrid: TStringGrid;

begin
  hGrid:= (Sender as TStringGrid);
  ptr := Pos(';', hGrid.Cells[Col, Row]);
  if ptr > 0 then
  begin
     Line1 := Copy(hGrid.Cells[Col, Row], 1, ptr - 1);
     Line2 := Copy(hGrid.Cells[Col, Row], ptr + 1,
                   Length(hGrid1.Cells[Col,Row]) - ptr);
  end
  else Line1 := hGrid.Cells[Col, Row];
  hGrid.Canvas.FillRect(Rect);
  hGrid.Canvas.TextOut(Rect.Left, Rect.Top + 2, Line1);
  if ptr > 0 then
     hGrid.Canvas.TextOut(Rect.Left, Rect.Top -
                          hGrid.Canvas.Font.Height + 3, Line2);
end;

Теперь достаточно для переноса строки вставить в неё точку с запятой. Так же не забудьте изменить высоту строки так, чтобы переносы строки поместились в ячейку:

StringGrid1.RowHeights[0] := StringGrid1.DefaultRowHeight * 2 ;