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

📄 editorsstylesdemostylespalette.cpp

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "EditorsStylesDemoStylesPalette.h"
#include "cxEdit.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cxContainer"
#pragma link "cxControls"
#pragma link "cxEdit"
#pragma link "cxMemo"
#pragma link "cxPropertiesStore"
#pragma link "cxTextEdit"
#pragma link "EditorsStylesDemoBase"
#pragma link "cxCheckComboBox"
#pragma link "cxCheckListBox"
#pragma link "cxColorComboBox"
#pragma link "cxDropDownEdit"
#pragma link "cxFontNameComboBox"
#pragma link "cxGroupBox"
#pragma link "cxHeader"
#pragma link "cxLabel"
#pragma link "cxMaskEdit"
#pragma link "cxProgressBar"
#pragma link "cxRadioGroup"
#pragma link "cxSpinButton"
#pragma link "cxSpinEdit"
#pragma link "cxTrackBar"
#pragma link "cxCalc"
#pragma link "cxCalendar"
#pragma link "cxCheckBox"
#pragma link "cxClasses"
#pragma link "cxEditRepositoryItems"
#pragma link "cxExtEditRepositoryItems"
#pragma link "cxGrid"
#pragma link "cxGridCustomTableView"
#pragma link "cxGridCustomView"
#pragma link "cxGridLevel"
#pragma link "cxGridTableView"
#pragma link "cxStyles"
#pragma resource "*.dfm"
TEditorsStylesDemoStylesPaletteFrame *EditorsStylesDemoStylesPaletteFrame;

const ValueColumnTypeCount = vctTextStyle - vctBorderColor + 1;
const StyleCategoryCount = 4;
const String StyleValueNames[ValueColumnTypeCount] =
  {"BorderColor", "BorderStyle", "Color", "TextColor", "TextStyle"};
//TcxContainerStateItem = (csNormal, csActive, csDisabled, csHotTrack);
const int StyleCategoryOrders[csHotTrack - csNormal + 1] = {0, 2, 1, 3};


int FontStylesToInteger(TFontStyles AFontStyles)
{
  int Result = 0;
  for (int AFontStyle = fsBold; AFontStyle <= fsStrikeOut; AFontStyle++)
    if (AFontStyles.Contains((TFontStyle)AFontStyle))
      Result = Result || (1 << AFontStyle);
  return Result;
}

TFontStyles IntegerToFontStyles(int Value)
{
  TFontStyles Result = TFontStyles();
  for (int AFontStyle = fsBold; AFontStyle <= fsStrikeOut; AFontStyle++)
    if (Value && (1 << AFontStyle))
      Result << (TFontStyle)AFontStyle;
  return Result;    
}

//---------------------------------------------------------------------------
__fastcall TEditorsStylesDemoStylesPaletteFrame::TEditorsStylesDemoStylesPaletteFrame(TComponent* Owner)
  : TEditorsStylesDemoBaseFrame(Owner)
{
  FBitmap = new Graphics::TBitmap();
  FBitmap->TransparentColor = clFuchsia;
  FBitmap->Transparent = true;

  cxColorComboBox->Properties->PrepareDelphiColorList(false, false);
  HintStyle = hcstNoHint;
  FDisplayStyle = shtLightBlue;
  FTempDisplayStyle = shtLightBlue;
}
//---------------------------------------------------------------------------

__fastcall TEditorsStylesDemoStylesPaletteFrame::~TEditorsStylesDemoStylesPaletteFrame()
{
  delete FBitmap;
}
//---------------------------------------------------------------------------

void TEditorsStylesDemoStylesPaletteFrame::ChangeDisplayStyle(TcxStyleSheetType ADisplayStyle)
{
  TEditorsStylesDemoBaseFrame::ChangeDisplayStyle(ADisplayStyle);
  FDisplayStyle = FTempDisplayStyle;
}
//---------------------------------------------------------------------------

String __fastcall TEditorsStylesDemoStylesPaletteFrame::Name()
{
  return "Style Palette";
}
//---------------------------------------------------------------------------

String __fastcall TEditorsStylesDemoStylesPaletteFrame::BriefName()
{
  return "Styles";
}
//---------------------------------------------------------------------------

String TEditorsStylesDemoStylesPaletteFrame::Description()
{
  return "Style Palette Notes";
}
//---------------------------------------------------------------------------

String TEditorsStylesDemoStylesPaletteFrame::StylesIniPath()
{
  return "StylesFrmStylePalette\\";
}
//---------------------------------------------------------------------------


void __fastcall TEditorsStylesDemoStylesPaletteFrame::rgStylesPropertiesChange(
      TObject *Sender)
{
  SendMessage(gbEditors->Handle, WM_SETREDRAW, 0, 0);
  try{
    TcxStyleSheetType AStyleSheetType = (TcxStyleSheetType)((TcxRadioGroup*)Sender)->ItemIndex;
    ChangeDisplayStyle(AStyleSheetType);
    SetProgressBarBitmap(AStyleSheetType, cxProgressBar);
    AdjustCheckListGlyphs(AStyleSheetType, cxCheckListBox);
    AdjustTrackBarThumb(AStyleSheetType, cxTrackBar, FBitmap);
    InitStylesView(cxEditStyleController);
  }
  __finally{
    SendMessage(gbEditors->Handle, WM_SETREDRAW, 1, 0);
    RedrawWindow(gbEditors->Handle, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
  }
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::SetProgressBarBitmap(TcxStyleSheetType AStyleSheetType, TcxProgressBar* AProgressBar)
{
  Graphics::TBitmap* ABitmap = new Graphics::TBitmap();
  try {
    switch(AStyleSheetType) {
      case shtRainyDay: {
        ilForegroundBitmaps->GetBitmap(1, ABitmap); break; }
      case shtBrick: {
        ilForegroundBitmaps->GetBitmap(0, ABitmap); break; }
    }
    AProgressBar->Properties->ForegroundImage = ABitmap;
  }
  __finally {
    delete ABitmap;
  }
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::AdjustTrackBarThumb(TcxStyleSheetType AStyleSheetType, TcxTrackBar* ATrackBar, Graphics::TBitmap* ABitmap)
{
  switch (AStyleSheetType) {
    case shtWood:
      {
        ABitmap->LoadFromFile(StylesIniPath() + "Wood.bmp");
        ATrackBar->Properties->ThumbType = cxttCustom;
        break;
      }
    case shtDeepSea:
      {
        ABitmap->LoadFromFile(StylesIniPath() + "DeepSea.bmp");
        ATrackBar->Properties->ThumbType = cxttCustom;
        break;
      }
    default :  ATrackBar->Properties->ThumbType = cxttRegular;
  }
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::AdjustCheckListGlyphs(TcxStyleSheetType AStyleSheetType, TcxCheckListBox* ACheckListBox)
{
  ACheckListBox->Glyph = NULL;
  switch(AStyleSheetType) {
    case shtDeepSea: {
      ilCheckGlyphs->GetBitmap(0, ACheckListBox->Glyph); break; }
    case shtWood: {
      ilCheckGlyphs->GetBitmap(1, ACheckListBox->Glyph); break; }
  }
}
//---------------------------------------------------------------------------

void SetLookAndFeel(TcxEditStyleController* AEditStyleController, int AItemIndex)
{
  if (AItemIndex < 4) {
    TcxLookAndFeelKind Kind = (TcxLookAndFeelKind)AItemIndex;
    AEditStyleController->Style->LookAndFeel->Kind = Kind;
    AEditStyleController->Style->LookAndFeel->NativeStyle = false;
  } else
    AEditStyleController->Style->LookAndFeel->NativeStyle = true;
}

void __fastcall TEditorsStylesDemoStylesPaletteFrame::rgLookAndFeelPropertiesChange(
      TObject *Sender)
{
  int AItemIndex = ((TcxRadioGroup*)Sender)->ItemIndex;
  SetLookAndFeel(cxLabelStyleController, AItemIndex);
  SetLookAndFeel(cxEditStyleController, AItemIndex);

  for (int AStyleState = csNormal; AStyleState <=  csHotTrack; AStyleState++){
    cxEditStyleController->Styles[(TcxContainerStateItem)AStyleState]->AssignedValues =
      cxEditStyleController->Styles[(TcxContainerStateItem)AStyleState]->
        AssignedValues>>svBorderStyle>>svButtonStyle;
  }
  InitStylesView(cxEditStyleController);
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::cxTrackBarPropertiesDrawThumb(
      TObject *Sender, TcxCanvas *ACanvas, const TRect &ARect)
{
  ACanvas->Draw(ARect.Left, ARect.Top, FBitmap);
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::cxTrackBarPropertiesGetThumbRect(
      TObject *Sender, TRect &ARect)
{
  ARect = FBitmap->Canvas->ClipRect;
}
//---------------------------------------------------------------------------

int __fastcall TEditorsStylesDemoStylesPaletteFrame::GetStyleStartRecordIndex(
  TcxContainerStateItem AStyleState)
{
  return StyleCategoryOrders[(int)AStyleState] * ValueColumnTypeCount;
}
//---------------------------------------------------------------------------

TcxContainerStateItem __fastcall TEditorsStylesDemoStylesPaletteFrame::GetStyleStateByRecordIndex(
  int ARecordIndex)
{
  int Result;
  for (Result = csNormal; Result <= csHotTrack; Result++)
    if (ARecordIndex/ValueColumnTypeCount == StyleCategoryOrders[Result])
      break;
  return TcxContainerStateItem(Result);
}
//---------------------------------------------------------------------------

Variant __fastcall  TEditorsStylesDemoStylesPaletteFrame::GetStyleValue(
  TcxCustomContainerStyle *AStyle, TValueColumnType AValueColumnType)
{
  switch(AValueColumnType) {
    case vctBorderColor:
      return AStyle->BorderColor;
    case vctBorderStyle:
      return (int)AStyle->BorderStyle;
    case vctColor:
      return AStyle->Color;
    case vctTextColor:
      return AStyle->TextColor;
    default:
      return FontStylesToInteger(AStyle->TextStyle);
  }
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::SetStyleValue(
  TcxCustomContainerStyle *AStyle, TValueColumnType AValueColumnType, Variant Value)
{
  switch(AValueColumnType) {
    case vctBorderColor:
      AStyle->BorderColor =  (TColor)int(Value);
      break;
    case vctBorderStyle:
      AStyle->BorderStyle = (TcxContainerBorderStyle)int(Value);
      break;
    case vctColor:
      AStyle->Color = (TColor)int(Value);
      break;
    case vctTextColor:
      AStyle->TextColor = (TColor)int(Value);
      break;
    case vctTextStyle:
      AStyle->TextStyle = IntegerToFontStyles(Value);
      break;
  }
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::InitStyleRecords(
  TcxCustomContainerStyle *AStyle)
{
  int AStartRecordIndex = GetStyleStartRecordIndex(AStyle->State);
  for (int I = 0; I < ValueColumnTypeCount; I++){
    tvStyles->DataController->Values[AStartRecordIndex + I][clnStyleValue->Index] =
      GetStyleValue(AStyle, (TValueColumnType)I);
  }
}

void __fastcall TEditorsStylesDemoStylesPaletteFrame::InitStylesView(
  TcxEditStyleController *AStyleController)
{
  tvStyles->BeginUpdate();
  try{
    for (int I = csNormal; I <= csHotTrack; I++)
      InitStyleRecords(AStyleController->Styles[(TcxContainerStateItem)I]);
  }
  __finally{
    tvStyles->EndUpdate();
  }
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::InitRecords()
{
  tvStyles->BeginUpdate();
  try{
    tvStyles->DataController->RecordCount = StyleCategoryCount * ValueColumnTypeCount;
    for (int I = 0; I < tvStyles->DataController->RecordCount; I++){
      tvStyles->DataController->Values[I][clnStyleCategory->Index] =
        I / ValueColumnTypeCount;
      tvStyles->DataController->Values[I][clnStyleValueName->Index] =
        StyleValueNames[(TValueColumnType)(I % ValueColumnTypeCount)];
    }
  }
  __finally{
    tvStyles->EndUpdate();
  }
  clnStyleValueName->ApplyBestFit();
  clnStyleValue->Width = 150;
}

void __fastcall TEditorsStylesDemoStylesPaletteFrame::FormCreate(
      TObject *Sender)
{
  InitRecords();
  InitStylesView(cxEditStyleController);
  cxDateEdit->Date = Now();
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::clnStyleValueGetProperties(
      TcxCustomGridTableItem *Sender, TcxCustomGridRecord *ARecord,
      TcxCustomEditProperties *&AProperties)
{
  TValueColumnType AValueColumnType =
    (TValueColumnType)(ARecord->RecordIndex % ValueColumnTypeCount);
  switch (AValueColumnType) {
    case vctBorderColor:
    case vctColor:
    case vctTextColor:
      AProperties = eriColor->Properties;
      break;
    case vctBorderStyle:
      AProperties = eriBorderStyle->Properties;
      break;
    case vctTextStyle:
      AProperties = eriTextStyle->Properties;
  }
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::StyleValueColumnPropertiesEditValueChanged(
  TObject *Sender)
{
  int AFocusedRecordIndex = tvStyles->DataController->FocusedRecordIndex;
  SetStyleValue(
    cxEditStyleController->Styles[GetStyleStateByRecordIndex(AFocusedRecordIndex)],
    (TValueColumnType)(AFocusedRecordIndex % ValueColumnTypeCount),
    ((TcxCustomEdit*)Sender)->EditValue);
  InitStylesView(cxEditStyleController);
}
//---------------------------------------------------------------------------

void __fastcall TEditorsStylesDemoStylesPaletteFrame::cbDisableEditorsClick(
  TObject *Sender)
{
  for (int I = 0; I < gbEditors->ControlCount; I++)
    if (dynamic_cast<TcxLabel*>(gbEditors->Controls[I]) == 0 &&
      dynamic_cast<TcxCheckBox*>(gbEditors->Controls[I]) == 0)
        gbEditors->Controls[I]->Enabled = !cbDisableEditors->Checked;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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