안녕하세요
스트링그리드에서 더블클릭하면 글자색을 바뀌게 하려고 합니다.
그래서, 다음과 같이 했더니 글자색은 바뀌는데, 마우스로 다른 셀을 클릭하면 색이
원래의 색으로 돌아옵니다.
예) 3번째 행을 마우스로 더블 클릭하면 그 행(3번째 행)이 파란 글씨로 바뀝니다.
그런데, 1번째 행을 마우스로 클릭하거나 더블클릭하면 원래색(검정색)으로
돌아옵니다.
그냥 바뀐 색으로 남아 있을 수는 없나요 ?
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
Rect : TRect;
RowNumber, ColNumber : Integer;
begin
RowNumber := StringGrid1.Row;
with StringGrid1 do
begin
Rect := StringGrid1.CellRect(0,RowNumber);
Canvas.FillRect(Rect);
Canvas.Font.Color := clBlue;
canvas.TextRect(Rect, Rect.Left, Rect.Top, cells[0,RowNumber]);
end;
end;
더블클릭보다는 DrawCell 이벤트를 써야 마땅합니다.
더블클릭은 설정값을 체크하거나 해제하는 용도로 써야 하겠군요.
다음의 내용을 보시고 응용해 보십시오.
// 그리드에 설정값을 둘 숨겨진 컬럼을 둔다
with StringGrid1 do
begin
ColCount := 3;
ColWidths[2] := -1;
:
end;
procedure TForm1.StringGrid1DblClick(...);
begin
with StringGrid1 do
begin
if Cells[2,Row] = 'Y' then
Cells[2,Row] := 'N'
else
Cells[2,Row] := 'Y';
end;
end;
procedure TForm1.StringGrid1DrawCell(...);
begin
with StringGrid1 do
begin
if (ARow > FixedRows) and (Cells[2,ARow] = 'Y') then
begin
Canvas.Brush.Color := clBlue; // 배경색을 바꿀때 사용
Canvas.FillRect(Rect);
Canvas.Font.Color := clWhite; // 글자색을 바꿀때 사용
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol,ARow]);
end;
end;
end;
이렇게 하시면 더블클릭에 의해 토글되어 2번째 Cell의 값이 'Y' 이면 청색바탕에 흰색글씨가 표시되고, 'N' 이면 정상적인 색깔로 표시됩니다.
대개의 색깔 변화를 주는 프로그램은 이렇게 구현됩니다.
참고하시기를...