hsr///////////////////////////////////////////////////////////////
고정된 셀에서 EditorMode := True로하면 이상한현상이 일어나거든요.
그래서 아래 한 예는 정답은 아니지만 근사치로해보겁니다.
1.초기 전역변수에 고정 컬럼수를 기억합니다.
procedure TForm1.FormShow(Sender: TObject);
begin
orgcol := StringGrid1.Fixedcols;
orgrow := StringGrid1.FixedRows;
end;
2.마우스다운에서 임시로 고정컬럼을 없애버렸다 생기게합니다
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
S_row , S_col : integer;
begin
StringGrid1.MouseToCell(x,Y,S_col,S_row);
StringGrid1.FixedRows := orgrow;
StringGrid1.FixedCols := orgcol;
if (S_col<0)or(S_row<0) then exit;
if (StringGrid1.Fixedcols > S_col)
or(StringGrid1.FixedRows > S_row) then begin
if (StringGrid1.Fixedcols > S_col) then
StringGrid1.FixedCols := 0;
if (StringGrid1.FixedRows > S_row) then
StringGrid1.FixedRows := 0;
고정된 셀에서 EditorMode := True로하면 이상한현상이 일어나거든요.
그래서 아래 한 예는 정답은 아니지만 근사치로해보겁니다.
1.초기 전역변수에 고정 컬럼수를 기억합니다.
procedure TForm1.FormShow(Sender: TObject);
begin
orgcol := StringGrid1.Fixedcols;
orgrow := StringGrid1.FixedRows;
end;
2.마우스다운에서 임시로 고정컬럼을 없애버렸다 생기게합니다
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
S_row , S_col : integer;
begin
StringGrid1.MouseToCell(x,Y,S_col,S_row);
StringGrid1.FixedRows := orgrow;
StringGrid1.FixedCols := orgcol;
if (S_col<0)or(S_row<0) then exit;
if (StringGrid1.Fixedcols > S_col)
or(StringGrid1.FixedRows > S_row) then begin
if (StringGrid1.Fixedcols > S_col) then
StringGrid1.FixedCols := 0;
if (StringGrid1.FixedRows > S_row) then
StringGrid1.FixedRows := 0;
StringGrid1.Row := S_row;
StringGrid1.Col := S_col;
StringGrid1.EditorMode := True;
end;
StringGrid1.Row := S_row;
StringGrid1.Col := S_col;
end;
3.DrawCell이벤트에서 색깔은 유지하도록 약간손보면될겁니다.