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;
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;
相关文章推荐
- delphi学习点滴——使用Query控件的两个技巧
- delphi学习点滴—dbgrideh一个技巧
- delphi学习点滴——数据集过滤技巧
- C++/GDI+ 学习笔记(四)——实用技巧——颜色矩阵(ColorMatrix)
- CNN的近期进展与实用技巧(上)/2016-05-03 刘昕 深度学习大讲堂
- delphi 更改DBGrid 颜色技巧
- 7个在深度学习实用技巧
- C++/GDI+ 学习笔记(五)——实用技巧——颜色矩阵(ColorMatrix)
- delphi学习点滴——利用DDE实现同Word的交互
- Android NDK学习 <三> Android.mk实例和NDK实用技巧
- Android NDK学习 <三> Android.mk实例和NDK实用技巧
- Delphi学习中使用到的部分技巧
- delphi 更改DBGrid 颜色技巧
- vim实用技巧学习4
- C++/GDI+ 学习笔记(四)——实用技巧——颜色矩阵(ColorMatrix)
- delphi学习点滴——动态链接库两种调用方式的比较
- C++/GDI+ 学习笔记(六)——实用技巧——双缓冲(Double Buffer)
- C++/GDI+ 学习笔记(四)——实用技巧——调色板(ColorPalette)
- python学习笔记--实用技巧之可迭代对象的元素分解
- 这样学习C语言最有效(连载2)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇