반응형
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
'delphi' 카테고리의 다른 글
Polyfit - 다차항 보상 (0) | 2023.03.09 |
---|---|
stringgrid를 마우스로 드레그하여 선택한 다음 병합하는 코드 (0) | 2023.03.08 |
stringgrid에 체크박스 삽입하는 코드 (0) | 2023.03.08 |
stringgrid의 특정 셀의 색상을 변경하는 코드 (0) | 2023.03.08 |
Stringgrid의 숫자 포멧 설정 (0) | 2023.03.08 |