; end;
procedure TCustomVDBGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Cell: TGridCoord; SaveState: TGridState; begin SaveState := FGridState; inherited MouseUp(Button, Shift, X, Y); if (SaveState = gsRowSizing) or (SaveState = gsColSizing) or ((InplaceEditor <> nil) and (InplaceEditor.Visible) and (PtInRect(InplaceEditor.BoundsRect, Point(X,Y)))) then Exit; Cell := MouseCoord(X,Y); if (Button = mbLeft) and (IIF(FVertical, Cell.Y, Cell.X) >= FIndicatorOffset) and (IIF(FVertical, Cell.X, Cell.Y) >= 0) then if IIF(FVertical, Cell.X, Cell.Y) < FTitleOffset then TitleClick(Columns[RawToDataColumn(IIF(FVertical, Cell.Y, Cell.X))]) else CellClick(Columns[SelectedIndex]); end;
procedure TCustomVDBGrid.MoveCol(RawCol: Integer); var OldCol: Integer; begin FDatalink.UpdateData; if RawCol >= IIF(FVertical, RowCount, ColCount) then RawCol := IIF(FVertical, RowCount, ColCount) - 1; if RawCol < FIndicatorOffset then RawCol := FIndicatorOffset; OldCol := IIF(FVertical, Row, Col); if RawCol <> OldCol then begin if not FInColExit then begin FInColExit := True; try ColExit; finally FInColExit := False; end; if IIF(FVertical, Row, Col) <> OldCol then Exit; end; if not (dgAlwaysShowEditor in Options) then HideEditor; if FVertical then Row := RawCol else Col := RawCol; ColEnter; end; end;
procedure TCustomVDBGrid.Notification(AComponent: TComponent; Operation: TOperation); var I: Integer; NeedLayout: Boolean; begin inherited Notification(AComponent, Operation); if (Operation = opRemove) then begin if (AComponent is TPopupMenu) then begin for I := 0 to Columns.Count-1 do if Columns[I].PopupMenu = AComponent then Columns[I].PopupMenu := nil; end else if (FDataLink <> nil) then if (AComponent = DataSource) then DataSource := nil else if (AComponent is TField) then begin NeedLayout := False; BeginLayout; try for I := 0 to Columns.Count-1 do with Columns[I] do if Field = AComponent then begin Field := nil; NeedLayout := True; end; finally if NeedLayout and Assigned(FDatalink.Dataset) and not FDatalink.Dataset.ControlsDisabled then EndLayout else DeferLayout; end; end; end; end;
procedure TCustomVDBGrid.RecordChanged(Field: TField); var I: Integer; CField: TField; begin if not HandleAllocated then Exit; if Field = nil then Invalidate else begin for I := 0 to Columns.Count - 1 do if Columns[I].Field = Field then if FVertical then InvalidateRow(DataToRawColumn(I)) else InvalidateCol(DataToRawColumn(I)); end; CField := SelectedField; if ((Field = nil) or (CField = Field)) and (Assigned(CField) and (CField.Text <> FEditText)) then begin InvalidateEditor; if InplaceEditor <> nil then InplaceEditor.Deselect; end; end;
procedure TCustomVDBGrid.Scroll(Distance: Integer); var OldRect, NewRect: TRect; RowHeight: Integer; begin if not HandleAllocated then Exit; if FVertical then OldRect := BoxRect(Col, 0, Col, RowCount - 1) else OldRect := BoxRect(0, Row, ColCount - 1, Row); if (FDataLink.ActiveRecord >= IIF(FVertical, ColCount, RowCount) - FTitleOffset) then UpdateRowCount; UpdateScrollBar; UpdateActive; if FVertical then NewRect := BoxRect(Col, 0, Col, RowCount - 1) else NewRect := BoxRect(0, Row, ColCount - 1, Row); ValidateRect(Handle, @OldRect); InvalidateRect(Handle, @OldRect, False); InvalidateRect(Handle, @NewRect, False); if Distance <> 0 then begin HideEditor; try Invalidate; Exit; {FOLLOWING CODE CAUSED CONFUSION SO ALWAYS INVALIDATE} if Abs(Distance) > IIF(FVertical, VisibleColCount, VisibleRowCount) then begin Invalidate; Exit; end else begin RowHeight := DefaultRowHeight; if dgRowLines in Options then Inc(RowHeight, GridLineWidth); if dgIndicator in Options then begin if FVertical then OldRect := BoxRect(FSelRow, 0, FSelRow, RowCount - 1) else OldRect := BoxRect(0, FSelRow, ColCount - 1, FSelRow); InvalidateRect(Handle, @OldRect, False); end; if FVertical then NewRect := BoxRect(FTitleOffset, 0, 1000, RowCount - 1) else NewRect := BoxRect(0, FTitleOffset, ColCount - 1, 1000); if FVertical then ScrollWindowEx(Handle, -DefaultColWidth * Distance, 0, @NewRect, @NewRect, {VERT ???} 0, nil, SW_Invalidate) else ScrollWindowEx(Handle, 0, -RowHeight * Distance, @NewRect, @NewRect, 0, nil, SW_Invalidate); if dgIndicator in Options then begin if FVertical then NewRect := BoxRect(Col, 0, Col, RowCount - 1) else NewRect := BoxRect(0, Row, ColCount - 1, Row); InvalidateRect(Handle, @NewRect, False); end; end; finally if dgAlwaysShowEditor in Options then ShowEditor; end; end; if UpdateLock = 0 then Update; end;
procedure TCustomVDBGrid.SetColumns(Value: TDBGridColumns); begin Columns.Assign(Value); end;
funct << 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] 下一页 |