您的位置:首页 > 编程语言 > Delphi

delphi学习点滴——DBGrid的实用技巧

2011-12-22 14:16 537 查看
1.隔行不同颜色显示

with TDBGrid(Sender) do

begin

if (gdSelected in State) or (gdFocused in State) then

Canvas.Brush.Color := clAqua

else if DataSource.DataSet.RecNo mod 2 = 0 then

Canvas.Brush.Color := $00F0F0F5

else

Canvas.Brush.Color := clWindow;

DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

2.Flat风格

属性设置:

Ctrl3D = False

Options.dgColLines = False

Options.dgRowLines = False

type

TGridAccess = class(TCustomGrid);

Form.OnCreate:

with TGridAccess(DBGrid1) do

Options := Options + [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine];

3.去掉滚动条

private

{ Private declarations }

FGridWndProc: TWndMethod;

procedure GridWndProc(var Message: TMessage);

Form.OnCreate:

TGridAccess(DBGrid1).ScrollBars := ssNone;

FGridWndProc := DBGrid1.WindowProc;

DBGrid1.WindowProc := GridWndProc;

Form.OnDestroy:

DBGrid1.WindowProc := FGridWndProc;

procedure TForm1.GridWndProc(var Message: TMessage);

begin

case Message.Msg of

WM_PAINT, WM_NCPAINT:

begin

SetScrollRange(DBGrid1.Handle, SB_HORZ, 0, 0, False);

SetScrollRange(DBGrid1.Handle, SB_VERT, 0, 0, False);

end;

end;

FGridWndProc(Message);

end;

4.鼠标移到某个单元格,指针形状改变

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState;

X, Y: Integer);

var

Coord: TGridCoord;

begin

Coord := TDBGrid(Sender).MouseCoord(X, Y);

if (Coord.Y > 0) and (Coord.X = 1) and not TDBGrid(Sender).DataSource.DataSet.IsEmpty then

begin // Coord.X=1,dgIndicator=True时说明在第一列,False时说明在第二列

TDBGrid(Sender).Cursor := crHandPoint;

StatusBar1.SimpleText := 'Click to open curve form';

end

else

begin

TDBGrid(Sender).Cursor := crDefault;

StatusBar1.SimpleText := '';

end;

end;

5.Options.dgRowSelect=True时,点击不同单元格列,执行不同的动作

DBGrid的OnMouseDown/OnMouseUp事件在点击记录单元格时不会触发(点击固定行列区会触发),而Options.dgRowSelect=True时,OnCellClick事件的Column总是传递第一个列对象,即Column.Index=0,即使你点击的是其他列,因此需要在OnCellClick中再判断点击的是哪个列,再根据不同列执行不同的动作。

procedure TForm1.DBGrid1CellClick(Column: TColumn);

var

Coord: TGridCoord;

P: TPoint;

begin

GetCursorPos(P);

Windows.ScreenToClient(TDBGrid(Sender).Handle, P);

Coord := TDBGrid(Sender).MouseCoord(P.X, P.Y);

if (Coord.Y > 0) and (Coord.X = 1) and not TDBGrid(Sender).DataSource.DataSet.IsEmpty then

// Coord.X=1,dgIndicator=True时说明在第一列,False时说明在第二列

ShowMessage(GridRate.Columns[0].Field.AsString);

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: