一、StringGrid如何控制某几列数据不允许修改
1、在OnSelectCell事件
判断ACol, ARow,
如果在不允许的范围内则CanSelect
:= false;
2、在OnSelectCell事件中控制可编辑属性
例:With StringGrid1 do
if ACol = 2
then
Options := Options + [goEditing]
else
Options
:= Options - [goEditing];
二、单元格数据读取与修改
1、数据读取:在OnSelectCell事件中完成
例:With StringGrid1 do
Edit1.Text := Cells[ACol,ARow];
2、修改数据:如果按上面方式修改了单元格编辑属性,可以直接修改;
或者直接赋值:
With StringGrid1 do
Cells[Col,Row] := Edit1.Text;
三、行、列数添加,删除
type
TStringCell
= class(TStringGrid)
public
procedure DeleteRow(ARow: Longint);
procedure DeleteColumn(ACol: Longint);
procedure InsertRow(ARow: LongInt);
procedure InsertColumn(ACol: LongInt);
end;
procedure TStringCell.InsertColumn(ACol: Integer);
begin
ColCount :=ColCount +1;
MoveColumn(ColCount-1, ACol);
end;
procedure TStringCell.InsertRow(ARow: Integer);
begin
RowCount :=RowCount +1;
MoveRow(RowCount-1, ARow);
end;
procedure TStringCell.DeleteColumn(ACol: Longint);
begin
MoveColumn(ACol, ColCount -1);
ColCount := ColCount - 1;
end;
procedure TStringCell.DeleteRow(ARow: Longint);
begin
MoveRow(ARow, RowCount - 1);
RowCount := RowCount - 1;
end;
四、
在StringGrid中双击一个单元格,怎样才能知道双击的是哪个单元格?
Edit2.Text
:= RzStringGrid1.Cells[(Sender As TRzStringGrid).Col,(Sender As
TRzStringGrid).Row];
五、实现单元格文字换行显示
在OnDrawCell事件中添加如下代码
with
StringGrid1
do
DrawText(Canvas.Handle,pchar(Cells[Acol,Arow]),Length(Cells[Acol,Arow]),Rect,DT_WORDBREAK
or DT_LEFT);
六、在StringGrid中,根据数据条件显示相应颜色字体和背景颜色,并且显示居中。
在OnDrawCell事件中添加如下代码
with
StringGrid1
do
begin
Canvas.FillRect(Rect);
s:=Cells[ACol,ARow];
if ARow >
0
then //
第一行除外
if (S <> '-') and (S <> '')
then
begin
//使字符改变颜色的设定条件
if ABS(StrtoFloat(S)) >
SetValue then
begin
Canvas.Font.Color
:= clRed;
Canvas.Brush.Color:= clYellow;
end
else
begin
Canvas.Font.Color
:= clWindowText;;
Canvas.Brush.Color:= clWhite;
end;
end;
// 使字符居中显示
DrawText(Canvas.Handle, PChar(s), Length(s),Rect,
DT_CENTER or DT_SINGLELINE or
DT_VCENTER);
end;
加载中,请稍候......