📄 colordlog.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 + -