(Canvas, ARect.Left + FrameOffs, (ARect.Top + ARect.Bottom - FIndicators.Height) shr 1, Indicator) else FIndicators.Draw(Canvas, ARect.Right - FIndicators.Width - FrameOffs, (ARect.Top + ARect.Bottom - FIndicators.Height) shr 1, Indicator); if AARow = FDatalink.ActiveRecord then FSelRow := AARow + FTitleOffset; end; end; end else with Canvas do begin DrawColumn := Columns[AACol]; if gdFixed in AState then begin Font := DrawColumn.Title.Font; Brush.Color := DrawColumn.Title.Color; end else begin Font := DrawColumn.Font; Brush.Color := DrawColumn.Color; end; if AARow < 0 then with DrawColumn.Title do WriteText(Canvas, ARect, FrameOffs, FrameOffs, Caption, Alignment) else if (FDataLink = nil) or not FDataLink.Active then FillRect(ARect) else begin Value := ''''''''; OldActive := FDataLink.ActiveRecord; try FDataLink.ActiveRecord := AARow; if Assigned(DrawColumn.Field) then Value := DrawColumn.Field.DisplayText; Highlight := HighlightCell(AACol, AARow, Value, AState); if Highlight then begin Brush.Color := clHighlight; Font.Color := clHighlightText; end; if FDefaultDrawing then WriteText(Canvas, ARect, 2, 2, Value, DrawColumn.Alignment); if Columns.State = csDefault then DrawDataCell(ARect, DrawColumn.Field, AState); DrawColumnCell(ARect, AACol, DrawColumn, AState); finally FDataLink.ActiveRecord := OldActive; end; if FDefaultDrawing and (gdSelected in AState) and ((dgAlwaysShowSelection in Options) or Focused) and not (csDesigning in ComponentState) and not (dgRowSelect in Options) and (UpdateLock = 0) and (ValidParentForm(Self).ActiveControl = Self) then Windows.DrawFocusRect(Handle, ARect); end; end; if (gdFixed in AState) and ([dgRowLines, dgColLines] * Options = [dgRowLines, dgColLines]) then begin InflateRect(ARect, 1, 1); DrawEdge(Canvas.Handle, ARect, BDR_RAISEDINNER, BF_BOTTOMRIGHT); DrawEdge(Canvas.Handle, ARect, BDR_RAISEDINNER, BF_TOPLEFT); end; end;
procedure TCustomVDBGrid.DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState); begin if Assigned(FOnDrawDataCell) then FOnDrawDataCell(Self, Rect, Field, State); end;
procedure TCustomVDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Assigned(OnDrawColumnCell) then OnDrawColumnCell(Self, Rect, DataCol, Column, State); end;
procedure TCustomVDBGrid.EditButtonClick; begin if Assigned(FOnEditButtonClick) then FOnEditButtonClick(Self); end;
procedure TCustomVDBGrid.EditingChanged; begin if dgIndicator in Options then if FVertical then InvalidateCell(FSelRow, 0) else InvalidateCell(0, FSelRow); end;
procedure TCustomVDBGrid.EndLayout; begin if FLayoutLock > 0 then begin try try if FLayoutLock = 1 then InternalLayout; finally if FLayoutLock = 1 then FColumns.EndUpdate; end; finally Dec(FLayoutLock); EndUpdate; end; end; end;
procedure TCustomVDBGrid.EndUpdate; begin if FUpdateLock > 0 then Dec(FUpdateLock); end;
function TCustomVDBGrid.GetColField(DataCol: Integer): TField; begin Result := nil; if (DataCol >= 0) and FDatalink.Active and (DataCol < Columns.Count) then Result := Columns[DataCol].Field; end;
function TCustomVDBGrid.GetDataSource: TDataSource; begin Result := FDataLink.DataSource; end;
function TCustomVDBGrid.GetEditLimit: Integer; begin Result := 0; if Assigned(SelectedField) and (SelectedField.DataType = ftString) then Result := SelectedField.Size; end;
function TCustomVDBGrid.GetEditMask(ACol, ARow: Longint): string; begin Result := ''''''''; if FDatalink.Active then with Columns[RawToDataColumn(IIF(FVertical, ARow, ACol))] do if Assigned(Field) then Result := Field.EditMask; end;
function TCustomVDBGrid.GetEditText(ACol, ARow: Longint): string; begin Result := ''''''''; if FDatalink.Active then with Columns[RawToDataColumn(IIF(FVertical, ARow, ACol))] do if Assigned(Field) then Result := Field.Text; FEditText := Result; end;
function TCustomVDBGrid.GetFieldCount: Integer; begin Result := FDatalink.FieldCount; end;
function TCustomVDBGrid.GetFields(FieldIndex: Integer): TField; begin Result := FDatalink.Fields[FieldIndex]; end;
function TCustomVDBGrid.GetFieldValue(ACol: Integer): string; var Field: TField; begin Result := ''''''''; Field := GetColField(ACol); if Field <> nil then Result := Field.DisplayText; end;
function TCustomVDBGrid.GetSelectedField: TField; var Index: Integer; begin Index := SelectedIndex; if Index <> -1 then Result := Columns[Index].Field else Result := nil; end;
function TCustomVDBGrid.GetSelectedIndex: Integer; begin Result := RawToDataColumn(IIF(FVertical, Row, Col)); end;
function TCustomVDBGrid.HighlightCell(DataCol, DataRow: Integer; const Value: string; AState: TGridDrawState): Boolean; var Index: Integer; begin Result := False; if (dgMultiSelect in Options) and Datalink.Active then Result := FBookmarks.Find(Datalink.Datasource.Dataset.Bookmark, Index); if not Result then Result := (gdSelected in AState) and ((dgAlwaysShowSelection in Options) or Focused) { updatelock eliminates flicker when tabbing between rows } and ((UpdateLock = 0) or (dgRowSelect in Options)); end;
procedure TCustomVDBGrid.KeyDown(var Key: Word; Shift: TShiftState); var KeyDownEvent: TKeyEvent;
procedure ClearSelection; begin if (dgMultiSelect in Options) then begin FBookmarks.Clear; FSelecting := False; end; end;
procedure DoSelection(Select: Boolean; Direction: Integer); var AddAfter: Boolean; begin AddAfter := False; BeginUpdate; try if (dgMultiSelect in Options) and FDatalink.Active then if Select and (ssShift in Shift) then begin if not FSelecting then begin FSelectionAnchor := FBookmarks.CurrentRow; & << 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] 下一页 |