📄 customdrawdemomain.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CustomDrawDemoMain.h"
#include "CustomDrawDemoData.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cxLookAndFeels"
#pragma link "DemoBasicMain"
#pragma link "cxControls"
#pragma link "cxDBVGrid"
#pragma link "cxEdit"
#pragma link "cxEditRepositoryItems"
#pragma link "cxGraphics"
#pragma link "cxInplaceContainer"
#pragma link "cxStyles"
#pragma link "cxVGrid"
#pragma link "cxBlobEdit"
#pragma link "cxCheckBox"
#pragma link "cxHyperLinkEdit"
#pragma link "cxImageComboBox"
#pragma resource "*.dfm"
#include "CustomDrawDemoEditor.h"
TCustomDrawDemoMainForm *CustomDrawDemoMainForm;
//---------------------------------------------------------------------------
__fastcall TcxCustomDrawInfo::TcxCustomDrawInfo(TControl* AControl)
{
FControl = AControl;
FBitmaps = new TList();
LoadResourceBitmaps();
FDefaultFont = new TFont();
FCustomDrawData = new TList();
}
//---------------------------------------------------------------------------
void TcxCustomDrawInfo::LoadResourceBitmaps()
{
Graphics::TBitmap *ABitmap;
for (int I = 0; I < BkImageCount; I++){
ABitmap = new Graphics::TBitmap();
LoadImageFromRes(ABitmap, BkImageResNames[I]);
FBitmaps->Add(ABitmap);
}
}
//---------------------------------------------------------------------------
__fastcall TcxCustomDrawInfo::~TcxCustomDrawInfo(void)
{
for (int I = 0; I < FCustomDrawData->Count; I++)
delete (TcxItemCustomDrawInfo*)FCustomDrawData->Items[I];
for (int I = 0; I < FBitmaps->Count; I++)
delete (Graphics::TBitmap*)FBitmaps->Items[I];
delete FCustomDrawData;
delete FBitmaps;
delete FDefaultFont;
}
//---------------------------------------------------------------------------
void TcxCustomDrawInfo::AddNewItem(TCustomDrawArea ADrawArea,
TcxItemCustomDrawType AItemType)
{
FCustomDrawData->Add(new TcxItemCustomDrawInfo(this, ADrawArea, AItemType));
}
//---------------------------------------------------------------------------
TcxItemCustomDrawInfo* TcxCustomDrawInfo::GetItemByIndex(int AIndex)
{
return ((TcxItemCustomDrawInfo*)FCustomDrawData->Items[AIndex]);
}
//---------------------------------------------------------------------------
Graphics::TBitmap* TcxCustomDrawInfo::GetBkBitmap(TBkImage ABkImage)
{
return (Graphics::TBitmap*)FBitmaps->Items[int(ABkImage)];
}
//---------------------------------------------------------------------------
int TcxCustomDrawInfo::GetCount(void)
{
return FCustomDrawData->Count;
}
//---------------------------------------------------------------------------
TcxItemCustomDrawInfo* TcxCustomDrawInfo::GetItem(TCustomDrawArea ADrawArea)
{
TcxItemCustomDrawInfo *Result = NULL;
for (int I = 0; I < FCustomDrawData->Count; I++)
if (((TcxItemCustomDrawInfo*)FCustomDrawData->Items[I])->DrawArea == ADrawArea){
Result = ((TcxItemCustomDrawInfo*)FCustomDrawData->Items[I]);
break;
}
return Result;
}
//---------------------------------------------------------------------------
__fastcall TcxItemCustomDrawInfo::TcxItemCustomDrawInfo(TcxCustomDrawInfo *AOwner,
TCustomDrawArea ADrawArea, TcxItemCustomDrawType AItemType)
{
FOwner = AOwner;
FDrawArea = ADrawArea;
FItemType = AItemType;
if (FOwner != NULL)
FBitmap = AOwner->Bitmaps[TBkImage(0)];
else
FBitmap = NULL;
if (FOwner != NULL)
FFont = AOwner->DefaultFont;
else
FBitmap = NULL;
FBkImageType = (TBkImage)0;
FDrawingStyle = (TCustomDrawingStyle)0;
FColorScheme = (TcxColorScheme)0;
FIsBitmapAssigned = false;
FIsFontAssigned = false;
}
//---------------------------------------------------------------------------
__fastcall TcxItemCustomDrawInfo::~TcxItemCustomDrawInfo()
{
if (FIsBitmapAssigned)
delete FBitmap;
if (FIsFontAssigned)
delete FFont;
}
//---------------------------------------------------------------------------
Graphics::TBitmap* TcxItemCustomDrawInfo::GetBitmap()
{
if ((FBkImageType != bkiUserDefined || !FIsBitmapAssigned) &&
(FOwner != NULL))
return FOwner->Bitmaps[FBkImageType];
else
return FBitmap;
}
//---------------------------------------------------------------------------
TFont* TcxItemCustomDrawInfo::GetFont()
{
return FFont;
}
//---------------------------------------------------------------------------
void TcxItemCustomDrawInfo::SetBitmap(Graphics::TBitmap *Value)
{
if (FIsBitmapAssigned)
delete FBitmap;
FBitmap = Value;
FIsBitmapAssigned = true;
FBkImageType = bkiUserDefined;
}
//---------------------------------------------------------------------------
void TcxItemCustomDrawInfo::SetFont(TFont *Value)
{
((TControlAccess*)Owner->Control)->Font = Value;
if (FIsFontAssigned)
delete FFont;
FFont = Value;
FIsFontAssigned = true;
}
//---------------------------------------------------------------------------
__fastcall TCustomDrawDemoMainForm::TCustomDrawDemoMainForm(TComponent* Owner)
: TDemoBasicMainForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::FormCreate(TObject *Sender)
{
FCustomDrawInfo = new TcxCustomDrawInfo(cxDBVerticalGrid);
AddCustomDrawInfos();
AdjustCustomDrawItems();
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::FormShow(TObject *Sender)
{
cxDBVerticalGrid->FullExpand();
CustomDrawDemoEditorForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::actCustomizationFormExecute(
TObject *Sender)
{
CustomDrawDemoEditorForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::cxDBVerticalGridDrawBackground(
TObject *Sender, TcxCanvas *ACanvas, const TRect &R,
const TcxViewParams &AViewParams, bool &Done)
{
Done = DrawBackgroundItem(FCustomDrawInfo->Items[cdaBackground], ACanvas, R, AViewParams, Sender);
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::cxDBVerticalGridDrawRowHeader(
TObject *Sender, TcxCanvas *ACanvas, TcxvgPainter *APainter,
TcxCustomRowHeaderInfo *AHeaderViewInfo, bool &Done)
{
if (dynamic_cast<TcxEditorRowHeaderInfo*>(AHeaderViewInfo))
Done = DrawHeaderItem(FCustomDrawInfo->Items[cdaHeader], ACanvas, AHeaderViewInfo, APainter, Sender); else
if (dynamic_cast<TcxCategoryRowHeaderInfo*>(AHeaderViewInfo))
Done = DrawCategoryItem(FCustomDrawInfo->Items[cdaCategory], ACanvas, (TcxCategoryRowHeaderInfo*)AHeaderViewInfo,
APainter, Sender);
/* AHeaderViewInfo->Transparent = true;
Done = false;*/
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::cxDBVerticalGridDrawValue(
TObject *Sender, TcxCanvas *ACanvas, TcxvgPainter *APainter,
TcxRowValueInfo *AValueInfo, bool &Done)
{
Done = DrawCellItem(FCustomDrawInfo->Items[cdaCell], ACanvas, AValueInfo, APainter, Sender);
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::LayoutStyleClick(TObject *Sender)
{
if (!((TMenuItem*)Sender)->Checked) {
((TMenuItem*)Sender)->Checked = true;
cxDBVerticalGrid->LayoutStyle = (TcxvgLayoutStyle)((TMenuItem*)Sender)->Tag;
}
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::AddCustomDrawInfos()
{
FCustomDrawInfo->AddNewItem(cdaBackground, itNormal);
FCustomDrawInfo->AddNewItem(cdaCategory, itNormal);
FCustomDrawInfo->AddNewItem(cdaCell, itCell);
FCustomDrawInfo->AddNewItem(cdaHeader, itNormal);
}
//---------------------------------------------------------------------------
void __fastcall TCustomDrawDemoMainForm::AdjustCustomDrawItems()
{
FCustomDrawInfo->Items[cdaBackground]->BkImageType = bkiTile;
FCustomDrawInfo->Items[cdaCategory]->DrawingStyle = cdsGradient;
FCustomDrawInfo->Items[cdaCategory]->ColorScheme = csBlue;
FCustomDrawInfo->Items[cdaCell]->DrawingStyle = cdsGradient;
FCustomDrawInfo->Items[cdaHeader]->DrawingStyle = cdsDefaultDrawing;
}
//---------------------------------------------------------------------------
void __fastcall AddRectLines(TLineInfoList* ALines, const TRect &R, TColor AColor)
{
ALines->Add(R.Left, R.Top, R.Right - R.Left, 1, AColor);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -