cxlookupgrid.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 2,076 行 · 第 1/5 页

PAS
2,076
字号
          LFPainterClass.DrawSortingMark(Canvas, ASortRect, ASortOrder = soAscending);
      end;
    end;
end;

procedure TcxLookupGridPainter.DrawRow(ARowViewInfo: TcxLookupGridRowViewInfo);
var
  I: Integer;
  ACellViewInfo: TcxLookupGridCellViewInfo;
begin
  for I := 0 to ARowViewInfo.Count - 1 do
  begin
    ACellViewInfo := ARowViewInfo[I];
    Canvas.FrameRect(ACellViewInfo.Bounds, ViewInfo.GetGridColor,
      ViewInfo.GetGridLineWidth, ACellViewInfo.Borders);
    DrawCell(ACellViewInfo);
  end;
  Canvas.FrameRect(ARowViewInfo.Bounds, ViewInfo.GetGridColor,
    ViewInfo.GetGridLineWidth, ARowViewInfo.Borders);
  if ARowViewInfo.IsFocused and (Grid.Focused or Grid.IsPopupControl) then
    Canvas.DrawFocusRect(ARowViewInfo.ContentBounds);
end;

procedure TcxLookupGridPainter.DrawRows;
var
  I: Integer;
begin
  with ViewInfo do
    if not IsRectEmpty(RowsRect) then
      for I := 0 to PartialVisibleRowCount - 1 do
        DrawRow(Rows[I]);
end;

function TcxLookupGridPainter.GetCanvas: TcxCanvas;
begin
  if Grid.HandleAllocated then
  begin
    if FCanvas <> nil then
      FreeAndNil(FCanvas);
    Result := Grid.Canvas;
  end
  else
  begin
    if FCanvas = nil then
      FCanvas := TcxScreenCanvas.Create;
    Result := FCanvas;
  end;
end;

function TcxLookupGridPainter.GetViewInfo: TcxLookupGridViewInfo;
begin
  Result := Grid.ViewInfo;
end;

{ TcxLookupGridDefaultValuesProvider }

function TcxLookupGridDefaultValuesProvider.IsDisplayFormatDefined(AIsCurrencyValueAccepted: Boolean): Boolean;
begin
  with TcxLookupGridColumn(Owner) do
    Result := DataController.GetItemTextStored(Index);
end;

{ TcxLookupGridColumn }

constructor TcxLookupGridColumn.Create(Collection: TCollection);
var
  AGrid: TcxCustomLookupGrid;
begin
  if Assigned(Collection) and (Collection is TcxLookupGridColumns) then
    AGrid := TcxLookupGridColumns(Collection).Grid
  else
    AGrid := nil;
  if Assigned(AGrid) then
    AGrid.BeginUpdate;
  try
    inherited Create(Collection);
    FDefaultValuesProvider := GetDefaultValuesProviderClass.Create(Self);
    FMinWidth := cxLookupGridColumnDefaultMinWidth;
    FSorting := True;
    Changed(False);
    if AGrid <> nil then
      AGrid.AddColumn(Self);
  finally
    if Assigned(AGrid) then
      AGrid.EndUpdate;
  end;
end;

destructor TcxLookupGridColumn.Destroy;
var
  AGrid: TcxCustomLookupGrid;
  AGridNotify: Boolean;
begin
  AGrid := Grid;
  AGridNotify := False;
  if AGrid <> nil then
  begin
    AGridNotify := not (csDestroying in AGrid.ComponentState) {and
      not TcxLookupGridColumns(Collection).Locked};
    if AGridNotify then AGrid.BeginUpdate;
    AGrid.RemoveColumn(Self);
  end;
  try
    RepositoryItem := nil;
    FreeAndNil(FInternalDefaultRepositoryItem);
    FDefaultValuesProvider.Free;
    FDefaultValuesProvider := nil;
    inherited Destroy;
  finally
    if (AGrid <> nil) and AGridNotify then
      AGrid.EndUpdate;
  end;
end;

procedure TcxLookupGridColumn.Assign(Source: TPersistent);
begin
  if Source is TcxLookupGridColumn then
  begin
    if Assigned(Collection) then
      Collection.BeginUpdate;
    try
      RestoreDefaults;
      if TcxLookupGridColumn(Source).IsCaptionStored then
        Caption := TcxLookupGridColumn(Source).Caption;
      HeaderAlignment := TcxLookupGridColumn(Source).HeaderAlignment;
      MinWidth := TcxLookupGridColumn(Source).MinWidth;
      Fixed := TcxLookupGridColumn(Source).Fixed;
      Sorting := TcxLookupGridColumn(Source).Sorting;
      SortOrder := TcxLookupGridColumn(Source).SortOrder;
      RepositoryItem := TcxLookupGridColumn(Source).RepositoryItem;
      if TcxLookupGridColumn(Source).IsWidthStored then
        Width := TcxLookupGridColumn(Source).Width;
    finally
      if Assigned(Collection) then
        Collection.EndUpdate;
    end;
  end
  else
    inherited Assign(Source);
end;

function TcxLookupGridColumn.DefaultCaption: string;
begin
  Result := '';
end;

function TcxLookupGridColumn.DefaultRepositoryItem: TcxEditRepositoryItem;
begin
  Result := GetDefaultEditDataRepositoryItems.GetDefaultItem;
end;

function TcxLookupGridColumn.DefaultWidth: Integer;
begin
  Result := 64;
end;

function TcxLookupGridColumn.GetContentFont: TFont;
begin
  if Grid <> nil then
    Result := Grid.ViewInfo.GetContentFont
  else
    Result := nil; 
end;

function TcxLookupGridColumn.GetInternalDefaultRepositoryItem: TcxEditRepositoryItem;
begin
  Result := DefaultRepositoryItem;
  if Result = nil then
  begin
    if FInternalDefaultRepositoryItem = nil then
      FInternalDefaultRepositoryItem := TcxEditRepositoryTextItem.Create(nil);
    Result := FInternalDefaultRepositoryItem;
  end;
end;

function TcxLookupGridColumn.GetRepositoryItem: TcxEditRepositoryItem;
begin
  if RepositoryItem <> nil then
    Result := RepositoryItem
  else
    Result := GetInternalDefaultRepositoryItem;
end;

function TcxLookupGridColumn.IsLeft: Boolean;
begin
  Result := Index = 0;
end;

function TcxLookupGridColumn.IsRight: Boolean;
begin
  Result := Index = Collection.Count - 1;
end;

procedure TcxLookupGridColumn.RestoreDefaults;
begin
  FIsCaptionAssigned := False;
  FIsWidthAssigned := False;
  FHeaderAlignment := taLeftJustify;
  FMinWidth := cxLookupGridColumnDefaultMinWidth;
  FFixed := False;
  FSorting := True;
  Changed(False);
end;

// IUnknown

function TcxLookupGridColumn.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  if GetInterface(IID, Obj) then
    Result := S_OK
  else
    Result := E_NOINTERFACE;
end;

function TcxLookupGridColumn._AddRef: Integer;
begin
  Result := -1;   // -1 indicates no reference counting is taking Position
end;

function TcxLookupGridColumn._Release: Integer;
begin
  Result := -1;   // -1 indicates no reference counting is taking Position
end;

// IcxEditRepositoryItemListener

procedure TcxLookupGridColumn.ItemRemoved(Sender: TcxEditRepositoryItem);
begin
  RepositoryItem := nil;
end;

procedure TcxLookupGridColumn.PropertiesChanged(Sender: TcxEditRepositoryItem);
begin
  Changed(False);
end;

procedure TcxLookupGridColumn.CheckWidthValue(var Value: Integer);
begin
  if Value < FMinWidth then
    Value := FMinWidth;
end;

function TcxLookupGridColumn.GetDefaultValuesProviderClass: TcxCustomEditDefaultValuesProviderClass;
begin
  Result := TcxLookupGridDefaultValuesProvider;
end;

function TcxLookupGridColumn.GetValueTypeClass: TcxValueTypeClass;
begin
  if Grid <> nil then
    Result := Grid.FDataController.GetItemValueTypeClass(Index)
  else
    Result := nil; 
end;

procedure TcxLookupGridColumn.SetIndex(Value: Integer);
begin
  inherited SetIndex(Value);
  if Grid <> nil then
    Grid.FDataController.UpdateItemIndexes;
end;

procedure TcxLookupGridColumn.SetValueTypeClass(Value: TcxValueTypeClass);
begin
  if Grid <> nil then
    Grid.FDataController.ChangeValueTypeClass(Index, Value);
end;

function TcxLookupGridColumn.GetCaption: string;
begin
  if FIsCaptionAssigned then
    Result := FCaption
  else
    Result := DefaultCaption;
end;

function TcxLookupGridColumn.GetDataController: TcxCustomDataController;
begin
  Result := TcxCustomDataController(Grid.FDataController)
end;

function TcxLookupGridColumn.GetGrid: TcxCustomLookupGrid;
begin
  Result := TcxLookupGridColumns(Collection).Grid;
end;

function TcxLookupGridColumn.GetMinWidth: Integer;
begin
  Result := FMinWidth;
end;

function TcxLookupGridColumn.GetProperties: TcxCustomEditProperties;
begin
  Result := GetRepositoryItem.Properties;
end;

function TcxLookupGridColumn.GetSortOrder: TcxDataSortOrder;
begin
  if Grid <> nil then
    Result := Grid.FDataController.GetItemSortOrder(Index)
  else
    Result := soNone;
end;

function TcxLookupGridColumn.GetWidth: Integer;
begin
  if FIsWidthAssigned then
    Result := FWidth
  else
    Result := DefaultWidth;
end;

function TcxLookupGridColumn.IsCaptionStored: Boolean;
begin
  Result := FIsCaptionAssigned;
end;

function TcxLookupGridColumn.IsWidthStored: Boolean;
begin
  Result := FIsWidthAssigned;
end;

procedure TcxLookupGridColumn.SetCaption(const Value: string);
begin
  FCaption := Value;
  FIsCaptionAssigned := True;
  Changed(False);
end;

procedure TcxLookupGridColumn.SetFixed(Value: Boolean);
begin
  if FFixed <> Value then
  begin
    FFixed := Value;
    Changed(False);
  end;
end;

procedure TcxLookupGridColumn.SetHeaderAlignment(Value: TAlignment);
begin
  if FHeaderAlignment <> Value then
  begin
    FHeaderAlignment := Value;
    Changed(False);
  end;
end;

procedure TcxLookupGridColumn.SetMinWidth(Value: Integer);
begin
  if Value < 0 then Value := 0;
  if FMinWidth <> Value then
  begin
    FMinWidth := Value;
    if Width < FMinWidth then
      Width := FMinWidth;
    Changed(False);
  end;
end;

procedure TcxLookupGridColumn.SetRepositoryItem(Value: TcxEditRepositoryItem);
begin
  if FRepositoryItem <> Value then
  begin
    if FRepositoryItem <> nil then
      FRepositoryItem.RemoveListener(Self);
    FRepositoryItem := Value;
    if FRepositoryItem <> nil then
      FRepositoryItem.AddListener(Self);
    PropertiesChanged(FRepositoryItem);
  end;
end;

procedure TcxLookupGridColumn.SetSorting(Value: Boolean);
begin
  if FSorting <> Value then
  begin
    FSorting := Value;
    Changed(False);
  end;
end;

procedure TcxLookupGridColumn.SetSortOrder(Value: TcxDataSortOrder);
begin
  if Grid <> nil then
    Grid.FDataController.ChangeSorting(Index, Value);
end;

procedure TcxLookupGridColumn.SetWidth(Value: Integer);
begin
  CheckWidthValue(Value);
  FWidth := Value;
  FIsWidthAssigned := True;
  Changed(False);
end;

{ TcxLookupGridColumns }

constructor TcxLookupGridColumns.Create(AGrid: TcxCustomLookupGrid;
  AColumnClass: TcxLookupGridColumnClass);
begin
  inherited Create(AColumnClass);
  FGrid := AGrid;
end;

function TcxLookupGridColumns.Add: TcxLookupGridColumn;
begin
  Result := TcxLookupGridColumn(inherited Add);
end;

procedure TcxLookupGridColumns.BeginUpdate;
begin
  if (Grid <> nil) and not (csDestroying in Grid.ComponentState) then
    Grid.BeginUpdate;
  inherited;
end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?