본문 바로가기

delphi

stringgrid의 셀 병합하는 코드

반응형
SMALL

Delphi StringGrid에서 셀을 병합하려면 OnDrawCell 이벤트를 사용하여 셀의 모양을 사용자 지정하고 병합된 셀처럼 보이게 할 수 있다.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  Grid: TStringGrid;
  Text: string;
  R: TRect;
  I, J: Integer;
begin
  Grid := Sender as TStringGrid;

  if (ACol = 1) and (ARow = 1) then
  begin
    // Draw the merged cell
    Grid.Canvas.Font := Grid.Font;
    Grid.Canvas.Brush.Color := clBtnFace;
    Grid.Canvas.FillRect(Rect);
    Text := Grid.Cells[ACol, ARow];
    R := Rect;
    DrawText(Grid.Canvas.Handle, PChar(Text), Length(Text), R, DT_CENTER or DT_VCENTER or DT_SINGLELINE);

    // Hide the other cells in the merged region
    for I := 1 to 2 do
    begin
      for J := 1 to 2 do
      begin
        if (I <> ACol) or (J <> ARow) then
        begin
          Grid.Canvas.Brush.Color := clWhite;
          Grid.Canvas.FillRect(Grid.CellRect(I, J));
        end;
      end;
    end;
  end
  else
  begin
    // Draw cell contents
    Grid.Canvas.Font := Grid.Font;
    Grid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Grid.Cells[ACol, ARow]);
  end;
end;

이 예제에서는 OnDrawCell 이벤트를 사용하여 StringGrid의 셀 모양을 사용자 지정합니다. 현재 셀이 인접한 셀과 병합하려는 왼쪽 상단 위치(행 1, 열 1)에 있는지 확인. 그렇다면 셀 사각형을 배경색으로 채우고, DrawText 함수를 사용하여 셀 내용을 그리고, 사각형을 흰색으로 채워 병합된 영역의 다른 셀을 숨겨 병합된 셀을 그린다. CellRect 메서드를 사용하여 각 셀의 사각형을 가져오고 FillRect 메서드를 사용하여 사각형을 색으로 채움

다른 모든 셀의 경우 Canvas의 TextRect 메서드를 사용하여 셀 내용을 그린다. 이 예제에서는 병합된 영역이 2x2 셀로 구성되어 있다고 가정하고 다른 셀을 숨기는 루프에 셀 인덱스를 하드 코딩한다. 크기가 다른 셀을 병합하려면 그에 따라 루프를 조정해야 한다.

반응형
LIST