procedure TDBGridEx.WMVScroll(var Msg: TWMVScroll); begin inherited ; Invalidate; end;
procedure TDBGridEx.WMMouseWheel(var Message: TWMMouseWheel); var iWheelDis: Integer; begin if (Self.DataSource <> nil) and (Self.DataSource.DataSet <> nil) and (Self.DataSource.DataSet.Active) then begin iWheelDis := (- Message.WheelDelta) div WHEEL_DELTA; Self.DataSource.DataSet.MoveBy(iWheelDis); Self.Refresh; //inherited; end; end;
procedure TDBGridEx.KeyDown(var Key: Word; Shift: TShiftState); var //用于处理上下光标键移动时部分单元格刷新不正常的问题 2003.10.21 index: integer; begin inherited KeyDown(Key, Shift); if not (ssCtrl in Shift) and ((Key = VK_UP) or (Key = VK_DOWN)) and DataLink.Active then begin index := DataLink.ActiveRecord + 1; if (index = 1) or (index = DataLink.RecordCount) then Invalidate; end; end;
procedure TDBGridEx.SetRowOddColor(NewColor: TColor); begin FRowOddColor := NewColor; if FBeautyDraw then Invalidate; end;
procedure TDBGridEx.SetRowEvenColor(NewColor: TColor); begin FRowEvenColor := NewColor; if FBeautyDraw then Invalidate; end;
procedure TDBGridEx.SetBeautyDraw(bAutoDraw: boolean); begin FBeautyDraw := bAutoDraw; Invalidate; end;
procedure TDBGridEx.DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState); var Index: integer; begin inherited DrawDataCell(Rect, Field, State); if FBeautyDraw then begin if (GetActiveRecord mod 2)<> 0 then begin Canvas.Brush.Color := FRowOddColor; end else begin //设置偶数行颜色 Canvas.Brush.Color := FRowEvenColor; //clSkyBlue; end; if State <> [] then begin if Self.Focused and ((gdFocused in State) or (gdSelected in State)) or (dgAlwaysShowSelection in Self.Options) then Canvas.Brush.Color := TColor(not(Longint(Canvas.Font.Color))) end else if (dgMultiSelect in Self.Options) and SelectedRows.Find(Datalink.Datasource.Dataset.Bookmark, Index)then Canvas.Brush.Color := TColor(not(Longint(Canvas.Font.Color))); DefaultDrawDataCell(Rect, Field, State); end else if not Self.DefaultDrawing then DefaultDrawDataCell(Rect, Field, State); end;
function TDBGridEx.GetActiveRecord: integer; begin if DataLink.Active then Result := DataLink.ActiveRecord + 1 else Result := 0; end;