⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 customdrawtableviewdemomain.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 3 页
字号:

  if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
    AIndicatorKind := ikNone
  else
    AIndicatorKind := TcxGridIndicatorRowItemViewInfo(AViewInfo).IndicatorKind;

  case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaIndicatorCell)] of
    cdsBkImage:
    begin
      ACanvas.Brush.Bitmap := nil;
      ACanvas.Brush.Assign(FGridBrushMasterIndicatorCell);
      ACanvas.FillRect(ARec);
      ACanvas.Brush.Bitmap := nil;
    end;
    cdsGradient:
    begin
      AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)] = csGold);
      DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)]), 0], 40, AIsVertical)
    end;
  end;
  if AIndicatorKind <> ikNone then
  begin
    with imIndicatorImages, ARec do
    begin
      X := (Left + Right - Width) div 2;
      Y := (Top + Bottom - Height) div 2;
    end;
    imIndicatorImages.Draw(ACanvas.Canvas, X, Y, IndicatorImageIndex[vtMaster], True);
  end;

  ADone := not (FCustomDrawingStyle[Integer(vtMaster), Integer(cdaIndicatorCell)] in [cdsDefaultDrawing]);
end;

procedure TCustomDrawTableViewDemoMainForm.miExitClick(Sender: TObject);
begin
  Close;
end;

procedure TCustomDrawTableViewDemoMainForm.miNativeStyleClick(Sender: TObject);
begin
  with LookAndFeelController do
  begin
    NativeStyle := not NativeStyle;
    (Sender as TMenuItem).Checked := NativeStyle;
  end;  
end;

procedure TCustomDrawTableViewDemoMainForm.miLookAndFeelKindClick(Sender: TObject);
begin
  LookAndFeelController.Kind := TcxLookAndFeelKind(TMenuItem(Sender).MenuIndex);
  (Sender as TMenuItem).Checked := True;
end;

procedure TCustomDrawTableViewDemoMainForm.FormShow(Sender: TObject);
begin
  CustomDrawTableViewDemoStylesEditorForm.Show;
end;

procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
  ARec: TRect;
  ATextToDraw: String;
  AIsVertical: Boolean;
  val: String;
begin
  ATextToDraw := AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index];
  ARec := AViewInfo.Bounds;
  ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaCell)]);
  case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaCell)] of
    cdsBkImage:
    begin
      ACanvas.Brush.Bitmap := nil;
      ACanvas.Brush.Assign(FGridBrushDetailCell);
      ACanvas.Canvas.FillRect(ARec);
      ACanvas.Brush.Bitmap := nil;
    end;
    cdsGradient:
    begin
      AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaCell)] = csGold);
      DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaCell)]), 0], 40, AIsVertical)
    end;
    cdsDependOnData:
    begin
      ACanvas.Canvas.Brush.Style := bsSolid;
      ACanvas.Canvas.Brush.Color := clBlueLight;

      val := VarAsType(AViewInfo.GridRecord.DisplayTexts[tvOrdersPaymentType.Index], varString);
      if val = 'Master Card' then
        ACanvas.Canvas.Font.Color := clRed
      else
      if val = 'American Express' then
        ACanvas.Canvas.Font.Color := clBlue
      else
      if val = 'Cash' then
        ACanvas.Canvas.Font.Color := clGreen;
      if val = 'Visa Card' then
        ACanvas.Canvas.Font.Color := clFuchsia;
      ACanvas.Canvas.FillRect(ARec);
    end;
  end;

  SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);

  ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaCell)] in [cdsDefaultDrawing, cdsDependOnData]);
  if ADone then
  begin
    InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
    ACanvas.DrawText(ATextToDraw, ARec, 0);
  end;
end;

procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawGroupCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableCellViewInfo; var ADone: Boolean);
var
  ARec: TRect;
  ATextToDraw: String;
  AIsVertical: Boolean;
begin
  ATextToDraw := AViewInfo.Text;
  ARec := AViewInfo.Bounds;
  ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaGroupCell)]);
  case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaGroupCell)] of
    cdsBkImage:
    begin
      ACanvas.Brush.Bitmap := nil;
      ACanvas.Brush.Assign(FGridBrushDetailGroupCell);
      ACanvas.Canvas.FillRect(ARec);
      ACanvas.Brush.Bitmap := nil;
    end;
    cdsGradient:
    begin
      AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)] = csGold);
      DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 0], 40, AIsVertical)
    end;
  end;

  SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);

  ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaGroupCell)] in [cdsDefaultDrawing]);
  if ADone then
  begin
    ARec.Left := ARec.Left + (AViewInfo.RecordViewInfo.ExpandButtonBounds.Right - AViewInfo.RecordViewInfo.ExpandButtonBounds.Left) + 10;
    ARec.Top := ARec.Top + cxGridCellTextOffset;
    ACanvas.DrawText(ATextToDraw, ARec, 0);
  end;
end;

procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawIndicatorCell(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
var
  ARec: TRect;
  AIsVertical: Boolean;
  AIndicatorKind: TcxIndicatorKind;
  X, Y: Integer;
begin
  ARec := AViewInfo.Bounds;
  ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaIndicatorCell)]);

  if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
    AIndicatorKind := ikNone
  else
    AIndicatorKind := TcxGridIndicatorRowItemViewInfo(AViewInfo).IndicatorKind;

  case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaIndicatorCell)] of
    cdsBkImage:
    begin
      ACanvas.Brush.Bitmap := nil;
      ACanvas.Brush.Assign(FGridBrushDetailIndicatorCell);
      ACanvas.FillRect(ARec);
      ACanvas.Brush.Bitmap := nil;
    end;
    cdsGradient:
    begin
      AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)] = csGold);
      DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)]), 0], 40, AIsVertical)
    end;
  end;
  if AIndicatorKind <> ikNone then
  begin
    with imIndicatorImages, ARec do
    begin
      X := (Left + Right - Width) div 2;
      Y := (Top + Bottom - Height) div 2;
    end;
    imIndicatorImages.Draw(ACanvas.Canvas, X, Y, IndicatorImageIndex[vtDetail], True);
  end;

  ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaIndicatorCell)] in [cdsDefaultDrawing]);
end;

procedure TCustomDrawTableViewDemoMainForm.miCustomDrawEditorClick(
  Sender: TObject);
begin
  CustomDrawTableViewDemoStylesEditorForm.Show;
end;

procedure TCustomDrawTableViewDemoMainForm.SetCustomDrawingStyle(
  AViewType: TViewType; ACustomDrawArea: TCustomDrawArea;
  const Value: TCustomDrawingStyle);
begin
  if FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)] <> Value then
  begin
    FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)] := Value;
    case AViewType of
      vtMaster:
      begin
        tvCars.LayoutChanged(False);
        tvCars.Painter.Invalidate;
      end;
      vtDetail:
      begin
        tvOrders.LayoutChanged(False);
        tvOrders.Painter.Invalidate;
      end;
    end;
  end
end;

function TCustomDrawTableViewDemoMainForm.GetCustomDrawingStyle(
  AViewType: TViewType;
  ACustomDrawArea: TCustomDrawArea): TCustomDrawingStyle;
begin
  Result := FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)];
end;

procedure TCustomDrawTableViewDemoMainForm.SetCustomDrawingStyles;
var
  i, j: Integer;
begin
  FGridBrushMasterCell := TBrush.Create;
  FGridBrushMasterGroupCell := TBrush.Create;
  FGridBrushMasterFooterCell := TBrush.Create;
  FGridBrushMasterColumnHeader := TBrush.Create;
  FGridBrushMasterIndicatorCell := TBrush.Create;
  FGridBrushMasterPartBackground := TBrush.Create;

  FGridBrushDetailCell := TBrush.Create;
  FGridBrushDetailGroupCell := TBrush.Create;
  FGridBrushDetailFooterCell := TBrush.Create;
  FGridBrushDetailColumnHeader := TBrush.Create;
  FGridBrushDetailIndicatorCell := TBrush.Create;
  FGridBrushDetailPartBackground := TBrush.Create;
  FIndicatorImageIndex[Integer(vtMaster)] := 0;
  FIndicatorImageIndex[Integer(vtDetail)] := 0;
  for i:=0 to 1 do
    for j:=0 to 5 do
      FBkImages[1, j] := bkiTile;

  FGridBrushMasterCell.Bitmap := FTileBitmap;
  FGridBrushMasterGroupCell.Bitmap := FTileBitmap;
  FGridBrushMasterColumnHeader.Bitmap := FTileBitmap;
  FGridBrushMasterFooterCell.Bitmap := FTileBitmap;
  FGridBrushMasterIndicatorCell.Bitmap := FTileBitmap;
  FGridBrushMasterPartBackground.Bitmap := FTileBitmap;
  FGridBrushDetailCell.Bitmap := FTileBitmap;
  FGridBrushDetailGroupCell.Bitmap := FTileBitmap;
  FGridBrushDetailColumnHeader.Bitmap := FTileBitmap;
  FGridBrushDetailFooterCell.Bitmap := FTileBitmap;
  FGridBrushDetailIndicatorCell.Bitmap := FTileBitmap;
  FGridBrushDetailPartBackground.Bitmap := FTileBitmap;

  FColorScheme[Integer(vtMaster), 0] := csBlue;
  FColorScheme[Integer(vtDetail), 1] := csBlue;
  for i:=0 to 1 do
    for j:=0 to 5 do
      FCustomDrawingStyle[i, j] := cdsGradient;
end;

procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawColumnHeader(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
var
  ARec: TRect;
  ATextToDraw: String;
  AIsVertical: Boolean;
begin
  ATextToDraw := AViewInfo.Text;
  ARec := AViewInfo.Bounds;
  ACanvas.Canvas.Font.Assign(FFonts[Integer(vtMaster), Integer(cdaColumnHeader)]);
  case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaColumnHeader)] of
    cdsBkImage:
    begin
      ACanvas.Brush.Bitmap := nil;
      ACanvas.Brush.Assign(FGridBrushMasterColumnHeader);
      ACanvas.FillRect(ARec);
      ACanvas.Brush.Bitmap := nil;
    end;
    cdsGradient:
    begin
      AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)] = csGold);
      DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)]), 0], 40, AIsVertical)
    end;
  end;

  InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
  SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
  ACanvas.DrawText(ATextToDraw, ARec, 0);

  ADone := FCustomDrawingStyle[Integer(vtMaster), Integer(cdaColumnHeader)] <> cdsDefaultDrawing;
end;

procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawFooterCell(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
var
  ARec: TRect;
  ATextToDraw: String;
  AIsVertical: Boolean;
begin
  ATextToDraw := AViewInfo.Text;
  ARec := AViewInfo.Bounds;
  ACanvas.Canvas.Font.Assign(FFonts[Integer(vtMaster), Integer(cdaFooterCell)]);
  case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaFooterCell)] of
    cdsBkImage:
    begin
      ACanvas.Brush.Bitmap := nil;
      ACanvas.Brush.Assign(FGridBrushMasterFooterCell);
      ACanvas.Canvas.FillRect(ARec);
      ACanvas.Brush.Bitmap := nil;
    end;
    cdsGradient:
    begin
      AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)] = csGold);
      DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster),
        Integer(cdaFooterCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)]), 0], 40, AIsVertical)

⌨️ 快捷键说明

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