經常使用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對象等。mysql
ArrangeIcons:安排最小化MDI子窗體的圖標;
Cascade:排列MDI子窗體,使他們重疊;
Next:激活在窗體隊列中的下一個子窗體;
Previous:激活在窗體隊列中的前一個MDI子窗體;
Title:排列MDI子窗體,使他們都是同樣的大小。sql
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:當應用程序試圖移出一個已停靠在窗口控件上的控件時發生;app
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函數的參數相對應。
注意:全系統所能擁有的定時器的數量限制和系統有關。async
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. CloseAfter 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 Codeif(m_hSerialComm != INVALID_HANDLE_VALUE){ CloseHandle(m_hSerialComm); m_hSerialComm = INVALID_HANDLE_VALUE;}ConclusionI 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.LicenseThis 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.