常用DELPHI控件屬性事件設置說明
常用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.
