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

📄 ribbonnotepaddemomain.cpp

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

#include <vcl.h>
#pragma hdrstop

#define HDC unsigned int

#include "RibbonNotepadDemoMain.h"
#include "RibbonNotepadDemoOptions.h"
#include "RibbonNotepadDemoGallerySetup.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cxClasses"
#pragma link "cxGraphics"
#pragma link "dxBar"
#pragma resource "*.dfm"

const
  AnAccentCount = 5;

  TColor AStandardColorMap[] =
	{(TColor)0x0000C0, (TColor)0x0000FF, (TColor)0x00C0FF, (TColor)0x00FFFF, (TColor)0x50D092, (TColor)0x50B000, (TColor)0xF0B000, (TColor)0xC07000, (TColor)0x602000, (TColor)0xA03070};

  TColorMapInfo AColorMaps[] =
  {
	{"Default", {clWindow, clWindowText, (TColor)0xD2B48C, (TColor)0x00008B, (TColor)0x0000FF, (TColor)0xFF0000, (TColor)0x556B2F, (TColor)0x800080, clAqua, (TColor)0xFFA500}},
	{"Theme1", {clWindow, clWindowText, (TColor)0x7D491F, (TColor)0xE1ECEE, (TColor)0xBD814F, (TColor)0x4D50C0, (TColor)0x59BB9B, (TColor)0xA26480, (TColor)0xC6AC4B, (TColor)0x4696F7}},
	{"Theme2", {clWindow, clWindowText, (TColor)0x6D6769, (TColor)0xD1C2C9, (TColor)0x66B9CE, (TColor)0x84B09C, (TColor)0xC9B16B, (TColor)0xCF8565, (TColor)0xC96B7E, (TColor)0xBB79A3}},
	{"Theme3", {clWindow, clWindowText, (TColor)0x323232, (TColor)0xD1DEE3, (TColor)0x097FF0, (TColor)0x36299F, (TColor)0x7C581B, (TColor)0x42854E, (TColor)0x784860, (TColor)0x5998C1}},
	{"Theme4", {clWindow, clWindowText, (TColor)0x866B64, (TColor)0xD7D1C5, (TColor)0x4963D1, (TColor)0x00B4CC, (TColor)0xAEAD8C, (TColor)0x707B8C, (TColor)0x8CB08F, (TColor)0x4990D1}},
	{"Theme5", {clWindow, clWindowText, (TColor)0x464646, (TColor)0xFAF5DE, (TColor)0xBFA22D, (TColor)0x281FDA, (TColor)0x1B64EB, (TColor)0x9D6339, (TColor)0x784B47, (TColor)0x4A3C7D}}
  };

__fastcall TColorPickerController::TColorPickerController(TdxRibbonGalleryItem *AColorItem, TdxRibbonGalleryItem *AColorMapItem, TdxRibbonDropDownGallery *AColorDropDownGallery) : TObject()
{
  FColorItem = AColorItem;
  FColorMapItem = AColorMapItem;
  FColorDropDownGallery = AColorDropDownGallery;
  FColorGlyphSize = cxTextHeight(Ribbon->Fonts->Group, "Wg", 0);
  FColorDialog = new TColorDialog(NULL);

  InitColorMapItem();
  InitColorItem();
  InitDropDownGallery();
  PopulateGalleries();
  SelectDefaultColor();
}
//---------------------------------------------------------------------------

__fastcall TColorPickerController::~TColorPickerController()
{
  delete FColorDialog;
}
//---------------------------------------------------------------------------

void TColorPickerController::InitColorItem()
{
  FColorItem->GalleryOptions->EqualItemSizeInAllGroups = False;
  FColorItem->GalleryOptions->ColumnCount = SchemeColorCount;
  FColorItem->GalleryOptions->SpaceBetweenGroups = 4;
  FColorItem->OnGroupItemClick = ColorItemClick;
  FColorItem->GalleryOptions->ItemTextKind = itkNone;

  FThemeColorsGroup = FColorItem->GalleryGroups->Add();
  FThemeColorsGroup->Header->Caption = "Theme Colors";
  FThemeColorsGroup->Header->Visible = true;
  FAccentColorsGroup = FColorItem->GalleryGroups->Add();
  FStandardColorsGroup = FColorItem->GalleryGroups->Add();
  FStandardColorsGroup->Header->Caption = "Standard Colors";
  FStandardColorsGroup->Header->Visible = true;
  FCustomColorsGroup = FColorItem->GalleryGroups->Add();
  FCustomColorsGroup->Header->Caption = "Custom Colors";
  FColorItem->GalleryGroups->Items[1]->Options->SpaceBetweenItemsVertically = -1;
}
//---------------------------------------------------------------------------

void TColorPickerController::InitColorMapItem()
{
  FColorMapItem->GalleryOptions->ColumnCount = 1;
  FColorMapItem->GalleryOptions->SpaceBetweenItemsAndBorder = 0;
  FColorMapItem->GalleryOptions->ItemTextKind = itkCaption;
  FColorMapItem->GalleryGroups->Add();
  FColorMapItem->OnGroupItemClick = ColorMapItemClick;
}
//---------------------------------------------------------------------------

void TColorPickerController::InitDropDownGallery()
{
  TcxBitmap *ANoColorGlyph;

  FNoColorButton = (TdxBarButton*)FColorDropDownGallery->ItemLinks->AddButton()->Item;
  FNoColorButton->ButtonStyle = bsChecked;
  FNoColorButton->Caption = "&No Color";
  FNoColorButton->OnClick = NoColorButtonClick;
  ANoColorGlyph = CreateColorBitmap(clNone, 16);
  FNoColorButton->Glyph = ANoColorGlyph;
  delete ANoColorGlyph;
  FMoreColorsButton = (TdxBarButton*)FColorDropDownGallery->ItemLinks->AddButton()->Item;
  FMoreColorsButton->Caption = "&More Colors...";
  FMoreColorsButton->OnClick = MoreColorsClick;
  FColorDialogSetup = (TdxBarButton*)FColorDropDownGallery->ItemLinks->AddButton()->Item;
  FColorDialogSetup->Caption = "&Setup...";
  FColorDialogSetup->OnClick = ColorDialogSetupButtonClick;

}
//---------------------------------------------------------------------------

void TColorPickerController::PopulateGalleries()
{
  BuildColorSchemeGallery();
  BuildStandardColorGallery();
}
//---------------------------------------------------------------------------

void TColorPickerController::SelectDefaultColor()
{
  FNoColorButton->Click();
}
//---------------------------------------------------------------------------

TdxBarManager* TColorPickerController::GetBarManager()
{
  return FColorItem->BarManager;
}
//---------------------------------------------------------------------------

TdxCustomRibbon* TColorPickerController::GetRibbon()
{
  return FColorDropDownGallery->Ribbon;
}
//---------------------------------------------------------------------------

void TColorPickerController::SetColor(TColor Value)
{
  if (FColor != Value)
  {
    FColor = Value;
    ColorChanged();
  }
}
//---------------------------------------------------------------------------

void __fastcall TColorPickerController::ColorItemClick(TdxRibbonGalleryItem *Sender, TdxRibbonGalleryGroupItem *AItem)
{
  FNoColorButton->Down = false;
  if (FColorItem->SelectedGroupItem != NULL)
    SetColor((TColor)FColorItem->SelectedGroupItem->Tag);
}
//---------------------------------------------------------------------------

void __fastcall TColorPickerController::ColorMapItemClick(TdxRibbonGalleryItem *Sender, TdxRibbonGalleryGroupItem *AItem)
{
  BuildThemeColorGallery();
  ColorMapChanged();
}
//---------------------------------------------------------------------------

void __fastcall TColorPickerController::NoColorButtonClick(TObject *Sender)
{
  if (FColorItem->SelectedGroupItem != NULL)
	FColorItem->SelectedGroupItem->Selected = false;
  SetColor(clNone);
}
//---------------------------------------------------------------------------

void __fastcall TColorPickerController::ColorDialogSetupButtonClick(TObject *Sender)
{
  bool RemoveHorizontalPadding, RemoveVerticalPadding;
  RemoveHorizontalPadding = FColorItem->GalleryOptions->SpaceBetweenItemsHorizontally == -1;
  RemoveVerticalPadding = FColorItem->GalleryGroups->Items[1]->Options->SpaceBetweenItemsVertically == -1;
  if (ColorDialogSetupForm->GetSettings(RemoveHorizontalPadding, RemoveVerticalPadding))
  {
	FColorItem->GalleryOptions->SpaceBetweenItemsHorizontally =
	  -RemoveHorizontalPadding;
	FColorItem->GalleryGroups->Items[1]->Options->SpaceBetweenItemsVertically =
	  -RemoveVerticalPadding;
  }
}
//---------------------------------------------------------------------------

void __fastcall TColorPickerController::MoreColorsClick(TObject *Sender)
{
  FColorDialog->Color = Color;
  if (FColorDialog->Execute())
  {
    FCustomColorsGroup->Header->Visible = true;
    AddColorItem(FCustomColorsGroup, FColorDialog->Color)->Selected = true;
  };
}
//---------------------------------------------------------------------------

TdxRibbonGalleryGroupItem* TColorPickerController::AddColorItem(TdxRibbonGalleryGroup *AGalleryGroup, TColor AColor)
{
  TcxBitmap *ABitmap;
  String AColorName;
  TdxRibbonGalleryGroupItem *Result;

  Result = AGalleryGroup->Items->Add();

  ABitmap = CreateColorBitmap(AColor, 0);
  try
  {
    Result->Glyph = ABitmap;
    if (cxNameByColor(AColor, AColorName))
      Result->Caption = AColorName;
    else
      Result->Caption = "$" + IntToHex(AColor, 6);
    Result->Tag = AColor;
  }
  __finally
  {
    ABitmap->Free();
  };

  return Result;
}

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

TcxBitmap* TColorPickerController::CreateColorBitmap(TColor AColor, int AGlyphSize)
{
  TcxBitmap *Result;

  if (AGlyphSize == 0)
    AGlyphSize = FColorGlyphSize;
  Result = new TcxBitmap(AGlyphSize, AGlyphSize, pf32bit);
  FillRectByColor((HDC)Result->Canvas->Handle, Result->ClientRect, AColor);
  FrameRectByColor((HDC)Result->Canvas->Handle, Result->ClientRect, clGray);
  if (AColor == clNone)
    Result->RecoverAlphaChannel(clBlack);
  else
	Result->TransformBitmap(btmSetOpaque);

  return Result;
}
//---------------------------------------------------------------------------

void TColorPickerController::CreateColorRow(TdxRibbonGalleryGroup *AGalleryGroup, const TColor *AColorMap)
{
  int I;
  for (I = 0; I < SchemeColorCount; I++)
    AddColorItem(AGalleryGroup, AColorMap[I]);
}
//---------------------------------------------------------------------------

int GetBrightness (int ARGBColor)
{
  return (GetBValue(ARGBColor) + GetGValue(ARGBColor) + GetRValue(ARGBColor)) / 3;
}

void CreateAccent(TAccent *AnAccents, int AMapIndex, TColor *AColorMap, TColor **AnAccentColorScheme)
{
  int I;
  TColor AColor;

  for (I = 0; I < AnAccentCount; I++)
  {
    switch (AnAccents[I])
    {
      case aLight80: AColor = Light(AColorMap[AMapIndex], 80); break;
      case aLight60: AColor = Light(AColorMap[AMapIndex], 60); break;
      case aLight50: AColor = Light(AColorMap[AMapIndex], 50); break;
      case aLight40: AColor = Light(AColorMap[AMapIndex], 40); break;
      case aLight35: AColor = Light(AColorMap[AMapIndex], 35); break;
      case aLight25: AColor = Light(AColorMap[AMapIndex], 25); break;
      case aLight15: AColor = Light(AColorMap[AMapIndex], 15); break;
      case aLight5: AColor = Light(AColorMap[AMapIndex], 5); break;
      case aDark10: AColor = Dark(AColorMap[AMapIndex], 90); break;
      case aDark25: AColor = Dark(AColorMap[AMapIndex], 75); break;
      case aDark50: AColor = Dark(AColorMap[AMapIndex], 50); break;
      case aDark75: AColor = Dark(AColorMap[AMapIndex], 25); break;
      default /*aDark90*/: AColor = Dark(AColorMap[I], 10);
    }
    AnAccentColorScheme[I][AMapIndex] = AColor;
  }
}

void GetAccentColorScheme(TColor *AColorMap, TColor **AnAccentColorScheme)
{
  int I;
  TAccent AccentMap1[] = {aLight50, aLight35, aLight25, aLight15, aLight5};
  TAccent AccentMap2[] = {aLight80, aLight60, aLight60, aDark25, aDark50};
  TAccent AccentMap3[] = {aDark10, aDark25, aDark50, aDark75, aDark90};
  for (I = 0; I < SchemeColorCount; I++)
  {
    if (GetBrightness(ColorToRGB(AColorMap[I])) < 20)
      CreateAccent(AccentMap1, I, AColorMap, AnAccentColorScheme);
    else
      if (GetBrightness(ColorToRGB(AColorMap[I])) < 230)
        CreateAccent(AccentMap2, I, AColorMap, AnAccentColorScheme);
      else
        CreateAccent(AccentMap3, I, AColorMap, AnAccentColorScheme);
  }
};

void TColorPickerController::BuildThemeColorGallery()
{
  int I;
  TColor *AColorMap;
  TColor *AnAccentColorScheme[AnAccentCount];

  for (I = 0; I < AnAccentCount; I++)
    AnAccentColorScheme[I] = new TColor[SchemeColorCount];

  BarManager->BeginUpdate();
  try
  {
    FThemeColorsGroup->Items->Clear();
    AColorMap = AColorMaps[FColorMapItem->SelectedGroupItem->Index].Map;
    CreateColorRow(FThemeColorsGroup, AColorMap);

    FAccentColorsGroup->Items->Clear();
    GetAccentColorScheme(AColorMap, AnAccentColorScheme);
    for (I = 0; I < AnAccentCount; I++)
      CreateColorRow(FAccentColorsGroup, AnAccentColorScheme[I]);
  }
  __finally
  {
    BarManager->EndUpdate(true);
  };

  for (I = 0; I < AnAccentCount; I++)
    delete AnAccentColorScheme[I];
}
//---------------------------------------------------------------------------

void TColorPickerController::BuildStandardColorGallery()
{
  BarManager->BeginUpdate();
  try
  {
    FStandardColorsGroup->Items->Clear();
    CreateColorRow(FStandardColorsGroup, AStandardColorMap);
  }
  __finally
  {
	BarManager->EndUpdate(true);
  };
}
//---------------------------------------------------------------------------

void TColorPickerController::BuildColorSchemeGallery()
{
  int ASystemColorCount = 2;
  int AGlyphOffset = 1;
  int I, J;
  TcxBitmap *ABitmap;
  TcxBitmap *AColorBitmap;
  TRect ARect;
  TdxRibbonGalleryGroupItem *AGroupItem;
  int AThemeColorCount;

  BarManager->BeginUpdate();
  try
  {
    AThemeColorCount = SchemeColorCount - ASystemColorCount;
    ABitmap = new TcxBitmap(FColorGlyphSize * AThemeColorCount + (AThemeColorCount - 1) * AGlyphOffset, FColorGlyphSize, pf32bit);
    try
    {
      for (I = 5; I>=0; I--)
      {
		AGroupItem = FColorMapItem->GalleryGroups->Items[0]->Items->Insert(0);
        for (J = 0 + ASystemColorCount; J < SchemeColorCount; J++)
        {
          AColorBitmap = CreateColorBitmap(AColorMaps[I].Map[J], 0);
          try
          {
            ARect = cxRectOffset(AColorBitmap->ClientRect, (AColorBitmap->Width + AGlyphOffset) * (J - ASystemColorCount), 0);
            ABitmap->CopyBitmap(AColorBitmap, ARect, cxNullPoint, SRCCOPY);
          }
          __finally
          {
            delete AColorBitmap;
          }
        }
        AGroupItem->Glyph = ABitmap;
        AGroupItem->Caption = AColorMaps[I].Name;
      };
      AGroupItem->Selected = true;
    }
    __finally
    {
      delete ABitmap;
    }
  }
  __finally
  {
    BarManager->EndUpdate(true);
  }
}
//---------------------------------------------------------------------------

void TColorPickerController::ColorChanged()
{
  TcxBitmap *AGlyph;

  AGlyph = CreateColorBitmap(Color, 16 * Screen->PixelsPerInch / 96);
  try
  {
    FColorItem->Glyph = AGlyph;
  }
  __finally
  {
    delete AGlyph;
  };

  if (FOnColorChanged)
    FOnColorChanged(this);
}
//---------------------------------------------------------------------------

void TColorPickerController::FillGlyph(TcxBitmap *AGlyph)
{
  TRect ARect;
  HDC ADC;

  ARect = Rect(0, 0, AGlyph->Width / 2, AGlyph->Height / 2);
  ADC = (HDC)AGlyph->Canvas->Handle;
  FillRectByColor(ADC, ARect, AColorMaps[FColorMapItem->SelectedGroupItem->Index].Map[2]);
  FillRectByColor(ADC, cxRectOffset(ARect, cxRectWidth(ARect), 0), AColorMaps[FColorMapItem->SelectedGroupItem->Index].Map[3]);
  FillRectByColor(ADC, cxRectOffset(ARect, 0, cxRectHeight(ARect)), AColorMaps[FColorMapItem->SelectedGroupItem->Index].Map[4]);
  FillRectByColor(ADC, cxRectOffset(ARect, cxRectWidth(ARect), cxRectHeight(ARect)), AColorMaps[FColorMapItem->SelectedGroupItem->Index].Map[5]);
  FrameRectByColor(ADC, AGlyph->ClientRect, clGray);
  AGlyph->TransformBitmap(btmSetOpaque);
}
//---------------------------------------------------------------------------

void TColorPickerController::ColorMapChanged()
{
  TcxBitmap *AGlyph;

  FColorMapItem->BarManager->BeginUpdate();
  try
  {
    AGlyph = new TcxBitmap(16, 16, pf32bit);
    FillGlyph(AGlyph);
    FColorMapItem->Glyph = AGlyph;
    AGlyph->SetSize(32, 32);
    FillGlyph(AGlyph);
    FColorMapItem->LargeGlyph = AGlyph;
    delete AGlyph;
  }
  __finally
  {
    FColorMapItem->BarManager->EndUpdate(False);
  }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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