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

📄 colordlog.cpp

📁 《C++Builder程序设计范例--中国象棋》配书盘自述文件
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "ColorDlog.h"

#include "CDefines.h"
#include "chess.h"
#include "Global.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TColorDlg *ColorDlg;
//---------------------------------------------------------------------------

__fastcall TColorDlg::TColorDlg(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
/*
颜色对话框滚动事件处理函数
每个编辑框中的数值随着滚动框的位置改变而变化。
*/
void __fastcall TColorDlg::ScrollBarChange(TObject *Sender)
{
    EditRed->Text = IntToStr(ScrollBar_Red->Position);
    EditGreen->Text = IntToStr(ScrollBar_Green->Position);
    EditBlue->Text = IntToStr(ScrollBar_Blue->Position);

     ColorSelection->Color = TColor(RGB(
             ScrollBar_Red->Position,
             ScrollBar_Green->Position,
             ScrollBar_Blue->Position));
}
//---------------------------------------------------------------------------
/*
颜色对话框显示事件处理函数
初始化每个编辑框中的数值及滚动框的位置。
*/
void __fastcall TColorDlg::ColorDlgShow(TObject *Sender)
{
memcpy(SqColors, ColorSquareColors, sizeof(SqColors));

    ScrollBar_Red->Position = SqColors[0];
    EditRed->Text = IntToStr(SqColors[0]);
    ScrollBar_Green->Position = SqColors[1];
    EditGreen->Text = IntToStr(SqColors[1]);
    ScrollBar_Blue->Position = SqColors[2];
    EditBlue->Text = IntToStr(SqColors[2]);

}
//---------------------------------------------------------------------------
/*
以try开头的代码块中的代码被保护了起来。try代码块之后可以有任意多个
包含异常句柄的catch代码块。当一个C++应用发出一个异常时,运行库搜索
调用堆栈,寻找一个类参数与发出的异常中的类型匹配的catch代码块。try
代码块之后的catch代码块依次被搜索,直到遇到一次匹配为止。如果未能发现
匹配,用调用函数继续搜索。如果用...作为参数,可以创建一个与任意异常匹配的
catch代码块。
如果用户在数量域中敲入一个非数字值,catch (EConvertError &error)
 发出整数转换错误。这里用到了指针引用符“&”,因为VCL异常(那些从
 Exception类派生来的异常)必须通过指针引用来被捕捉。
 当捕捉到了异常后,显示出错消息,并把输入聚焦到编辑控件中。
 这个代码块不仅捕捉处理错误,而且在没有将其完全恢复之前将继续弹出错误对话框。
*/
bool TColorDlg::GetColorValue(TObject *Sender)
{
   int NewVal;
   bool Ok;
   BYTE *CurVal;
   TScrollBar *Scroller;
   TEdit *Sender1 = (TEdit *)Sender;
   Ok = true;
  try
   {
   NewVal = StrToInt(Sender1->Text);
   }  
   catch (EConvertError &error)
  {
   Ok=false;
   }

   if (Sender1==EditRed)
      {
      CurVal = &SqColors[0];
      Scroller = ScrollBar_Red;
      }
    else if (Sender1==EditGreen)
      {
      CurVal = &SqColors[1];
      Scroller = ScrollBar_Green;
      }
     else   if (Sender1==EditBlue)
      {
      CurVal = &SqColors[2];
      Scroller = ScrollBar_Blue;
      }

   if (Ok)
      {
      Ok = (NewVal > 255) ? false : ( (NewVal < 0 ) ? false : true );
      }
   else
      NewVal = *CurVal;

   if (!Ok)
      {
      Error("请输入一个介于0-255之间的有效数.");
      Sender1->SetFocus();

      }
   else if (NewVal != *CurVal)
      {
      *CurVal = (BYTE)NewVal;
      Scroller->Position=*CurVal;
      }

    ColorSelection->Color = TColor(RGB(
             ScrollBar_Red->Position,
             ScrollBar_Green->Position,
             ScrollBar_Blue->Position));
             return Ok;
}
//---------------------------------------------------------------------------
/*
颜色对话框OK按钮事件处理函数
每个编辑框中的数值随着滚动框的位置改变而变化。
若编辑框中的数值不在0-255之间的话,则出现错误对话框。若正确的话,
不出现错误对话框,保存输入的数值,同时,关闭颜色对话框。
*/
void __fastcall TColorDlg::OkClick(TObject *Sender)
{

 if( GetColorValue(EditRed) &&
      GetColorValue(EditGreen) && GetColorValue(EditBlue))
     {
      memcpy(ColorSquareColors, SqColors, sizeof(SqColors));
      ColorDlg->Close();
      }
}
/*
颜色对话框Cancel按钮事件处理函数
 关闭颜色对话框。
*/
void __fastcall TColorDlg::CancelBtnClick(TObject *Sender)
{
    ColorDlg->Close();
}
//---------------------------------------------------------------------------
 /*
颜色对话框中的编辑框退出事件处理函数
若编辑框中的数值不在0-255之间的话,则出现错误对话框。若正确的话,
滚动框的位置随着编辑框中的数值改变而变化。
*/
void __fastcall TColorDlg::EditExit(TObject *Sender)
{
 if( GetColorValue(EditRed) &&
      GetColorValue(EditGreen) && GetColorValue(EditBlue))
     {
      ScrollBar_Red->Position = StrToInt(EditRed->Text);
      ScrollBar_Green->Position=StrToInt(EditGreen->Text);
      ScrollBar_Blue->Position=StrToInt(EditBlue->Text);
     }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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