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

📄 customdrawdemomain.cpp

📁 delphi的的三方控件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	ALines->Add(R.Left, R.Top, R.Bottom - R.Top, 1, AColor);
	ALines->Add(R.Right - 1, R.Top, R.Right - R.Left, 1, AColor);
	ALines->Add(R.Left, R.Bottom - 1, R.Right - R.Left, 1, AColor);
}

bool __fastcall TCustomDrawDemoMainForm::DrawCellItem(TcxItemCustomDrawInfo* AItem, TcxCanvas* ACanvas,
	  TcxRowValueInfo* AValueInfo, TcxvgPainter* APainter, TObject* Sender)
{
  TcxStyle *AStyle;     
  int i;
  ((TcxVerticalGrid*)Sender)->ViewInfo->LinesInfo->Clear();
  for (i = 0; i < ((TcxVerticalGrid*)Sender)->ViewInfo->ViewRects->BandRects->Count; i++) {
	AddRectLines(((TcxVerticalGrid*)Sender)->ViewInfo->LinesInfo,
	  ((TcxVerticalGrid*)Sender)->ViewInfo->ViewRects->BandRects->Rects[i],
	  ((TcxVerticalGrid*)Sender)->ViewInfo->BandBorderColor);
  }
  AValueInfo->Transparent = (AValueInfo->ViewParams.Bitmap != NULL) &&
	(!AValueInfo->ViewParams.Bitmap->Empty);
  if (AItem->DrawingStyle == cdsDefaultDrawing){
	APainter->DrawRowValueCell(AValueInfo);
	DrawCellsLines(ACanvas, ((TcxVerticalGrid*)Sender)->OptionsView->GridLineColor,
	  AValueInfo->BoundsRect);
	DrawRightLine(ACanvas, ((TcxVerticalGrid*)Sender)->OptionsView->GridLineColor,
	  AValueInfo->BoundsRect);
	return true;
  }
  bool Result;
  if (AItem->DrawingStyle == cdsDependsOnData)
  {
	if (VarToStr(cxDBVerticalGridCustomer->Properties->Values[AValueInfo->RecordIndex]) == "Y")
      AStyle = CustomDrawDemoDataDM->stCustomer;
    else
      AStyle = CustomDrawDemoDataDM->stNoCustomer;
    ACanvas->Brush->Color = AStyle->Color;
    ACanvas->FillRect(AValueInfo->VisibleRect, NULL, False);
    OwnerDrawText(ACanvas, AValueInfo, AStyle->TextColor, AStyle->Font);
    DrawCellsLines(ACanvas, ((TcxVerticalGrid*)Sender)->OptionsView->GridLineColor,
      AValueInfo->BoundsRect);
    Result = true;
  }
  else{
    Result = DrawItem(AItem, ACanvas, cxRectInflate(AValueInfo->BoundsRect, 0, 0, 1, 1),
      (int)AItem->ColorScheme > 1);
    if (AItem->OwnerTextDraw)
      Result = Result & OwnerDrawText(ACanvas, AValueInfo, clGray, AItem->Font);
    else{
      AValueInfo->Transparent = true;
      Result = false;
    }
  }
  return Result;
}

bool __fastcall TCustomDrawDemoMainForm::OwnerDrawText(TcxCanvas* ACanvas,
  TcxRowValueInfo* AValueInfo, TColor ALineColor, TFont *AFont)
{
  bool Result = false;
  ACanvas->Pen->Color = ALineColor;
  ACanvas->Brush->Style = bsClear;
  ACanvas->Font = AFont;
  TRect ARect = cxRectInflate(AValueInfo->BoundsRect, -1, 0, 0, -1);
  ACanvas->Canvas->Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
  if (dynamic_cast<TcxCustomCheckBoxViewInfo*>(AValueInfo->EditViewInfo) != 0){
    AValueInfo->Transparent = true;
  }
  else
    if (dynamic_cast<TcxCustomTextEditViewInfo*>(AValueInfo->EditViewInfo) != 0){
      ACanvas->DrawTexT(((TcxCustomTextEditViewInfo*)AValueInfo->EditViewInfo)->Text,
        cxRectInflate(AValueInfo->BoundsRect, -2, -2), 0, true);
      Result = true;
    }
  return Result;
}

//---------------------------------------------------------------------------

bool __fastcall TCustomDrawDemoMainForm::DrawHeaderItem(TcxItemCustomDrawInfo* AItem, TcxCanvas* ACanvas,
      TcxCustomRowHeaderInfo* AHeaderViewInfo, TcxvgPainter* APainter, TObject* Sender)
{
  bool Result;
  TRect ARect;
  ((TcxVerticalGrid*)Sender)->ViewInfo->LinesInfo->Clear();
  if ((AItem->DrawingStyle == cdsDefaultDrawing)){
    APainter->DrawRowHeader(AHeaderViewInfo);
    DrawIndents(AHeaderViewInfo, cdaHeader, ACanvas, AHeaderViewInfo->ViewParams,
      APainter, AHeaderViewInfo->RowIndents);
    Result = true;
  }
  else{
    ARect = cxRectInflate(AHeaderViewInfo->HeaderRect, 0, 0, 1, 1);
    ARect.Left = AHeaderViewInfo->RowIndents->Items[0]->Bounds.Left;
    DrawItem(FCustomDrawInfo->Items[cdaHeader], ACanvas, ARect, (int)AItem->ColorScheme > 1);
    AHeaderViewInfo->Transparent = true;
    Result = false;
  }

  TcxViewParams ACategoryViewParams;
  ACategoryViewParams.Bitmap = cxDBVerticalGrid->Styles->Category->Bitmap;
  ACategoryViewParams.Color = cxDBVerticalGrid->Styles->Category->Color;
  DrawIndents(AHeaderViewInfo, cdaCategory, ACanvas, ACategoryViewParams,
    APainter, AHeaderViewInfo->CategoryIndents);
  if ((FCustomDrawInfo->Items[cdaHeader]->DrawingStyle == cdsDefaultDrawing) ||
     (FCustomDrawInfo->Items[cdaCategory]->DrawingStyle == cdsDefaultDrawing)){
    DrawRightLine(ACanvas, ((TcxVerticalGrid*)Sender)->OptionsView->GridLineColor,
      AHeaderViewInfo->HeaderRect);
    if (cxRectIsNull(AHeaderViewInfo->HeaderCellsRect))
      ARect =
         AHeaderViewInfo->RowIndents->Items[AHeaderViewInfo->RowIndents->Count - 1]->Bounds;
    else
      ARect = AHeaderViewInfo->HeaderCellsRect;
    TLineInfos ALineInfo = GetAdditionalLines((TcxDBVerticalGrid*)Sender, AHeaderViewInfo);
    DrawDefaultLines(ACanvas, ((TcxVerticalGrid*)Sender)->OptionsView->GridLineColor,
      AHeaderViewInfo, ARect, ALineInfo);
  }
  AHeaderViewInfo->LinesInfo->Clear();
  return Result;
}
//---------------------------------------------------------------------------

void __fastcall TCustomDrawDemoMainForm::DrawIndents(TcxCustomRowHeaderInfo* AHeaderViewInfo,
  TCustomDrawArea ACustomDrawArea, TcxCanvas* ACanvas, TcxViewParams AViewParams,
  TcxvgPainter* APainter, TIndentInfoList* AIndentInfoList)
{
  if (FCustomDrawInfo->Items[ACustomDrawArea]->DrawingStyle == cdsDefaultDrawing)
    for (int I = 0; I < AIndentInfoList->Count; I++){
      TIndentInfo *AInfo = AIndentInfoList->Items[I];
      APainter->Canvas->Brush->Color = AViewParams.Color;
      APainter->FillRect(cxRectInflate(AInfo->Bounds, 0, 0, 0, 1), AInfo->ViewParams.Bitmap);
    }
  else
  for (int I = 0; I < AIndentInfoList->Count; I++)
    DrawItem(FCustomDrawInfo->Items[ACustomDrawArea], ACanvas,
      cxRectInflate(AIndentInfoList->Items[I]->Bounds, 0, 0, 0, 1),  true);
}
//---------------------------------------------------------------------------

void __fastcall TCustomDrawDemoMainForm::DrawCellsLines(TcxCanvas* ACanvas,
  TColor AColor, TRect ARect)
{
  ACanvas->Brush->Color = AColor;
  ACanvas->FillRect(cxRectBounds(ARect.Left, ARect.Top - 1, ARect.Right - ARect.Left + 1, 1), NULL, False);
  ACanvas->FillRect(cxRectBounds(ARect.Left, ARect.Bottom, ARect.Right - ARect.Left + 1, 1), NULL, False);
}
//---------------------------------------------------------------------------

TLineInfos __fastcall TCustomDrawDemoMainForm::GetAdditionalLines(TcxDBVerticalGrid* Sender,
  TcxCustomRowHeaderInfo* AHeaderViewInfo)
{
  TLineInfos Result = TLineInfos();
  if (Sender->LayoutStyle != lsBandsView) return Result;
  for (int I = 0; I < Sender->ViewInfo->BandInfo->Count; I++)
    if (Sender->ViewInfo->BandInfo->Items[I].FirstRow == AHeaderViewInfo->Row){
      Result << liTop;
      if (Sender->ViewInfo->BandInfo->Items[I].RowsCount == 1)
        Result << liBottom;
    }
  for (int I = 0; I < Sender->ViewInfo->BandInfo->Count; I++)
    if ((Sender->PrevVisibleRow(Sender->ViewInfo->BandInfo->Items[I].FirstRow)
        == AHeaderViewInfo->Row) || (Sender->LastVisibleRow() == AHeaderViewInfo->Row)){
      Result << liBottom;
      break;
    }
  return Result;
}
//---------------------------------------------------------------------------

void __fastcall TCustomDrawDemoMainForm::DrawDefaultLines(TcxCanvas* ACanvas, TColor AColor,
      TcxCustomRowHeaderInfo* AHeaderViewInfo, TRect ARect, TLineInfos ALineInfos)
{
  FillRects(ALineInfos, AHeaderViewInfo, ACanvas, AColor);
  DrawCellsLines(ACanvas, AColor, ARect);
}
//---------------------------------------------------------------------------

void __fastcall TCustomDrawDemoMainForm::DrawRightLine(TcxCanvas* ACanvas, TColor AColor,
      TRect ARect)
{
  ACanvas->Brush->Color = AColor;
  ACanvas->FillRect(cxRectBounds(ARect.Right, ARect.Top, 1, ARect.Bottom - ARect.Top), NULL, False);
}
//---------------------------------------------------------------------------

bool __fastcall TCustomDrawDemoMainForm::DrawItem(TcxItemCustomDrawInfo *AItem, TcxCanvas *ACanvas,
  const TRect &R, bool AHorizontal)
{
  switch(AItem->DrawingStyle) {
    case cdsBkImage:
       ACanvas->FillRect(R, AItem->Bitmap, False); break;
    case cdsGradient:
      DrawGradient(ACanvas->Canvas, R,
        (TColor)ColorScheme[(int)AItem->ColorScheme][1],
        (TColor)ColorScheme[(int)AItem->ColorScheme][0],
        40, AHorizontal);
     break;
  };
  return (AItem->DrawingStyle != cdsDefaultDrawing);
}
//---------------------------------------------------------------------------

bool  __fastcall TCustomDrawDemoMainForm::DrawBackgroundItem(TcxItemCustomDrawInfo* AItem,
  TcxCanvas* ACanvas, const TRect R, TcxViewParams AViewParams, TObject* Sender)
{
  bool Result = false;
  if (AItem->DrawingStyle != cdsDefaultDrawing)
    Result = DrawItem(AItem, ACanvas, R, (int)AItem->ColorScheme > 1);
  return Result;
}
//---------------------------------------------------------------------------

bool TCustomDrawDemoMainForm::DrawCategoryItem(TcxItemCustomDrawInfo* AItem, TcxCanvas* ACanvas,
    TcxCategoryRowHeaderInfo* ACategoryViewInfo, TcxvgPainter* APainter, TObject* Sender)
{
  bool Result;
  ((TcxVerticalGrid*)Sender)->ViewInfo->LinesInfo->Clear();
  if (ACategoryViewInfo->RowIndents->Count > 0) {
    if (FCustomDrawInfo->Items[cdaHeader]->DrawingStyle != cdsDefaultDrawing) {
      int ADelta = ACategoryViewInfo->RowIndents->Items[0]->Bounds.Left - ACategoryViewInfo->HeaderRect.Left;
      TRect ARect = ACategoryViewInfo->HeaderRect;
      ARect.Left = ACategoryViewInfo->RowIndents->Items[0]->Bounds.Left;
      ARect.Right = ARect.Left + (((TcxVerticalGrid*)Sender)->ViewInfo->FullHeaderWidth - ADelta);
      DrawItem(FCustomDrawInfo->Items[cdaHeader], ACanvas, cxRectInflate(ARect, 0, 0, 0, 1), (int)FCustomDrawInfo->Items[cdaHeader]->ColorScheme > 1);
    }
    else {
      TcxViewParams ARowViewParams;
      ARowViewParams.Bitmap = cxDBVerticalGrid->Styles->Header->Bitmap;
      ARowViewParams.Color = cxDBVerticalGrid->Styles->Header->Color;
      DrawIndents(ACategoryViewInfo, cdaHeader, ACanvas, ARowViewParams, APainter, ACategoryViewInfo->RowIndents);
    }
  }
  if (AItem->DrawingStyle == cdsDefaultDrawing) {
    APainter->DrawRowHeader(ACategoryViewInfo);
    APainter->DrawRowHeaderCell(ACategoryViewInfo->CaptionsInfo->Items[0], false);
    Result = true;
  }
  else {
    DrawItem(AItem, ACanvas, cxRectInflate(ACategoryViewInfo->HeaderCellsRect, 0, 0, 1, 1), Integer(AItem->ColorScheme) > 1);
    ACategoryViewInfo->Transparent = true;
    Result = false;
  }
  DrawIndents(ACategoryViewInfo, cdaCategory, ACanvas, ACategoryViewInfo->ViewParams,
    APainter, ACategoryViewInfo->CategoryIndents);

  if ((FCustomDrawInfo->Items[cdaHeader]->DrawingStyle == cdsDefaultDrawing) ||
    (FCustomDrawInfo->Items[cdaCategory]->DrawingStyle == cdsDefaultDrawing)) {
    DrawRightLine(ACanvas, ((TcxVerticalGrid*)Sender)->OptionsView->GridLineColor, ACategoryViewInfo->HeaderRect);
    TLineInfos ALineInfo = GetAdditionalLines((TcxDBVerticalGrid*)Sender, ACategoryViewInfo);
    DrawDefaultLines(ACanvas, ((TcxVerticalGrid*)Sender)->OptionsView->GridLineColor, ACategoryViewInfo,
      ACategoryViewInfo->HeaderCellsRect, ALineInfo);
  }
  ACategoryViewInfo->LinesInfo->Clear();
  return Result;    
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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