天天看點

DELPHI控件屬性事件說明

常用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伺服器提供的工具條替換。

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:指定一個使用者識别控件的文本字元串;

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:決定工具條外部邊緣的邊框風格;

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:發生在繪制工具條按鈕期間的離散階段;

OnContextPopup:當使用者右鍵點選控件或其它引發彈出菜單(如使用鍵盤)時發生;

OnCustomDraw:當工具條必須被繪制時發生;

OnCustomDrawButton:當在工具條上的一個按鈕必須被繪制時發生;

OnCustomizeAdded:當使用者向工具條添加一個按鈕時發生;

OnCustomizeCanDelete:當使用者試圖删除工具條上的一個按鈕時發生;

OnCustomizeCanInsert:當使用者試圖向工具條添加一個按鈕時發生;

OnCustomized:當使用者結束更改工具條時發生;

OnCustomizeDelete:當使用者從工具條上删除一個按鈕時發生;

OncustomizeNewButton:當使用者試圖向工具條添加一個新按鈕時發生;

OnCustomizeReset:當使用者取消工具條的使用者化時發生;

OnCustomizing:當使用者顯示工具條定制對話框為了改變工具條時發生;

OnDbClick:當滑鼠指針在控件上,使用者輕按兩下滑鼠左鍵時發生;

OnDockDrop、OnDockOver、OnDragDrop、OnDragOver、OnEndDock、OnEndDrag

OnEnter:當一個控件接收到輸入焦點時發生;

OnExit:當輸入焦點從一個控件移到另一個控件時發生;

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.

DropdownMenu:識别一個與工具按鈕有關的彈出菜單;

Grouped:聚集一些相鄰的工具條按鈕;

ImageIndex:決定哪張圖檔顯示在工具按鈕上;

Indeterminate:指定工具按鈕既不被選擇也不未被選擇;

Marked:指定按鈕是否被标記;

MenuItem:指定響應按鈕的菜單項;

ParentShowHint:決定當控件的幫助提示應該顯示時,控件到那找到這個提示;

PopupMenu:指定與控件有關的彈出菜單;

ShowHint:決定當滑鼠短暫停留在控件上時,控件是否顯示幫助提示;

Style:決定工具按鈕的風格;

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的屬性去控制這些諸如記錄鎖計劃(樂觀鎖或非樂觀鎖)、光标類型、光标定位、隔離級别和連接配接逾時等屬性。方法提供了實施業務和獲得關于元件連接配接到的資料庫的中繼資料。

CommandCount:訓示和連接配接有關的指令元件的數量;

Commands:列出連接配接元件的所有活動指令;

ConnectionObject:提供直接通路ADO連接配接對象;

DataSets:為一個連接配接元件提供活動的資料集的索引數組;

Errors:Errors是錯誤集的一個補充;

InTransaction::訓示業務是否正在進展中;

Properties:TADOConnection類的一個成員;

State:訓示ADO連接配接現在的狀态;

Version:訓示使用的ADO的版本;

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這樣的語句在資料表和其它中繼資料對象上執行操作。執行存儲過程。

RowsAffected:傳回最後一次執行查詢影響的行數;

DataSource:指定資料源元件,進而提取和在查詢SQL語句中使用的參數相同的域值;

EnableBCD:指定采用浮點法還是BCD法對待資料;

ParamCheck:指定如果在運作時SQL語句改變了,資料集元件的參數清單是否也跟着改變;

Parameters:SQL語句的參數集;

Prepared:指定指令是否在執行前已準備好;

SQL:包含ADO查詢所要執行的SQL文本;

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繼承的屬性但是并沒介紹任何新的行為。

Canvas:指定為控件繪制皮膚的TCanvas對象;

SelectedRows:為在資料集中的所有記錄指定一個書簽集,類似于表格中的選擇集。

Align:決定控件在它的父控件中如何對齊;

Anchors:指定控件如何固定到其父控件中;

BorderStyle:決定在表格四周是否繪制單線邊框;

Columns:描述顯示屬性和與列綁定的字段;

Ctl3D:決定控件有三維或二維視圖;

DataSource:獲得到資料集的連接配接,以便資料感覺控件找到資料源;

DefaultDrawing:訓示資料感覺表格是否自動繪制;

Enabled:控制是否響應滑鼠、鍵盤和定時器事件;

FixedColor:指定表格中固定行和列的背景色;

Font:控制控件上的文本的屬性;

ImeMode:決定輸入方法編輯者行為;

ImeName:向使用者指定輸入者把鍵盤輸入轉變為亞洲語言字元;

Options:指定資料感覺控件的多種顯示和行為屬性;

PopupMenu:指定和空間有關的彈出菜單;

ReadOnly:指定使用的表格是否隻供顯示,或者是否能使用表格編輯資料;

TabOrder:訓示控件在其父控件的Tab順序中的位置;

TabStop:決定使用者是否能使用Tab使控件獲得焦點;

TitleFont:描述畫表格列标題的字型;

OnCellClick:當使用者釋放表格單元格中的滑鼠時發生;

OnColEnter:當焦點移動到表格中的一個新的單元格中時發生;

OnColExit:當單元格失去焦點前立即發生;

OnColumnMoved:當使用者用滑鼠移動一列時發生;

OnDragDrop:當使用者放棄對對象的拖動時發生;

OnDrapOver:當使用者把一個對象拖動到一個控件上時發生;

OnDrawColumnCell:當表格需要繪制一個單元格時發生;

OnDrawDataCell:如果Columns的State屬性是csDefault,表格需要繪制一個單元格時發生;

OnEditButtonClick:當使用者按下一個表格列中的省略按鈕時發生;

OnEnter:當控件接收到輸入焦點時發生;

OnExit:當輸入焦點從一個控件移動到另一個控件時發生;

OnKeyDown:當控件擁有焦點,一個使用者按下任意鍵盤鍵時發生;

OnKeyPress:當一個鍵被按下時發生;

OnKeyUp:當使用者釋放一個已被按下的鍵時發生;

OnMouseActivate:當父窗體處于非活動哦能夠狀态,滑鼠指針在控件上,使用者按下滑鼠按鈕時發生;

OnMouseDown:當滑鼠指針在控件上,使用者按下一個滑鼠鍵時發生;

OnMouseEnter:當使用者把滑鼠移入一個控件時發生;

OnMouseLeave:當使用者把滑鼠移出一個控件時發生;

OnMouseMove:當使用者在控件上移動滑鼠指針時發生;

OnMouseUp:當使用者釋放已按在元件上的滑鼠指針時發生;

OnTitleClick:當使用者釋放在某列頭的滑鼠時發生。

TADOStoredProc Class

CommandTimeout:指定試圖執行指令所用的時間;

DataSource:代表給資料集提供值的資料源;

EnableBCD:指定數值字段值是使用浮點數表示還是BCD碼表示;

Parameters:包含一個SQL語句的參數的集合;

Prepared:指定指令在執行前是否準備好;

ProcedureName:訓示被TADOStoredProc使用的存儲過程;

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:當使用者改變現實在編輯區域的文本時發生;

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,

            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.)

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

if(!SetCommState(m_hSerialComm, &dcbConfig))

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:

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;

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 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 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 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:

std::stringbuf sb;

DWORD dwEventMask;

if(!SetCommMask(m_hSerialComm, EV_RXCHAR))

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);

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:

unsigned long dwNumberOfBytesSent = 0;