-
c语言入门之C++Builder中集合的处理
首先看一看窗口的MouseDown事件的声明
void __fastcall TForm1::FormMouseDown(TObject *Sender,TMouseButton Button,
TShiftState Shift,int X,int Y)
其中的Shift参数被说明为TShiftState类型:
enum Classes_1{ssShift,ssAlt,ssCtrl,ssRight,ssMiddle,ssDouble};
typedef Set<Classes_1,ssShift,ssDouble>TShiftSTate;
TShiftSTate是一个集合(Set),也就是说,TShiftState是Sysdefs.h中Set模板类的
一个实例。如果想要知道某个元素是不是集合中的一个成员,可以使用Contains方法:
ShiftKey->Checked=Shift.Contains(ssShift);
ControlKey->Checked=Shift.Contains(ssCtrl);
LeftButton->Checked=Shift.Contains(ssLeft);
RightButton->Checked=Shift.Contains(ssRight);
这段代码询问元素ssRight是不是属于Shift集合。如果是的话,那么代码就设置为TCheckBox
组件的状态。
下面是在运行状态下说明一个集合的方法:
TShiftState LeftShift;
LeftShift<<ssLeft<<ssShift;
对于上面这个集合,如果询问集合中是否包含ssLeft或ssShift, 那么Contains运算符
将返回True值。
除了Contains方法外,还可以在Set类中使用下面三个运算符:
+ 并集
- 差集
* 交集
上面这三个运算符都返回一个集合,而Contains返回一个布尔值。
SETEXP程序
如下面程序清单所示,SETEXP程序说明了如何使用Set模板类中的关键元素。
///////////////////////////////////////
// File: Main.cpp
// Project: SetExp
// Creator: Copyright 1998 by Charlie Calvert
//
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void TForm1::CheckState(TShiftState Shift)
{
ShiftKey->Checked = Shift.Contains(ssShift);
ControlKey->Checked = Shift.Contains(ssCtrl);
LeftButton->Checked = Shift.Contains(ssLeft);
RightButton->Checked = Shift.Contains(ssRight);
}
void __fastcall TForm1::UnionClick(TObject *Sender)
{
AnsiString Operators[3] = {"+", "*", "-"};
TShiftState FinalSet;
TShiftState LeftShift;
TShiftState LeftCtrl;
LeftShift << ssLeft << ssShift;
LeftCtrl << ssLeft << ssCtrl;
switch (TOptType(dynamic_cast <TBitBtn*>(Sender)->Tag))
{
case otUnion:
FinalSet = LeftShift + LeftCtrl;
break;
case otIntersection:
FinalSet = LeftShift * LeftCtrl;
break;
case otDifference:
FinalSet = LeftShift - LeftCtrl;
break;
}
CheckState(FinalSet);
Label2->Caption = Operators[dynamic_cast<TBitBtn *>(Sender)->Tag];
}
void __fastcall TForm1::Label4MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
CheckState(Shift);
}
SetExp程序说明了如何对集合进行访问和操作。尤其是程序中使用了TShiftState类
型的集合。通过这个示例程序可以学习使用C++Builder集合所需的内容。
如下图所示,SETEXP程序的主窗口包含了4个TCheckBox、2个TPanel、4个TLabel和3个TBitBtn对象。4个TCheckBox对象放置在第一个TPanel对象的上面,第4个TLabel对象放置在第二个TPanel对象的上面。
SETEXP程序可以显示在单击鼠标时,是否按下了Shift键或Ctrl键,还可以显示用户按下 的是鼠标左键还是右键。代码中说明了如何使用交集、并集和差集运算符。
void __fastcall TForm1::FormMouseDown(TObject *Sender,TMouseButton Button,
TShiftState Shift,int X,int Y)
其中的Shift参数被说明为TShiftState类型:
enum Classes_1{ssShift,ssAlt,ssCtrl,ssRight,ssMiddle,ssDouble};
typedef Set<Classes_1,ssShift,ssDouble>TShiftSTate;
TShiftSTate是一个集合(Set),也就是说,TShiftState是Sysdefs.h中Set模板类的
一个实例。如果想要知道某个元素是不是集合中的一个成员,可以使用Contains方法:
ShiftKey->Checked=Shift.Contains(ssShift);
ControlKey->Checked=Shift.Contains(ssCtrl);
LeftButton->Checked=Shift.Contains(ssLeft);
RightButton->Checked=Shift.Contains(ssRight);
这段代码询问元素ssRight是不是属于Shift集合。如果是的话,那么代码就设置为TCheckBox
组件的状态。
下面是在运行状态下说明一个集合的方法:
TShiftState LeftShift;
LeftShift<<ssLeft<<ssShift;
对于上面这个集合,如果询问集合中是否包含ssLeft或ssShift, 那么Contains运算符
将返回True值。
除了Contains方法外,还可以在Set类中使用下面三个运算符:
+ 并集
- 差集
* 交集
上面这三个运算符都返回一个集合,而Contains返回一个布尔值。
SETEXP程序
如下面程序清单所示,SETEXP程序说明了如何使用Set模板类中的关键元素。
///////////////////////////////////////
// File: Main.cpp
// Project: SetExp
// Creator: Copyright 1998 by Charlie Calvert
//
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void TForm1::CheckState(TShiftState Shift)
{
ShiftKey->Checked = Shift.Contains(ssShift);
ControlKey->Checked = Shift.Contains(ssCtrl);
LeftButton->Checked = Shift.Contains(ssLeft);
RightButton->Checked = Shift.Contains(ssRight);
}
void __fastcall TForm1::UnionClick(TObject *Sender)
{
AnsiString Operators[3] = {"+", "*", "-"};
TShiftState FinalSet;
TShiftState LeftShift;
TShiftState LeftCtrl;
LeftShift << ssLeft << ssShift;
LeftCtrl << ssLeft << ssCtrl;
switch (TOptType(dynamic_cast <TBitBtn*>(Sender)->Tag))
{
case otUnion:
FinalSet = LeftShift + LeftCtrl;
break;
case otIntersection:
FinalSet = LeftShift * LeftCtrl;
break;
case otDifference:
FinalSet = LeftShift - LeftCtrl;
break;
}
CheckState(FinalSet);
Label2->Caption = Operators[dynamic_cast<TBitBtn *>(Sender)->Tag];
}
void __fastcall TForm1::Label4MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
CheckState(Shift);
}
SetExp程序说明了如何对集合进行访问和操作。尤其是程序中使用了TShiftState类
型的集合。通过这个示例程序可以学习使用C++Builder集合所需的内容。
如下图所示,SETEXP程序的主窗口包含了4个TCheckBox、2个TPanel、4个TLabel和3个TBitBtn对象。4个TCheckBox对象放置在第一个TPanel对象的上面,第4个TLabel对象放置在第二个TPanel对象的上面。
SETEXP程序可以显示在单击鼠标时,是否按下了Shift键或Ctrl键,还可以显示用户按下 的是鼠标左键还是右键。代码中说明了如何使用交集、并集和差集运算符。
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式