main.cpp

来自「《bcb深度历险》 电子书」· C++ 代码 · 共 94 行

CPP
94
字号
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <registry.hpp>
#include <mmsystem.h>
#include <extctrls.hpp>

#include "main.h"
#include "xFiles.hpp"
#include "xUtils.hpp"
#include "xGraphics.hpp"
#include "xRegistry.hpp"
#include "xDesktop.hpp"
#include "xFonts.hpp"
#include "xControls.hpp"
#include "about.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

AnsiString __fastcall TMainForm::ReadThemeItem(TIniFile* IniFile, AnsiString Section, AnsiString Ident)
{
  if (Ident == "") Ident = "DefaultValue";
  AnsiString value = IniFile->ReadString(Section, Ident, "");

  AnsiString S = FThemePath + ExtractFileName(value);
  if (FileExistsAfterTruncate(S)) value = S;

  return value;
}

void __fastcall TMainForm::ReadThemeFile(AnsiString FileName)
{
  DoBusy(true);
  try {
    FThemePath = PathWithSlash(ExtractFilePath(FileName), '\\');
    FThemeName = ExtractFileName(FileName);

    TIniFile* IniFile = new TIniFile(FileName);
    try {
      // read metrics
      AnsiString S;
      S = ReadThemeItem(IniFile, secMetrics, "IconMetrics");
      StringToBuffer(S, &FIM, sizeof(FIM));
      S = ReadThemeItem(IniFile, secMetrics, "NonClientMetrics");
      StringToBuffer(S, &FNM, sizeof(FNM));

      FMyFonts[mfIcon] = FIM.lfFont;
      FMyFonts[mfCaptionFont] = FNM.lfCaptionFont;
      FMyFonts[mfsmCaptionFont] = FNM.lfSmCaptionFont;
      FMyFonts[mfMenuFont] = FNM.lfMenuFont;
      FMyFonts[mfStatusFont] = FNM.lfStatusFont;
      FMyFonts[mfMessageFont] = FNM.lfMessageFont;

      // read my icons
      if (IniFile->SectionExists(secMyComputerKey))
        FMyIcons[mcMyComputer] = ReadThemeItem(IniFile, secMyComputerKey, ""); // for fool win98"s theme
      else
        FMyIcons[mcMyComputer] = ReadThemeItem(IniFile, secMyComputer, "");

      if (IniFile->SectionExists(secNeighborKey))
        FMyIcons[mcNeighbor] = ReadThemeItem(IniFile, secNeighborKey, "");
      else
        FMyIcons[mcNeighbor] = ReadThemeItem(IniFile, secNeighbor, "");

      if (IniFile->SectionExists(secRecycleBinKey)) {
        FMyIcons[mcRecycleBinFull] = ReadThemeItem(IniFile, secRecycleBinKey, "full");
        FMyIcons[mcRecycleBinEmpty] = ReadThemeItem(IniFile, secRecycleBinKey, "empty");
      } else {
        FMyIcons[mcRecycleBinFull] = ReadThemeItem(IniFile, secRecycleBin, "full");
        FMyIcons[mcRecycleBinEmpty] = ReadThemeItem(IniFile, secRecycleBin, "empty");
      }

      // read my colors
      for (TMyColor i = 0; i <= TMyColor_MAX; i = i + 1) {
        AnsiString S = ReadThemeItem(IniFile, secColors, MyColorID[i]);
        if (S != "")
          FMyColors[i] = RGBStringToColor(S);
        else {
          if (i == GradientActiveTitle)
            FMyColors[i] = FMyColors[ActiveTitle];
          else if (i == GradientInactiveTitle)
            FMyColors[i] = FMyColors[InactiveTitle];
          else
            FMyColors[i] = -1; // 箇砞

⌨️ 快捷键说明

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