안녕하세요.
델파이를 취미삼아 이것저것 만들고 있습니다.
스트링그리드를 한번 써보려고 하니까, 스트링그리드 자체로도 기능이 풍부하고 재미있네요.
문제는 하나의 폼에 달력과 스트링그리드, 그리고 나머지 콘트롤들을 올려놨는데요.
예를 들어 달력과 스트링그리드로만 말씀드리겠습니다.
달력이나 스트링그리드나 어느 하나의 자료는 선택되도록 되어 있는 것들인데요.
Samples 페이지에 있는 달력은 선택된 영역의 배경색이 파란색으로 바뀌고, 글자는 역상으로 자동으로바뀝니다.
그러나 스트링그리드에서 선택된 영역은 배경색만 파란색으로 바뀌고 글자형태는 여전히 그대로여서, 스트링그리드에서 달력으로 포커스를 옮기면 스트링그리드의 선택된 영역이 반전되면서(배경이 파란색으로 바뀌면서), 글자가 잘 보이질 않네요.
사실 제가 원하는 것은 스트링그리드에서 자료를 선택해도 그 선택된 영역은 선택되지 않은 영역과 동일한 형태로 유지할 수 있는 것을 원하거든요.
즉, 선택되나 안되나 똑같은 형태를 유지하는 것...
똑같은 형태를 유지하지 않더라도 스트링그리드가 포커스되지 않았을 때, 스트링그리드의 이전에 선택된 영역(파란색으로 바뀐 영역)의 배경색을 선택되지 않은 다른 영역의 색상으로 바꿀 수 있는 방법을 알고 싶습니다.
혹시 이와같이 조작할 수 있는 방법을 아시는 분은 도움을 주셨으면 합니다.
그럼 좋은시간들 되십시오.
> 안녕하세요.
> 델파이를 취미삼아 이것저것 만들고 있습니다.
> 스트링그리드를 한번 써보려고 하니까, 스트링그리드 자체로도 기능이 풍부하고 재미있네요.
> 문제는 하나의 폼에 달력과 스트링그리드, 그리고 나머지 콘트롤들을 올려놨는데요.
> 예를 들어 달력과 스트링그리드로만 말씀드리겠습니다.
> 달력이나 스트링그리드나 어느 하나의 자료는 선택되도록 되어 있는 것들인데요.
> Samples 페이지에 있는 달력은 선택된 영역의 배경색이 파란색으로 바뀌고, 글자는 역상으로 자동으로바뀝니다.
> 그러나 스트링그리드에서 선택된 영역은 배경색만 파란색으로 바뀌고 글자형태는 여전히 그대로여서, 스트링그리드에서 달력으로 포커스를 옮기면 스트링그리드의 선택된 영역이 반전되면서(배경이 파란색으로 바뀌면서), 글자가 잘 보이질 않네요.
>
> 사실 제가 원하는 것은 스트링그리드에서 자료를 선택해도 그 선택된 영역은 선택되지 않은 영역과 동일한 형태로 유지할 수 있는 것을 원하거든요.
> 즉, 선택되나 안되나 똑같은 형태를 유지하는 것...
>
> 똑같은 형태를 유지하지 않더라도 스트링그리드가 포커스되지 않았을 때, 스트링그리드의 이전에 선택된 영역(파란색으로 바뀐 영역)의 배경색을 선택되지 않은 다른 영역의 색상으로 바꿀 수 있는 방법을 알고 싶습니다.
>
> 혹시 이와같이 조작할 수 있는 방법을 아시는 분은 도움을 주셨으면 합니다.
>
> 그럼 좋은시간들 되십시오.
///////////////////////////////////////////////////////////////////////////
하시고자하는 방법을 제가 잘이해 했는지는 모르겠으나 아래것을 변형해서 해보세요.
1. 마우스 위치에 따라 색바꾸기
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
CCol, CRow: Integer;
Rect : TRect;
begin
with TStringGrid(Sender) do begin
Refresh;
MouseToCell(x,y,CCol, CRow);
Rect := CellRect(CCol, CRow);
if (CRow>=0)and(CCol>=0) then begin
Canvas.Brush.Color := clRed;
Canvas.FillRect(Rect);
Canvas.Font.Color := clWhite;
canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 3, cells[CCol, CRow]);
//Rect.Left + 3, Rect.Top + 3이부분은 계산해서 수정하세요
end;
end;
end;
2.원하는 셀만 색바꾸기
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Rect : TRect;
begin
with StringGrid1 do begin
Refresh;
Rect := StringGrid1.CellRect(3, 3); //일단 [3,3]으로 설정했음
Canvas.Brush.Color := clRed;
Canvas.FillRect(Rect);
Canvas.Font.Color := clWhite;
canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 3, cells[3, 3]);
//Rect.Left + 3, Rect.Top + 3이부분은 계산해서 수정하세요
end;
end;