常用DELPHI控件属性设置说明
目录
TForm Class
TPanel组件
TToolBar Class
TToolButton Class
TTimer Class
TADOConnection Class
TADOQuery Class
TADODataSet Class
TDBGrid Class
TADOStoredProc Class
TButton Class
TBitBtn Class
TComboBox Class
TStaticText Class
TLabel Class
TEdit Class
TGroupBox Class
TRadioGroup Class
TListbox Class
TTreeView Class
TDataModule Class
VC++使用串口
I. Open 16
II. Configuration
III. Read
IV. Write
V. Close
Conclusion
License
TForm Class
TForm代表一个标准的应用程序窗口。
在设计阶段,当你在窗体设计器内创建窗体时,他们作为窗体类的子节点被执行。窗体能代表应用程序的主窗口,或者对话框,或MDI的children。一个窗体能包含其它对象,如TButton, TCheckBox和TComboBox对象等。
ArrangeIcons:安排最小化MDI子窗体的图标;
Cascade:排列MDI子窗体,使他们重叠;
Next:激活在窗体队列中的下一个子窗体;
Previous:激活在窗体队列中的前一个MDI子窗体;
Title:排列MDI子窗体,使他们都是一样的大小。
Action:指定与控件有关的活动;
ActiveControl:指定以窗体为焦点的控件;
Align:控件如何停靠在容器(父控件)中;
AlphaBlend:指定窗体是否透明;
AlphaBlendValue:指定一个透明窗体的半透明度;
Anchors:指定控件如何固定到其父控件上;
AutoScroll:如果窗口不足以显示它内部的所有控件时,滚动条是否自动显示在滚动窗口控件中;
AutoSize:指定控件是否自动调节其大小去容纳自身内容;
BiDiMode:指定控件的双向风格;
BorderIcons:指定显示在窗体标题栏的图标;
BorderStyle:指定窗体边框的外表和行为;
BorderWidth:指定控件边框的宽度;
Caption:指定用户辨别控件的文本字符串;
ClientHeight:指定窗体客户区域的高度(像素);
ClientWidth:指定窗体客户区域的宽度(像素);
Clore:指定控件的背景色;
Constraints:指定控件的尺寸约束。
Ctl3D:指定控件是拥有3D还是2D外观。
DefaultMonitor:指定窗体显示所用的显示器;
DockSite:控件是否可以是拖拽操作的目标;
DoubleBuffered:决定控件影像是被直接呈现到窗口还是首先被描绘做内存位图;(描绘道内存可防止窗口闪烁,但耗费内存。)
DragKind:指定控件是被正常拖拽还是停靠;
Dragmode:决定控件怎样启动拖放或拖靠;
Enabled:控件是否响应鼠标、键盘和定时器事件;
Font:控制控件上显示的文本的属性;
FormStyle:决定窗体风格;
GlassFrame:这是一个窗体架构,窗体类的一个成员;
Height:指定控件的垂直尺寸(像素);
HelpFile:指定窗体的帮助文件名;
HorzScrollBar:滚动窗体控件的水平滚动条;
Icon:当窗体最小化时显示的图标;
KeyPreview:指定窗体是否在活动控件之前接收键盘事件;
Menu:指定窗体德尔主菜单;
ObjectmenuItem:代表一个对OLE对象的选择响应的OLE菜单项;
OldCreateOrder:指定OnCreate事件和OnDestroy事件发生的时间;
Padding:指定控件的衬垫;
ParentBiDiMode:指定控件是否使用父控件的BiDiMode属性;
ParentFont:决定在哪里找到控件的字体信息;
PixelsPerInch:描述在设计窗体的系统中字体的比例;
PopupMenu:确定与控件有关的弹出菜单;
PopupMode:控制最高层窗体如何表现得如同window的WS_POPUP的风格;
PopupParent:为窗体栈设置一个用户不能改变的顺序;
Position:描绘窗体的尺寸和位置;
PrintScale:描绘打印窗体的比例;
Scaled:指定窗体是否依PixelPerInch属性的值确定大小;
ScreenSnap:指定窗体是否对齐到屏幕的边缘;
ShowHint:决定当鼠标在控件上短暂停留时,控件是否显示帮助提示;
SnapBuffer:指定屏幕对齐的间隔;
TransparentColor:指定窗体的颜色是否透明显示;
TransparentColorValue:当TransparentColor为true时,指示窗体颜色的半透明值;
UseDockManager:指示在拖靠操作中是否使用停靠管理器;
VertScrollBar:描绘滚动窗体控件的垂直滚动条;
Visible:指示窗体是否可见;
Width:指示控件或窗体的水平尺寸(像素);
WindowMenu:为MDI父窗体指定window菜单;
WindowState:指定窗体在屏幕上的显示方式;
OnActivate:当窗体变成活动窗体时发生;
OnAlignInsertBefore:当一个拥有自定义对齐的对象被对齐时发生;
OnAlignPosition:当一个拥有自定义对齐的对象被对齐时发生;
OnCanResize:当试图调整控件尺寸时发生;
OnClick:当用户鼠标点击控件时发生;
OnClose:当窗体关闭时发生;
OnCloseQuery:当试图关闭窗体时发生;
OnConstrainedResize:使调整大小约束合适;
OnContexPopup:当用户右键点击控件或其它引起弹出菜单(如:使用键盘)时发生;
OnCreate:当窗体被创建时发生;
OnDblClick:当用户在控件上双击鼠标按钮时发生;
OnDeactivate:当窗体失去焦点是发生;
OnDestroy:当窗体被销毁时发生;
OnDockDrop:当另一个控件停驻到本控件时发生;
OnDockOver:当另一控件被拖出本控件时发生;
OnDragDrop:当用户拖下一个被拖动的对象时发生;
OnDragOver:当用户把一个对象拖上控件时发生;
OnEndDock:当用户拖动一个对象结束,要么停靠对象要么取消拖动;
OnGetSiteInfo:返回控件的停靠信息;
OnHelp:当窗体接收到一个帮助请求时发生;
OnHide:当窗体被隐藏(即Visible属性被设置成false)时发生;
OnKeyDown:当控件拥有焦点,用户按下任意键时发生;
OnKeyPress:当一个键盘键被按时发生;
OnKeyUp:当用户释放一个被按下的键盘键时发生;
OnMouseActivate:当控件的父窗体非活动,鼠标指针在控件上,用户按下鼠标按钮时发生;
OnMouseDown当鼠标指针在控件上用户按下鼠标按钮时发生;
OnMouseEnter:当用户把鼠标移动到控件上时发生;
OnMouseLeave:当用户把鼠标移出控件时发生;
OnMouseMove:当鼠标指针在控件上用户移动鼠标指针时发生;
OnMouseUp:当用户释放一个按在组件上的鼠标按钮时发生;
OnMouseWheel:当鼠标滚轮滚动时发生;
OnMouseWheelDown:当鼠标滚轮向下滚动时发生;
OnMouseWheelUp:当鼠标滚轮向上滚动时发生;
OnPaint:当窗体被重新绘制时发生;
OnResize:当控件被调整大小后立即发生;
OnShortCut:当用户按下一个键盘键时发生(在OnKeyDown事件前);
OnShow:当窗体被显示时发生(还需要窗体的Visible被设置为true);
OnStartDock:当用户开始拖拽一个DragKind属性是dkDock的控件时发生;
OnUnDock:当应用程序试图去移除一个被拖入有窗口的控件中的控件时发生;
TLoginDialog Class
TLoginDialog是一个在应用程序里提供安全登录的对话框。
function LoginDialog(const ADatabaseName: string; var AUserName: string; var APassword: string): Boolean;
通常,一个TLoginDialog对象是和LoginDialogEx或RemoteLoginDialog函数一起被创建,并用于提供对一个当地数据库表的安全访问。然而TLoginDialog也能被用做其它登录对话框的基对象。
调用 LoginDialogEx提出标准登录窗口提示用户输入有效的用户名和密码。ADatabaseName指定被访问的数据库。NameReadOnly指定用户是否可以改变从对话框中获得的用户名。
function LoginDialogEx(const ADatabaseName: string; var AUserName: string; var APassword: string; NameReadOnly: Boolean): Boolean;
此对话框返回用户名和密码作为AUserName和APassword的值。
如果用户取消对话框,那么LoginDialogEx返回false。如果LoginDialogEx返回true,那么应用程序就能提示用提供的用户名和密码连接数据库服务器。
提示:当在C++中创建跨平台的应用程序,添加QDBLogDlg.pas unit(而不是DBLogDlg)到工程中,如果你想要默认的数据库登录对话框在运行时显示。如果你的C++应用程序中包含一个DBGrid组件,QDBLogDlg就不需要被包含进去了。
用TPasswordDialog允许用户为基于BDE的应用程序指定登录密码(登录通过TSession对象表现出来)。密码被用于应用程序打开一个请求输入密码的Paradox数据表。
TPasswordDialog对象通常使用PasswordDialog函数创建。然而TPasswordDialog也能被用作另一类密码对话窗口的基对象。
function PasswordDialog(const ASession: IDBSession): Boolean;
显示一个对话窗口,提示用户输入局部受密码保护的表对应的密码。
TPanel组件
使用TPanel把一个面板(panel)放到窗体上。面板拥有提供控件边框倾斜度的属性和方法帮助管理子控件嵌入面板中。
你也可以用面板把控件聚集在一起,就好像使用一个group box,但是拥有倾斜边框而不是group box轮廓。在单窗体中,panel专门用于控件组。如果你打算在其它的窗体内使用相同的分组,你可能想去使用frame代替。在写使用drag-and-dock的应用程序时,没有边框的panel是有用的去做停靠站。
尽管你能使用panel实现状态条和工具条,请不要忘记你也可以使用TToolBar、TStatusBar类完成相同功能。
arr:array[0..3]of TPanel;
Align:决定控件在容器(父控件)中的对齐方式;
Alignment:panel中标题(Caption)的对齐方式;
Anchors:指定控件怎样被固定到它的父窗体上;
AutoSize:指定控件是否自动调整自身大小以容纳它的内容;
BevelEdges:指定控件的哪条边框是倾斜的;
BevelInner:决定panel内边框风格;
BevelKind:指定控件的倾斜风格;
BevelOuter:决定panel外边框的倾斜风格;
BevelWidth:决定panel内外边框的倾斜宽度(像素);
BiDiMode:指定控件的双向模式;
BorderStyle:决定panel控件边框线的风格;
BorderWidth:指定内外边框的距离(像素);
Caption:用户识别控件所用的文本字符串;
Color:指定控件的背景色;
Constraints:指定控件的尺寸约束条件;
Ctl3D:决定控件拥有三维还是二维视图;
DockSite:指定控件能否执行拖拽操作;
DoubleBuffered:决定控件的影像是被直接描绘到窗口还是首先被绘制成内存位图;
DragCursor:当控件被拖动时,被用于代表鼠标指针的图片;
DragKind:指定控件是被正常拖动还是停靠;
DragMode:决定控件怎样启动拖入拖出操作;
Enabled:控制控件是否响应鼠标、键盘和定时器事件;
Font:控制写入控件的文本的属性;
FullRepaint:决定当panel尺寸改变时怎样重绘自身;
Locked:决定被用于工具条的panel是否被OLE服务器提供的工具条替换。
Padding:指定控件的衬垫;
ParentBackground:决定控件是否使用父主题的背景;
ParentBiDiMode:同上;
ParentColor:同上;
ParentCtl3D:同上;
ParentDooubleBuffered:同上;
ParentFont:同上;
ParentShowHint:同上;
PopupMenu:识别与控件有关的弹出菜单;
ShowCaption:TPanel类的成员;
ShowHint:当鼠标短暂停留在控件上时是否显示控件的帮助提示;
TabOrder:在parent’s Tab order中,指示控件在位置;
TabStop:决定用户是否能Tab to控件;
UseDockManmager:指定在拖拽操作中是否使用停靠管理器;
VerticalAlignment:设置标题的垂直位置;
Visible:决定组件是否显示在屏幕上;
OnAlignInsertBefore:当一个具有客户点校整的对象被调整时发生;
OnAlignPosition:当一个具有客户点校整的对象被定位时发生;
OnCanResize:当试图调整控件大小时发生;
OnClick:当用户点击控件时发生;
OnConstrainedResize:调整大小限制;
OnContextPopup:当用户右击控件或者引发弹出菜单(如使用键盘)时发生;
OnDblClick:当鼠标指针在控件上,用户双击鼠标左键时发生;
OnDockDrop:当另一个控件停靠在本控件上时发生;
TToolBar Class
TToolBar管理工具按钮和其它控件,把它们排成行并且让它们自动适应它们的大小和位置。
TToolBar=class(TToolWindow);
TToolBar是工具按钮(TToolButton)的容器。它提供一个简单的办法去排列和管理虚拟控件。
在一个工具条内的所有工具按钮都保持统一的宽度和高度。
其它控件能放置到工具条上。这些固定在不可见工具按钮上的控件保持一个统一的高度。
在工具条上,当控件放不下时,这些控件就会自动环绕并且开辟新行以容纳控件。
Flat属性允许透过工具条显示背景并且把突出边框给工具按钮。
一般来讲,工具按钮响应应用程序菜单项,并提供用户对应用程序命令更直接的访问。
Public Properties:
ButtonCount:给出工具条中按钮的数量;
Buttons:在工具条中列出工具按钮;
Canvas:指定工具条的皮肤;
CustomizeKeyName:在用户使用工具条自定义对话框改变它之前,指定registry key(工具条将其现有按钮配置保存的位置);
CustomizeValueName:指定registry value;
RowCount:指示工具条的行数;
Published Properties:
Align:决定控件怎样和它所在的容器对齐;
AllowTextButtons:决定仅有文本组成的工具按钮是否能被工具条替代;
Anchors:指定控件怎样固定到其父控件中;
AutoSize:指示工具条的高度是否自动改变以容乃它包含的控件;
BorderWidth:指定工具条的边框宽度;
ButtonHeight:指定工具条中控件的高度;
ButtonWidth:指定在工具条中的工具按钮的宽度;
Caption:指定一个用户识别控件的文本字符串;
Color:指定控件的背景色;
Constraints:指定控件的尺寸约束;
Ctl3D:决定控件是否拥有3D视图;
Customizable:指定在运行时用户是否能定制用户界面工具条;
DisabledImages:列出可以显示不可用工具按钮的图片;
DockSite:指定控件是否能作为拖动和停靠操作的目标;
DoubleBuffered:Determines whether the control's image is rendered directly to the window or painted to an in-memory bitmap first.
DragCursor:当控件被拖动时鼠标指针的形状;
DranKind:指定控件是被正常拖动还是停靠;
DragMode:Determines how the control initiates drag-and-drop or drag-and-dock operations.
DrawingStyle:存储风格类型;
EdgeBorders:决定工具条的那一边有边界;
EdgeInner:决定工具条内部边缘的边框风格;
EdgeOuter:决定工具条外部边缘的边框风格;
Enabled:控制控件是否响应鼠标、键盘和定时器事件;
Flat:使工具条半透明并且消除工具按钮边框;
Font:控制控件上书写的文本的属性;
GradientDirection:指定倾斜方向是水平还是垂直;
GradientDrawingOptions:存储已选定的绘画选项;
GradientEndColor:斜坡的结束色;
GradientStartColor:斜坡的开始色;
Height:指定控件的垂直尺寸;
HideClippedButtons:指定通过邻近工具条掩盖按钮操作;
HotImages:列出当鼠标指向工具按钮时在工具按钮上显示的图片;
HotTrackColor:在倾斜风格中最新的跟踪色;
Images:列出工具按钮上显示的图片;
Indent:指定工具条左边的页边空白;
List:在工具按钮的右边显示主题,左边显示图片;
Menu:工具条关联的菜单项;
ParentColor:决定控件在哪里寻找它的颜色信息;
PopupMenu:认出和空间有关的弹出菜单;
ShowCaption:决定是否在工具按钮上显示文本主题;
ShowHint:决定当鼠标指针短暂停留在控件上时,控件是否显示帮助提示;
TabOrder:指示在父背的tab顺序里控件的位置;
TabStop:决定用户是否可以使用tab键使控件获得焦点;
Transparent:指定工具条是否透明;
Visible:决定组建是否显示在屏幕上;
Wrapable:自动调整工具条上的组件包;
OnAdvandedCustomDraw:发生在绘制工具条背景期间的离散阶段;
OnAdvancedCustomDrawButton:发生在绘制工具条按钮期间的离散阶段;
OnClick:当用户点击控件时发生;
OnContextPopup:当用户右键点击控件或其它引发弹出菜单(如使用键盘)时发生;
OnCustomDraw:当工具条必须被绘制时发生;
OnCustomDrawButton:当在工具条上的一个按钮必须被绘制时发生;
OnCustomizeAdded:当用户向工具条添加一个按钮时发生;
OnCustomizeCanDelete:当用户试图删除工具条上的一个按钮时发生;
OnCustomizeCanInsert:当用户试图向工具条添加一个按钮时发生;
OnCustomized:当用户结束更改工具条时发生;
OnCustomizeDelete:当用户从工具条上删除一个按钮时发生;
OncustomizeNewButton:当用户试图向工具条添加一个新按钮时发生;
OnCustomizeReset:当用户取消工具条的用户化时发生;
OnCustomizing:当用户显示工具条定制对话框为了改变工具条时发生;
OnDbClick:当鼠标指针在控件上,用户双击鼠标左键时发生;
OnDockDrop、OnDockOver、OnDragDrop、OnDragOver、OnEndDock、OnEndDrag
OnEnter:当一个控件接收到输入焦点时发生;
OnExit:当输入焦点从一个控件移到另一个控件时发生;
OnGetSiteInfo:返回控件的停靠信息;
OnMouseActivate:当鼠标指针在控件上,控件的父窗体非活动而用户按下一个鼠标按钮时发生;
OnMouseDown:当鼠标指针在控件上,而用户又按下一个鼠标按钮时发生;
OnMouseEnter:当用户把鼠标指针移到一个控件上时发生;
OnMouseLeave:当用户把鼠标指针移出控件时发生;
OnMouseMove:当鼠标指针在控件上,用户移动鼠标指针时发生;
OnMouseUp:当用户释放按在组件上的鼠标指针时发生;
OnResize:控件尺寸改变后立即发生;
OnStartDock:DragKind属性为dkDock,当用户开始拖动一个控件时发生;
OnStartDrag:当用户开始拖动一个控件或包含有鼠标保持按下状态在控件上的对象时发生;
OnUnDock:当应用程序试图移出一个已停靠在窗口控件上的控件时发生;
TToolButton Class
TToolButton是工具条对象上的一个按钮控件。
TToolButton = class(TGraphicControl);
使用TToolButtoon实施工具条上的按钮。在工具条上,其它控件(包括TButton和TSpeedButton)能被替代掉时,TToolButton使用特殊的工具条特征简化按钮布局,提供诸如弹出边框和透明度等的选项;
在设计阶段在工具条上放置工具按钮,选择工具条->右键->New Button。
Public Properties
Index:指定工具按钮的索引;
Published Properties
Action:指派与控件有关的行为;
AllowAllUp:指定是否在同一组中的所有工具按钮可以同时不被选中;
AutoSize:指定是否工具按钮自动调整大小以容纳它的文本和图片;
Caption:指定按钮主题;
Down:指定是否按钮被选择(down)还是未被选择(up);
DragCursor:当控件被拖动时,指示代表鼠标指针的图片;
DragKind:Specifies whether the control is being dragged normally or for docking.
DragMode:Determines how the control initiates drag-and-drop or drag-and-dock operations.
DropdownMenu:识别一个与工具按钮有关的弹出菜单;
Enabled:控制控件是否响应鼠标、键盘和定时器事件;
Grouped:聚集一些相邻的工具条按钮;
Height:指定控件的垂直尺寸(像素);
ImageIndex:决定哪张图片显示在工具按钮上;
Indeterminate:指定工具按钮既不被选择也不未被选择;
Marked:指定按钮是否被标记;
MenuItem:指定响应按钮的菜单项;
ParentShowHint:决定当控件的帮助提示应该显示时,控件到那找到这个提示;
PopupMenu:指定与控件有关的弹出菜单;
ShowHint:决定当鼠标短暂停留在控件上时,控件是否显示帮助提示;
Style:决定工具按钮的风格;
Visible:决定组建是否显示在屏幕上;
Width:指定窗体控件的水平尺寸(像素);
Wrap:Forces a new row after the tool button.
TTimer Class
TTimer被用于简化调用Windows API定时器函数SetTimer和KillTimer,简化处理WM_TIMER消息。在应用程序中一个TTimer组件对应一个定时器。
定时器通过它的OnTimer事件执行。TTimer有一个Interval属性,它决定了OnTimer事件发生的频率。Interval和Windows API的SetTimer函数的参数相对应。
注意:全系统所能拥有的定时器的数量限制和系统有关。
TADOConnection Class
TADOConnection压缩了ADO连接对象。使用TADOConnection连接到ADO数据存储。通过一个单独TADOConnection组件提供的连接能被多个ADO命令和数据集组件通过它们的连接属性共享。
TADOConnection = class(TCustomConnection, IUnknown, ConnectionEventsVT);
TADOConnection允许你控制连接到数据存储的属性和状况。使用TADOConnection的属性去控制这些诸如记录锁计划(乐观锁或非乐观锁)、光标类型、光标定位、隔离级别和连接超时等属性。方法提供了实施业务和获得关于组件连接到的数据库的元数据。
Public Properties
CommandCount:指示和连接有关的命令组件的数量;
Commands:列出连接组件的所有活动命令;
ConnectionObject:提供直接访问ADO连接对象;
DataSets:为一个连接组件提供活动的数据集的索引数组;
Errors:Errors是错误集的一个补充;
InTransaction::指示业务是否正在进展中;
Properties:TADOConnection类的一个成员;
State:指示ADO连接现在的状态;
Version:指示使用的ADO的版本;
Published Properties
Attributes:指定自动操作的交易行为;
CommandTimeout:指定试图执行一个命令所需要的时间;
Connected:指定连接是否活动的;
ConnectionString:指定对数据存储的连接信息;
ConnectionTimeOut:指定尝试连接所需要的时间;
ConnectOptions:指定连接是同步还是异步;
CursorLocation:指定连接的光标时客户端的还是服务器端的;
DefaultDatabase:指定ADO连接使用的默认数据库;
IsolationLevel:指定交易的隔离级别;
KeepConnection:指定在没有数据集处于打开状态时,应用程序是否仍然保持对数据库的连接;
LoginPrompt:指定在打开一个连接之前登录对话框是否立即显示;
Mode:指示允许使用的连接;
Provider:指定ADO连接的提供者;
Published Events
AfterConnect:创建一个连接后发生;
AfterDisconnect:关闭一个连接后发生;
BeforeConnect:创建一个连接前立即发生;
BeforeDisconnect:连接关闭前立即发生;
OnBeginTransComplete:开始一个交易后发生;
OnCommitTransComplete:提交一个交易后发生;
OnConnectComplete:开始一个连接后发生;
OnDisconnect:终止一个连接后发生;
OnExecuteComplete:执行完一个命令后发生;
OnInfoMessage:当从数据存储连接接收到信息消息时发生;
OnLogin:当打开通向服务器的通讯通道时发生;
OnRollbackTransComplete:回滚交易后发生;
OnWillConnect:请求开始连接后发生;
OnWillExecute:数据库服务器发送命令执行信号后发生;
Public Methods
BeginTrans:在相关的数据库上开始一个新的交易;
Cancel:终止对数据存储的连接企图;
CommitTrans:提交一个打开的交易;
Execute:对Execute方法重载的概述;
GetFieldNames:同上;
GetProcedureNames:同上;
GetTableNames同上;
Open:开始一个对数据库的连接;
OpenScheme:从连接提供者检索纲要信息;
RollbackTrans:回滚一个活动的交易;
TADOQuery Class
TADOQuery = class(TCustomADODataSet);
使用TADOQuery访问一个或更多在使用SQL语句数据存储中的表。
通过使用SQL语句,从数据存储的表中接收数据。在数据存储中,使用像INSERT、DELETE、UPDATE、ALTER TABLE和CREATE TABLE这样的语句在数据表和其它元数据对象上执行操作。执行存储过程。
Public Properties
RowsAffected:返回最后一次执行查询影响的行数;
Published Properties
CommandTimeout:指定试图执行一个命令所需要的时间;
DataSource:指定数据源组件,从而提取和在查询SQL语句中使用的参数相同的域值;
EnableBCD:指定采用浮点法还是BCD法对待数据;
ParamCheck:指定如果在运行时SQL语句改变了,数据集组件的参数列表是否也跟着改变;
Parameters:SQL语句的参数集;
Prepared:指定命令是否在执行前已准备好;
SQL:包含ADO查询所要执行的SQL文本;
Public Methods
ExecSQL:执行ADO查询组件的SQL语句;
TADODataSet Class
TADODataSet代表从数据存储接收到的一个数据集;
TADODataSet = class(TCustomADODataSet);
TADODataSet是最一般的ADO数据集组件。TADODataSet接收从ADO数据存储中的一个或多个表中返回的结果集。接收的内容既可以直接来自某个表也可以通过SQL语句来自一个或多个表。在用TADODataSet接收一个数据集前,应将它连接至数据存储。通过TADODataSet的ConnectionString属性或使用在Connection属性中已指定的TADOConnection组件。
使用TADODataSet组件的CommandText属性接收数据集,指定一个表名或一个SELECT语句。TADODataSet不适合数据操作语言(像DELETE INSERT UPDATE等没有返回集)的SQL语句。对于这些SQL语句应使用像TADOCommmand或TADOQuery等组件。
AfterCancel:应用程序完成对活动记录的更改后发生;
AfterClose:应用程序关闭一个数据集后发生;
AfterDelete:应用程序删除一条记录后发生;
AfterEdit:应用程序开始编辑一条记录后发生;
AfterInsert:应用程序插入一条新记录后发生;
AfterOpen:应用程序打开数据集以后但没发生数据访问以前发生;
AfterPost:应用程序把活动记录写入数据库或改变日志和返回浏览状态后发生;
AfterScroll:应用程序从一条记录滚动到另一条记录后发生;
BeforeCancel:应用程序执行取消对活动记录的改变的请求前发生;
BeforeClose:数据集关闭前立即发生;
BeforeDelete:应用程序试图删除活动记录前发生;
BeforeEdit:应用程序进入对活动记录的编辑模式前发生;
BeforeInsert:应用程序进入插入模式前发生;
BeforeOpen:应用程序执行一个打开数据集的请求前发生;
BeforePost:应用程序放弃对数据库或改变日志的活动记录的改变前发生;
BeforeScroll:应用程序从一条记录滚动到另一条记录前发生;
OnCalsFields:当应用程序重新计算已计算的数据域时发生;
OnDeleteError:当应用程序试图删除一条记录并且引起了一个例外时发生;
OnEditError:当应用程序试图修改或插入一条记录并且引起了一个例外时发生;
OnNewRecord:当应用程序插入或追加一条新数据集记录时发生;
OnPostError:当应用程序试图去修改或插入一条记录并且引起了一个例外时发生;
TDBGrid Class
TDBGrid显示和操作来自一个表格内的数据集内的记录。
TDBGrid = class(TCustomDBGrid);
把一个TDBGrid对象放到窗体上去显示和编辑来自数据库的表中或查询的记录。应用程序能使用这个表格去insert、delete或编辑在数据库中的数据,或者简单的显示数据。
在运行时,用户能使用数据库的TDBNavigator去移动表格中的数据,并且去插入、删除和编辑这些数据。在数据表格中做的编辑并不被提交给潜在的数据集直到用户移动到另一条记录或关闭应用程序。
TDBGrid拥有从TCustomDBGrid继承来的一般行为。TDBGrid发布了一些从TCustomDBGrid继承的属性但是并没介绍任何新的行为。
Public Properties
Canvas:指定为控件绘制皮肤的TCanvas对象;
SelectedRows:为在数据集中的所有记录指定一个书签集,类似于表格中的选择集。
Published Properties
Align:决定控件在它的父控件中如何对齐;
Anchors:指定控件如何固定到其父控件中;
BiDiMode:指定控件的双向模式;
BorderStyle:决定在表格四周是否绘制单线边框;
Color:指定控件的背景色;
Columns:描述显示属性和与列绑定的字段;
Constraints:指定控件的尺寸约束;
Ctl3D:决定控件有三维或二维视图;
DataSource:获得到数据集的连接,以便数据感知控件找到数据源;
DefaultDrawing:指示数据感知表格是否自动绘制;
Enabled:控制是否响应鼠标、键盘和定时器事件;
FixedColor:指定表格中固定行和列的背景色;
Font:控制控件上的文本的属性;
ImeMode:决定输入方法编辑者行为;
ImeName:向用户指定输入者把键盘输入转变为亚洲语言字符;
Options:指定数据感知控件的多种显示和行为属性;
PopupMenu:指定和空间有关的弹出菜单;
ReadOnly:指定使用的表格是否只供显示,或者是否能使用表格编辑数据;
ShowHint:决定当鼠标指针短暂停留在控件上时,控件是否显示帮助提示;
TabOrder:指示控件在其父控件的Tab顺序中的位置;
TabStop:决定用户是否能使用Tab使控件获得焦点;
TitleFont:描述画表格列标题的字体;
Visible:决定组件是否显示在屏幕上;
Published Events
OnCellClick:当用户释放表格单元格中的鼠标时发生;
OnColEnter:当焦点移动到表格中的一个新的单元格中时发生;
OnColExit:当单元格失去焦点前立即发生;
OnColumnMoved:当用户用鼠标移动一列时发生;
OnDblClick:当鼠标指针在控件上,用户双击鼠标左键时发生;
OnDragDrop:当用户放弃对对象的拖动时发生;
OnDrapOver:当用户把一个对象拖动到一个控件上时发生;
OnDrawColumnCell:当表格需要绘制一个单元格时发生;
OnDrawDataCell:如果Columns的State属性是csDefault,表格需要绘制一个单元格时发生;
OnEditButtonClick:当用户按下一个表格列中的省略按钮时发生;
OnEnter:当控件接收到输入焦点时发生;
OnExit:当输入焦点从一个控件移动到另一个控件时发生;
OnKeyDown:当控件拥有焦点,一个用户按下任意键盘键时发生;
OnKeyPress:当一个键被按下时发生;
OnKeyUp:当用户释放一个已被按下的键时发生;
OnMouseActivate:当父窗体处于非活动哦能够状态,鼠标指针在控件上,用户按下鼠标按钮时发生;
OnMouseDown:当鼠标指针在控件上,用户按下一个鼠标键时发生;
OnMouseEnter:当用户把鼠标移入一个控件时发生;
OnMouseLeave:当用户把鼠标移出一个控件时发生;
OnMouseMove:当用户在控件上移动鼠标指针时发生;
OnMouseUp:当用户释放已按在组件上的鼠标指针时发生;
OnTitleClick:当用户释放在某列头的鼠标时发生。
TADOStoredProc Class
Published Properties
CommandTimeout:指定试图执行命令所用的时间;
DataSource:代表给数据集提供值的数据源;
EnableBCD:指定数值字段值是使用浮点数表示还是BCD码表示;
Parameters:包含一个SQL语句的参数的集合;
Prepared:指定命令在执行前是否准备好;
ProcedureName:指示被TADOStoredProc使用的存储过程;
Public Methods
ExecProc:执行在服务器上的存储过程;
TButton Class
TButton = class(TCustomButton);
使用TButton把一个标准的按钮放到窗体上。在一个对话框设置窗体中,TButton引进几个属性去控制它的行为。用户选择按钮控件看是行动。
使用TBitBtn显示一个代替标签的位图。使用TSpeedButton显示进度。
提示:因为TButton主题总是在中心的,改变BiDi的对齐方式对其没有影响。
CommandLinkHint:在按钮主题下面作为对连接命令的文本提示;
Default:决定当Enter键被按下时,是否执行按钮的OnClick事件;
DisabledImageIndex:无效按钮状态的图片索引号;
ElevationRequired:把防火墙图标放在按钮上,指示改善访问权限;
HotImageIndex:热键状态的图片索引;
ImageAlignment:在按钮上图片的对齐方式;
ImageIndex:通常按钮状态的图片索引;
ImageMargins:在按钮上的图片的边缘;
Images:按钮的图片列表;
ModalResult:决定按钮是否关闭以及怎样关闭它(modal)的父窗体;
PressImageIndex:按钮处于按下状态时的图片索引;
SelectedImageIndex:按钮被选中时的图片索引;
WordWrap:指定指定是否按钮文本自动调整大小以适应控件的宽度;
TBitBtn Class
TBitBtn = class(TCustomButton);
位图按钮和按钮控件展示相同的行为。使用它们从窗体和对话框中开始行为。
位图按钮实施在按钮上指定位图图片和他们的显示和放置的属性。你可以从预定义位图按钮格式中或使用你自己定制的位图。虽然按钮只能和一个位图结合,位图(glyph属性)可以被细分为四个尺寸相等的部分。这些都基于按钮的up、down、disable和clicked状态显示。
TBitBtn的Kind属性提供经常使用的按钮,如OK、Cancel、Help等。这些预定义的按钮类型有相应的生动的图片和默认的行为,所以你能轻易的将他们添加到你的应用程序中甚至无需任何代码。
其它按钮种类相应用户点击的推荐方法是从事件列表中选择一个事件作为Action属性的值。通过设置Action属性,你使按钮作为了事件委托人,并且当用户点击按钮时,事件操作改变按钮的属性和响应。
当用户点击按钮时,如果你不使用对指定种类按钮或事件内置的响应,那么你能通过写OnClick事件指定响应。
Glyph:指定显示在位图按钮上的位图;
Layout:指定位图按钮的种类;
Margin:指定图片边缘与按钮边缘之间的像素大小;
ModalResult:决定按钮是否和怎样关闭它的父窗体;
NumGlyphs:指示在Glyph属性中被生动的指定的图片的数量;
Spacing:决定在位图和进度条上哪里显示图片和文本;
TComboBox Class
TComboBox把一个编辑框和一个滚动列表整合。
TComboBox = class(TCustomComboBox);
在TComboBox中,按钮的宽度和Windows使用的滚动条的宽度相等。这个宽度依赖于用户选择的配色方案(通过桌面右键,选择属性,选择外观)。在Windows XP上,用户可以通过点击高级按钮和选择滚动条项明确的改变滚动条的宽度。如果你调整了组合框的大小以至于所有的文本可见,那么当用户选用不同德配色方案时可以发现文本变模糊了。一个解决方法是当开发应用程序时设置滚动条宽度。大多颜色配置使用一个大概21像素的宽度的滚动条。
AutoCloseUp:指定当用户选择一个项目时,下拉列表是否自动关闭;
AutoComplete:当你键入字符时,自动匹配列表项;
AutoCompleteDelay:指定在一个键按下和试图自动匹配字段之间的延迟;
AutoDropDown:指定下拉列表是否自动打开以相应用户键;
BevelEdges:指定指定控件的那条边有斜面;
CharCase:决定组合框中文本的大小写;
Item:提供的在组合框列表位置要访问的列表项;
MaxLength:指定用户可以键入组合框编辑位置的最大字符数量;
Sorted:决定组合框列表位置是否按字母顺序排列;
Text:包含一个与控件有关的文本字符串。
OnChange:当用户改变现实在编辑区域的文本时发生;
OnClick:当用户点击控件时发生;
OnCloseUp:当当下拉列表由于用户的某些行为而关闭时发生;
OnContextPopup:当用户右击控件或引发弹出菜单(如:使用键盘)时发生;
OnDblClick:当鼠标指针在控件上用户双击鼠标左键时发生;
OnDrawItem:当一个在用户自定义组合框中的项目需要显示时发生;
OnMeasureItem:当在一个csOwnerDrawVariable组合框中的项目需要显示时发生;
OnSelect:当用户在下拉列表中选择一个字符串时发生;
TStaticText Class
TStaticText是一个窗口化的控件,在一个窗体上显示文本。
TStaticText = class(TCustomStaticText);
TStaticText组件函数像TLabel,除了TStaticText起源于TWinControl,因此有一个窗口句柄。当组件的加速键必须属于一个窗口化的控件(如在一个ActiveX属性上)时使用TStaticText代替TLabel。
TLabel Class
TLabel = class(TCustomLabel);
使用TLabel添加用户不能在窗体上编辑的文本。这个文本能被用于标记另一个控件,并且当用户键入快捷键时,对那个控件设置焦点。
因为TLabel不是从TWinControl继承,它没有自己的窗口,并且不能接收键盘的输入。向窗体添加一个能响应键盘输入并且可以显示文本的对象是TStaticText。
向窗体添加一个可以显示文本的对象并且用户可以滚动或编辑,就使用TEdit。
EllipsisPosition:指定省略(并不适合于已分配的矩形)怎样被放置在文本中;
FocusControl:指派一个与label相关的窗口化控件;
GlowSize:
ShowAccelChar:决定‘&’在标签文本中如何显示。
TEdit Class
TEdit = class(TCustomEdit);
使用TEdit对象把一个标准的Windows编辑控件放置到窗体上。编辑控件被用于接收用户键入的文本。编辑控件也可以向用户显示文本。
当仅向用户显示文本时,选择一个编辑控件允许用户选择文本和把文本复制到剪贴板上。如果不需要编辑控件的选择功能,就选择用标签对象。
TEdit引入了TCustomEdit的一般行为。TEdit发布了一些继承自TCustomEdit的属性,但是并没有引入任何新的行为。对于特殊的编辑控件,使用从TCustomEdit或其子类继承的其它类。
AutoSelect:决定当控件获得焦点时,是否编辑控件中的所有文本都自动被选中;
CharCase:决定在编辑控件中的文本的大小写;
HideSelection:决定当焦点转移到另一个控件时文本被选择的指示是否保留;
MaxLength:指定用户可以键入编辑控件的字符的最大数量;
NumbersOnly:仅允许数字被键入文本编辑控件中。
OnChange:当编辑控件的文本可能已经改变时发生;
OnContextPopup:当用户右击控件或执行其它引发弹出菜单的操作。
TGroupBox Class
TGroupBox = class(TCustomGroupBox);
TGroupBox组件代表一个标准的窗口编组框,用于把控件上相关的控件分组。当另一个控制组件被放置到一个分组框,这分组框就变成此控件的父组件。
TRadioGroup Class
TRadioGroup = class(TCustomRadioGroup);
一个TRadioGroup对象时一个特殊的编组框,它仅包含单选按钮。被直接放置在同一控制组件上的单选按钮属于一组。当用户选择一个单选按钮时,所有其它在同一族中的单选按钮变得未被选中。因此,在同一窗体中的两个单选按钮只有在它们被放置在单独的容器(如:分组框)中时才能被同时选中。
要向TRadiaGroup添加单选按钮,就在object Inspector中编辑Items属性。在Items中的每个字符串作为单选按钮的主题,在分组框中代表一个单选按钮。ItemIndex属性的值决定哪一个单选按钮目前处于被选中状态。
通过设置Columns属性,单选按钮可以单列或多列显示。
Note:设置单选组的BiDiMode为bdRightToLeft自动翻转单选按钮,FlipChildren方法将失去作用。
Columns:指定在单选组中列的数量;
ItemIndex:指示在分组框中的那个单选按钮目前处于选中状态;
Items:列出在单选组中的单选按钮;
TListbox Class
TListBox = class(TCustomListBox);
使用TListBox显示一个用户可以选择、添加或删除的项的列表。TListBox时Windows列表框控件的封装。对于特殊的列表框,使用其它继承自TCustomListBox或其子类的类。
TListBox实施继承自TCustomListBox的行为。TListBox发布了一些继承自TCustomListBox的属性,但是并没有引入任何新的行为。
AutoComplete:决定用户是否能通过在列表中键入字符使列表中的项获得焦点;
AutocompleteDelay:指定一个键按下和自动完成字段获得焦点之间的间隔;
ExtendedSelect:使用Shift和CTRL键使列表项实现多选;
IntegralHeight:决定列表框是否显示部分项。
ItemHeight:指定在一个自己绘制的列表框中列表项的高度(像素);
Items:包含显示在列表框中的字符串;
MultiSelect:指定用户是否能选择多于一个的列表项;
ScrollWidth:指定列表框水平滚动的宽度(像素);
Sorted:指定在列表框中的项是否按字母顺序排列;
TabWidth:指定在列表框中Tabs的尺寸。
OnData:当一个虚拟列表框需要提供一个项的文字时发生;
OnDataFind:当一个虚拟列表框需要认出已经给定文字的项的索引时发生;
OnDataObject:当一个虚拟列表框需要提供和某一项有关的对象时发生。
TTreeView Class
TTreeView代表一个显示项的阶层列表的窗口,就像文档的头、索引的入口或者在硬盘上的文件和路径。
TTreeView = class(TCustomTreeView);
使用TTreeView向窗体添加一个扩展的和简化的缩略图。在树形视图控件中的每个节点都有一个标签和可选的位图图片组成。每个节点拥有一系列有关的子节点。通过在一个节点上点击,用户能展开或缩回有关子节点列表。
AutoExpand:指定树视图的节点是否依选择自动展开或收缩;
ChangeDelay:指定一个当一个节点被选择时到当OnChange事件发生时之间的间隔;
HideSelection决定当焦点转移到另一个控件时,一个被选择的节点是否仍然显示被选择;
HotTrack:指定当鼠标通过列表项时,列表项是否高亮显示;
Images:决定哪个图片和树形视图有关;
Indent:指定列表的子节点被展开时的缩进量(像素);
Items:列出显示在树形视图控件内的单独节点;
Property Items:TTreeNodes;
TTreeNodes = class(TPersistent);
在树形控件中单独的节点时TTreeNode对象。这些单独的节点可以通过使用Items树形和item的索引来访问。例如:访问树形可噢噢你关键的第二个项:
MyTreeNode:=TreeView1.Items[1];
MultiSelect:决定用户是否可以一次性选择多于一个的树形节点;
MultiSelectStyle:决定多个被选的节点如何工作;
ReadOnly:决定用户是否可以编辑节点标签;
RightClickSelect:决定决定Selected属性是否返回鼠标右键选择的节点;
RowSelect:指定被选择项是否整行都高亮显示;
ShowButtons:指定是否在每个父节点项的左边显示‘+’或‘-’按钮;
ShowLines:指定是否显示连接子节点和相应父节点的连线;
ShowRoot:决定线连得高阶层节点是否显示;
SortType:决定在树形视图中的节点是否和怎样自动排序;
StateImages:决定哪一个图片被用做状态图片;
ToolTips:指定树形视图中的项是否有工具提示。
通过使用treeview1.Selected.Text来判断哪个节点被选中了。
OnAddition:当新节点被添加时发生;
OnAdvancedCustomDraw:在树形视图控件绘制期间的个别阶段发生;
OnAdvancedCustomDrawItem:在绘制树形控件节点期间的个别阶段发生;
OnChange:无论何时选择已经从一个节点变为另一个节点时发生;
OnChanging:当选择即将从一个节点变为另一个节点时发生;
OnCollapsed:一个节点已被倒塌后发生;
Oncollapsing:一个节点即将倒塌时发生;
OnCompare:当树形视图节点的排序过程中,两个节点必须比较时发生;
OncreateNodeClass:当树形视图的一个节点即将被创建时发生;
OnCustomDraw:绘制树形视图控件以前立即发生;
OnCustomDrawItem:绘制树形视图节点前立即发生;
OnDeletion:当树形视图中一个节点被删除时发生;
OnEdited:当用户编辑一个节点的文本属性后发生;
OnEditing:当用户开始编辑节点的文本属性时发生;
OnExpanding当一个节点即将被展开时发生;
OnGetImageIndex:当树形视图找到一个节点的图片索引时发生;
OnGetSelectedIndex:当树形视图找到被选择的节点的索引时发生;
TDataModule Class
TDataModule = class(TComponent);
在应用程序中,使用TDataModule对象提供非可视组件的集中处理位置。尤其是如TSQLDataSet、TSQLConnection等数据访问组件。数据模板并未被限制于数据访问组件,它们也能包含其它非可视组件,如TTimer、TOpenDialog、TImageList等。
在设计阶段,TDataModule对象提供一个可视的容器,开发者可以放置非可视组件,设置它们的属性,为他们编写事件处理程序。在设计阶段创建一个数据模板,选择File|New Data Module。
在数据模板的单元文件中,开发者也可以放置任何应用程序使用的业务规则。
为了使数据模板在应用程序的其它单元中可用,选择那个单元,选择File|Use Unit添加数据模板到uses语句里。
OnCreate:当应用程序举例说明一个数据模板时发生;
Ondestroy:当数据模板即将被销毁时发生;
VC++使用串口
The purpose of this article is to demonstrate the use of Win32 functions for serial port communication in Visual C++. A C++ class CSyncSerialComm has been developed to implement the following serial port communication operations:
• Open
• Configuration
• Read
• Write
• Close
A background in Visual C++ programming is sufficient to grasp the technical details of this article. Access to MSDN is required for looking at the definition of functions, structures etc. used in this article. The article takes a look at only non-overlapped (synchronous) operations supported by Win32. My next article will show implementation of serial port communication using overlapped (asynchronous) structures.
I. Open
Before starting any communication on a serial port, we must first open a connection. This is achieved by using CreateFile function in Win32. (Those of you familiar with File I/O must be aware of this function.) The following code is used to open a serial port connection in non-overlapped mode.
Collapse | Copy Code
m_hSerialComm = CreateFile(m_pszPortName,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISITING,
0,
NULL);
if (m_hSerialComm == INVALID_HANDLE_VALUE)
//Handle Error Condition
The CreateFile function takes in seven parameters. (Please take a brief moment to look at this function in MSDN.)
• The first parameter specifies the port name. In our case, this is usually COM, COM2, COM3 or COM4.
• The second parameter must be GENERIC_READ | GENERIC_WRITE to support both read and write access.
• The third parameter must always be 0 for serial port communication because unlike files, serial port access cannot be shared.
• The fourth parameter is used to set security attributes. If no security attribute needs to be specified, just use NULL.
• The fifth parameter must always be set to OPEN_EXISTING.
• The sixth parameter is used to specify flags and attributes (either 0 or FILE_ATTRIBUTE_NORMAL can be used).
• The last parameter must always be NULL as we only support non-overlapped communication.
The HANDLE m_hSerialComm that is returned by the CreateFile function can now be used for performing operations like Configure, Read and Write.
II. Configuration
After opening connection to a serial port, the next step is usually to configure the serial port connect settings like Baud Rate, Parity Checking, Byte Size, Error Character, EOF Character etc. Win32 provides a DCB struct that encapsulates these settings (refer to MSDN for DCB struct definition). Configuration of the serial port connection settings is performed in the following three steps:
1. First, we have to access the present settings of the serial port using the GetCommState function. The function takes in two parameters:
o The first parameter is the HANDLE we received from the call to the CreateFile function.
o The second parameter is an output parameter, which returns the DCB structure containing the present settings.
2. Next, using the DCB structure that we obtained from the previous step, we can modify the necessary settings according to the application needs.
3. Finally, we update the changes by using the SetCommState method.
The following code is a sample shown explaining the use of these functions. (Note: A number of the fields in the DCB struct are not used in the example. A more sophisticated application must allow the client to configure these settings.)
Collapse | Copy Code
DCB dcbConfig;
if(GetCommState(m_hSerialComm, &dcbConfig))
{
dcbConfig.BaudRate = dwBaudRate;
dcbConfig.ByteSize = 8;
dcbConfig.Parity = NOPARITY;
dcbConfig.StopBits = ONESTOPBIT;
dcbConfig.fBinary = TRUE;
dcbConfig.fParity = TRUE;
}
else
//Handle Error Condition
if(!SetCommState(m_hSerialComm, &dcbConfig))
//Handle Error Condition
Another important part of configuration of serial port connection settings is setting timeouts. Again, Win32 provides a COMMTIMEOUTS struct for setting Read and Write Timeouts. We are also provided with two functions GetCommTimeouts and SetCommTimeouts to access, modify, and update the timeout settings. The following code can be used to set the serial port timeouts:
Collapse | Copy Code
COMMTIMEOUTS commTimeout;
if(GetCommTimeouts(m_hSerialComm, &commTimeout))
{
commTimeout.ReadIntervalTimeout = 1000 * dwReadTimeOutIntervalInSec;
commTimeout.ReadTotalTimeoutConstant = 1000 * dwReadTimeOutConstantInSec;
commTimeout.ReadTotalTimeoutMultiplier = 1000 * dwReadTimeOutMultiplier;
commTimeout.WriteTotalTimeoutConstant = 1000 * dwWriteTimeOutInSec;
commTimeout.WriteTotalTimeoutMultiplier = 1000 * dwWriteTimeOutMultiplier;
}
else
//Handle Error Condition
if(!SetCommTimeouts(m_hSerialComm, &commTimeout))
//Handle Error Condition
III. Read
There are many different implementations for reading from a Serial Port Connection. In the CSyncSerialComm class that is provided with this article, serial communication events are used in the implementation of the Read operation. There are three important sets in this implementation.
1. First, we setup a Read Event using the SetCommMask function. (Note: This function can also be used to set many other different types of serial communication events.) This event is fired when a character is read and buffered internally by Windows Operating System. The SetCommMask function takes in two parameters:
o The first parameter is the HANDLE we received from the call to the CreateFile function.
o The second parameter is used to specify the event type. To specify a Read Event, we use EV_RXCHAR flag.
2. After calling the SetCommMask function, we call the WaitCommEvent function to wait for the event to occur. This function takes in three parameters:
o The first parameter is the HANDLE we received from the call to the CreateFile function.
o The second parameter is an output parameter, which reports the event type that was fired.
o The third parameter is a pointer to an OVERLAPPED structure. Since, our implementation is for Non-Overlapped communication, it must be set to NULL.
3. Once this event is fired, we then use the ReadFile function to retrieve the bytes that were buffered internally. The ReadFile function takes in five parameters:
o The first parameter is the HANDLE we received from the call to the CreateFile function.
o The second parameter is a buffer that would receive the bytes if the ReadFile function returns successfully.
o The third parameter specifies the size of our buffer we passed in as the second parameter.
o The fourth parameter is an output parameter that will notify the user about the number of bytes that were read.
o The last parameter is always NULL for our purpose since we do not deal with non-overlapped mode.
In our example, we read one byte at a time and store it in a temporary buffer. This continues until the case when ReadFile function returns successfully and the fourth parameter has a value of 0. This indicates that the internal buffer used by Windows OS is empty and so we stopping reading. The following code shows the implementation of this technique:
Collapse | Copy Code
std::stringbuf sb;
DWORD dwEventMask;
if(!SetCommMask(m_hSerialComm, EV_RXCHAR))
//Handle Error Condition
if(WaitCommEvent(m_hSerialComm, &dwEventMask, NULL))
{
char szBuf;
DWORD dwIncommingReadSize;
do
{
if(ReadFile(m_hSerialComm, &szBuf, 1, &dwIncommingReadSize, NULL) != 0)
{
if(dwIncommingReadSize > 0)
{
dwSize += dwIncommingReadSize;
sb.sputn(&szBuf, dwIncommingReadSize);
}
}
else
//Handle Error Condition
} while(dwIncommingReadSize > 0);
}
else
//Handle Error Condition
IV. Write
Write operation is easier to implement than Read. It involves using just one function, WriteFile. It takes in five parameters similar to ReadFile function. The second parameter in WriteFile specifies the buffer to be written to the serial port. The following example shows implementation of Write using WriteFile. It writes one byte at a time until all the bytes in our buffer are written:
Collapse | Copy Code
unsigned long dwNumberOfBytesSent = 0;
while(dwNumberOfBytesSent < dwSize )
{
unsigned long dwNumberOfBytesWritten;
if(WriteFile(m_hSerialComm, &pszBuf[dwNumberOfBytesSent], 1,
&dwNumberOfBytesWritten, NULL) != 0)
{
if(dwNumberOfBytesWritten > 0)
++dwNumberOfBytesSent;
else
//Handle Error Condition
}
else
//Handle Error Condition
}
V. Close
After we finish all our communication with the serial port, we have to close the connection. This is achieved by using the CloseHandle function and passing in the serial port HANDLE we obtained from the CreateFile function call. Failure to do this results in hard to find handle leaks. The follow code snippet explains the use of this function:
Collapse | Copy Code
if(m_hSerialComm != INVALID_HANDLE_VALUE)
{
CloseHandle(m_hSerialComm);
m_hSerialComm = INVALID_HANDLE_VALUE;
}
Conclusion
I hope my demonstration of the use of Win32 functions in serial port communication will serve as a starting point. I am sure as you browse through MSDN looking for these function definitions, you will come across more sophisticated functions that might be better suited for your application needs.
License
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
请发表评论