2 // MHComPort Êîìïîíåíò (MHComPort Component)
3 // Àâòîð (Author): Æàðîâ Äìèòðèé (Zharov Dmitry) aka Ãýíäàëüô (Gandalf)
4 // Äàòà ñîçäàíèÿ (Create date): 4-ìàé(may)-2002
5 // Äàòà êîððåêöèè (Last correction Date): 15-ôåâ(feb)-2003
6 // Âåðñèÿ (Version): 1.12
7 // EMail: Gandalf@kol.mastak.ru
8 // WWW: http://kol.mastak.ru
9 // Áëàãîäàðíîñòè (Thanks):
14 // [+] Ïîääåðæêà D7 (D7 Support) [KOLnMCK]
17 // [+] Ïîääåðæêà D6 (D6 Support) <Thanks to Alexander Pravdin> [KOLnMCK]
20 // [!] Ñîîáùåíèÿ (Events) [KOLnMCK]
21 // [+] Ïðèâÿçêà ñîáûòèé (Assign Events) [MCK]
23 // Ñïèñîê äåë (To-Do list):
25 // 2. Îïòèìèçèðîâàòü (Optimize)
26 // 3. Ïîä÷èñòèòü (Clear Stuff)
28 // 5. Óäàëèòü RxOnBuf (Strip RxOnBuf)
29 // 6. Íîðìàëüíàÿ èêîíêà (Icon Correct)
34 KOL
, KOLMHComPort
, mirror
, Classes
;
37 TKOLMHComPort
= class;
39 TComFlowControl
= class(TPersistent
)
41 FComPort
: TKOLMHComPort
;
44 FControlDTR
: TDTRFlowControl
;
45 FControlRTS
: TRTSFlowControl
;
48 FDSRSensitivity
: Boolean;
49 FTxContinueOnXoff
: Boolean;
52 procedure SetComPort(const AComPort
:TKOLMHComPort
);
53 procedure SetOutCTSFlow(const Value
: Boolean);
54 procedure SetOutDSRFlow(const Value
: Boolean);
55 procedure SetControlDTR(const Value
: TDTRFlowControl
);
56 procedure SetControlRTS(const Value
: TRTSFlowControl
);
57 procedure SetXonXoffOut(const Value
: Boolean);
58 procedure SetXonXoffIn(const Value
: Boolean);
59 procedure SetDSRSensitivity(const Value
: Boolean);
60 procedure SetTxContinueOnXoff(const Value
: Boolean);
61 procedure SetXonChar(const Value
: Char);
62 procedure SetXoffChar(const Value
: Char);
63 procedure SetFlowControl(const Value
: TFlowControl
);
64 function GetFlowControl
: TFlowControl
;
66 procedure AssignTo(Dest
: TPersistent
); override;
69 property ComPort
: TKOLMHComPort read FComPort
;
71 property FlowControl
: TFlowControl read GetFlowControl write SetFlowControl stored
False;
72 property OutCTSFlow
: Boolean read FOutCTSFlow write SetOutCTSFlow
;
73 property OutDSRFlow
: Boolean read FOutDSRFlow write SetOutDSRFlow
;
74 property ControlDTR
: TDTRFlowControl read FControlDTR write SetControlDTR
;
75 property ControlRTS
: TRTSFlowControl read FControlRTS write SetControlRTS
;
76 property XonXoffOut
: Boolean read FXonXoffOut write SetXonXoffOut
;
77 property XonXoffIn
: Boolean read FXonXoffIn write SetXonXoffIn
;
78 property DSRSensitivity
: Boolean
79 read FDSRSensitivity write SetDSRSensitivity default
False;
80 property TxContinueOnXoff
: Boolean
81 read FTxContinueOnXoff write SetTxContinueOnXoff default
False;
82 property XonChar
: Char read FXonChar write SetXonChar default
#17;
83 property XoffChar
: Char read FXoffChar write SetXoffChar default
#19;
86 TComTimeouts
= class(TPersistent
)
88 FComPort
: TKOLMHComPort
;
89 FReadInterval
: Integer;
92 FWriteTotalM
: Integer;
93 FWriteTotalC
: Integer;
94 procedure SetComPort(const AComPort
: TKOLMHComPort
);
95 procedure SetReadInterval(const Value
: Integer);
96 procedure SetReadTotalM(const Value
: Integer);
97 procedure SetReadTotalC(const Value
: Integer);
98 procedure SetWriteTotalM(const Value
: Integer);
99 procedure SetWriteTotalC(const Value
: Integer);
101 procedure AssignTo(Dest
: TPersistent
); override;
104 property ComPort
: TKOLMHComPort read FComPort
;
106 property ReadInterval
: Integer read FReadInterval write SetReadInterval default
-1;
107 property ReadTotalMultiplier
: Integer read FReadTotalM write SetReadTotalM default
0;
108 property ReadTotalConstant
: Integer read FReadTotalC write SetReadTotalC default
0;
109 property WriteTotalMultiplier
: Integer
110 read FWriteTotalM write SetWriteTotalM default
100;
111 property WriteTotalConstant
: Integer
112 read FWriteTotalC write SetWriteTotalC default
1000;
115 TComParity
= class(TPersistent
)
117 FComPort
: TKOLMHComPort
;
122 procedure SetComPort(const AComPort
: TKOLMHComPort
);
123 procedure SetBits(const Value
: TParityBits
);
124 procedure SetCheck(const Value
: Boolean);
125 procedure SetReplace(const Value
: Boolean);
126 procedure SetReplaceChar(const Value
: Char);
128 procedure AssignTo(Dest
: TPersistent
); override;
131 property ComPort
: TKOLMHComPort read FComPort
;
133 property Bits
: TParityBits read FBits write SetBits
;
134 property Check
: Boolean read FCheck write SetCheck default
False;
135 property Replace
: Boolean read FReplace write SetReplace default
False;
136 property ReplaceChar
: Char read FReplaceChar write SetReplaceChar default
#0;
139 TComBuffer
= class(TPersistent
)
141 FComPort
: TKOLMHComPort
;
143 FOutputSize
: Integer;
144 procedure SetComPort(const AComPort
: TKOLMHComPort
);
145 procedure SetInputSize(const Value
: Integer);
146 procedure SetOutputSize(const Value
: Integer);
148 procedure AssignTo(Dest
: TPersistent
); override;
151 property ComPort
: TKOLMHComPort read FComPort
;
153 property InputSize
: Integer read FInputSize write SetInputSize default
1024;
154 property OutputSize
: Integer read FOutputSize write SetOutputSize default
1024;
157 TKOLMHComPort
= class(TKOLObj
)
160 // FUpdateCount: Integer;
161 FBaudRate
: TBaudRate
;
162 FCustomBaudRate
: Integer;
164 FStopBits
: TStopBits
;
165 FDataBits
: TDataBits
;
166 FDiscardNull
: Boolean;
171 FTimeouts
: TComTimeouts
;
172 FFlowControl
: TComFlowControl
;
173 FSyncMethod
: TSyncMethod
;
174 FStoredProps
: TStoredProps
;
175 FOnRxChar
: TRxCharEvent
;
176 FOnRxBuf
: TRxBufEvent
;
177 FOnTxEmpty
: TOnEvent
;
180 FOnCTSChange
: TComSignalEvent
;
181 FOnDSRChange
: TComSignalEvent
;
182 FOnRLSDChange
: TComSignalEvent
;
183 FOnError
: TComErrorEvent
;
185 FOnAfterOpen
: TOnEvent
;
186 FOnAfterClose
: TOnEvent
;
187 FOnBeforeOpen
: TOnEvent
;
188 FOnBeforeClose
: TOnEvent
;
189 FOnRx80Full
: TOnEvent
;
190 procedure SetBaudRate(const Value
: TBaudRate
);
191 procedure SetCustomBaudRate(const Value
: Integer);
192 procedure SetPort(const Value
: TPort
);
193 procedure SetStopBits(const Value
: TStopBits
);
194 procedure SetDataBits(const Value
: TDataBits
);
195 procedure SetDiscardNull(const Value
: Boolean);
196 procedure SetEventChar(const Value
: Char);
197 procedure SetSyncMethod(const Value
: TSyncMethod
);
198 procedure SetParity(const Value
: TComParity
);
199 procedure SetTimeouts(const Value
: TComTimeouts
);
200 procedure SetBuffer(const Value
: TComBuffer
);
201 procedure SetFlowControl(const Value
: TComFlowControl
);
202 procedure SetOnRxChar(const Value
:TRxCharEvent
);
204 function AdditionalUnits
: string; override;
205 procedure AssignEvents( SL
: TStringList
; const AName
: String ); override;
206 procedure SetupFirst(SL
: TStringList
; const AName
,AParent
, Prefix
: String); override;
208 constructor Create(AOwner
: TComponent
); override;
209 destructor Destroy
; override;
211 property BaudRate
: TBaudRate read FBaudRate write SetBaudRate
;
212 property CustomBaudRate
: Integer read FCustomBaudRate write SetCustomBaudRate
;
213 property Port
: TPort read FPort write SetPort
;
214 property Parity
: TComParity read FParity write SetParity
;
215 property StopBits
: TStopBits read FStopBits write SetStopBits
;
216 property DataBits
: TDataBits read FDataBits write SetDataBits
;
217 property DiscardNull
: Boolean read FDiscardNull write SetDiscardNull default
False;
218 property EventChar
: Char read FEventChar write SetEventChar default
#0;
219 property Events
: TComEvents read FEvents write FEvents
;
220 property Buffer
: TComBuffer read FBuffer write SetBuffer
;
221 property FlowControl
: TComFlowControl read FFlowControl write SetFlowControl
;
222 property Timeouts
: TComTimeouts read FTimeouts write SetTimeouts
;
223 property SyncMethod
: TSyncMethod read FSyncMethod write SetSyncMethod default smThreadSync
;
224 property OnAfterOpen
: TOnEvent read FOnAfterOpen write FOnAfterOpen
;
225 property OnAfterClose
: TOnEvent read FOnAfterClose write FOnAfterClose
;
226 property OnBeforeOpen
: TOnEvent read FOnBeforeOpen write FOnBeforeOpen
;
227 property OnBeforeClose
: TOnEvent read FOnBeforeClose write FOnBeforeClose
;
228 property OnRxChar
: TRxCharEvent read FOnRxChar write SetOnRxChar
;
229 property OnRxBuf
: TRxBufEvent read FOnRxBuf write FOnRxBuf
;
230 property OnTxEmpty
: TOnEvent read FOnTxEmpty write FOnTxEmpty
;
231 property OnBreak
: TOnEvent read FOnBreak write FOnBreak
;
232 property OnRing
: TOnEvent read FOnRing write FOnRing
;
233 property OnCTSChange
: TComSignalEvent read FOnCTSChange write FOnCTSChange
;
234 property OnDSRChange
: TComSignalEvent read FOnDSRChange write FOnDSRChange
;
235 property OnRLSDChange
: TComSignalEvent read FOnRLSDChange write FOnRLSDChange
;
236 property OnRxFlag
: TOnEvent read FOnRxFlag write FOnRxFlag
;
237 property OnError
: TComErrorEvent read FOnError write FOnError
;
238 property OnRx80Full
: TOnEvent read FOnRx80Full write FOnRx80Full
;
245 constructor TComFlowControl
.Create
;
252 // copy properties to other class
253 procedure TComFlowControl
.AssignTo(Dest
: TPersistent
);
255 if Dest
is TComFlowControl
then
257 with TComFlowControl(Dest
) do
259 FOutCTSFlow
:= Self
.OutCTSFlow
;
260 FOutDSRFlow
:= Self
.OutDSRFlow
;
261 FControlDTR
:= Self
.ControlDTR
;
262 FControlRTS
:= Self
.ControlRTS
;
263 FXonXoffOut
:= Self
.XonXoffOut
;
264 FXonXoffIn
:= Self
.XonXoffIn
;
265 FTxContinueOnXoff
:= Self
.TxContinueOnXoff
;
266 FDSRSensitivity
:= Self
.DSRSensitivity
;
267 FXonChar
:= Self
.XonChar
;
268 FXoffChar
:= Self
.XoffChar
;
272 inherited AssignTo(Dest
);
275 procedure TComFlowControl
.SetComPort(const AComPort
:TKOLMHComPort
);
281 // set input flow control for DTR (data-terminal-ready)
282 procedure TComFlowControl
.SetControlDTR(const Value
: TDTRFlowControl
);
284 if Value
<> FControlDTR
then
286 FControlDTR
:= Value
;
287 // if FComPort <> nil then
288 // FComPort.ApplyDCB;
292 // set input flow control for RTS (request-to-send)
293 procedure TComFlowControl
.SetControlRTS(const Value
: TRTSFlowControl
);
295 if Value
<> FControlRTS
then
297 FControlRTS
:= Value
;
298 // if FComPort <> nil then
299 // FComPort.ApplyDCB;
303 // set ouput flow control for CTS (clear-to-send)
304 procedure TComFlowControl
.SetOutCTSFlow(const Value
: Boolean);
306 if Value
<> FOutCTSFlow
then
308 FOutCTSFlow
:= Value
;
309 // if FComPort <> nil then
310 // FComPort.ApplyDCB;
314 // set output flow control for DSR (data-set-ready)
315 procedure TComFlowControl
.SetOutDSRFlow(const Value
: Boolean);
317 if Value
<> FOutDSRFlow
then
319 FOutDSRFlow
:= Value
;
320 // if FComPort <> nil then
321 // FComPort.ApplyDCB;
325 // set software input flow control
326 procedure TComFlowControl
.SetXonXoffIn(const Value
: Boolean);
328 if Value
<> FXonXoffIn
then
331 // if FComPort <> nil then
332 // FComPort.ApplyDCB;
336 // set software ouput flow control
337 procedure TComFlowControl
.SetXonXoffOut(const Value
: Boolean);
339 if Value
<> FXonXoffOut
then
341 FXonXoffOut
:= Value
;
342 // if FComPort <> nil then
343 // FComPort.ApplyDCB;
347 // set DSR sensitivity
348 procedure TComFlowControl
.SetDSRSensitivity(const Value
: Boolean);
350 if Value
<> FDSRSensitivity
then
352 FDSRSensitivity
:= Value
;
353 // if FComPort <> nil then
354 // FComPort.ApplyDCB;
358 // set transfer continue when Xoff is sent
359 procedure TComFlowControl
.SetTxContinueOnXoff(const Value
: Boolean);
361 if Value
<> FTxContinueOnXoff
then
363 FTxContinueOnXoff
:= Value
;
364 // if FComPort <> nil then
365 // FComPort.ApplyDCB;
370 procedure TComFlowControl
.SetXonChar(const Value
: Char);
372 if Value
<> FXonChar
then
375 // if FComPort <> nil then
376 // FComPort.ApplyDCB;
381 procedure TComFlowControl
.SetXoffChar(const Value
: Char);
383 if Value
<> FXoffChar
then
386 // if FComPort <> nil then
387 // FComPort.ApplyDCB;
391 // get common flow control
392 function TComFlowControl
.GetFlowControl
: TFlowControl
;
394 if (FControlRTS
= rtsHandshake
) and (FOutCTSFlow
)
395 and (not FXonXoffIn
) and (not FXonXoffOut
)
399 if (FControlRTS
= rtsDisable
) and (not FOutCTSFlow
)
400 and (FXonXoffIn
) and (FXonXoffOut
)
404 if (FControlRTS
= rtsDisable
) and (not FOutCTSFlow
)
405 and (not FXonXoffIn
) and (not FXonXoffOut
)
412 // set common flow control
413 procedure TComFlowControl
.SetFlowControl(const Value
: TFlowControl
);
415 if Value
<> fcCustom
then
417 FControlRTS
:= rtsDisable
;
418 FOutCTSFlow
:= False;
420 FXonXoffOut
:= False;
424 FControlRTS
:= rtsHandshake
;
434 // if FComPort <> nil then
435 // FComPort.ApplyDCB;
439 constructor TComTimeouts
.Create
;
444 FWriteTotalC
:= 1000;
447 // copy properties to other class
448 procedure TComTimeouts
.AssignTo(Dest
: TPersistent
);
450 if Dest
is TComTimeouts
then
452 with TComTimeouts(Dest
) do
454 FReadInterval
:= Self
.ReadInterval
;
455 FReadTotalM
:= Self
.ReadTotalMultiplier
;
456 FReadTotalC
:= Self
.ReadTotalConstant
;
457 FWriteTotalM
:= Self
.WriteTotalMultiplier
;
458 FWriteTotalC
:= Self
.WriteTotalConstant
;
462 inherited AssignTo(Dest
);
465 // select TCustomComPort to own this class
466 procedure TComTimeouts
.SetComPort(const AComPort
: TKOLMHComPort
);
468 FComPort
:= AComPort
;
472 procedure TComTimeouts
.SetReadInterval(const Value
: Integer);
474 if Value
<> FReadInterval
then
476 FReadInterval
:= Value
;
477 // if possible, apply the changes
478 // if FComPort <> nil then
479 // FComPort.ApplyTimeouts;
483 // set read total constant
484 procedure TComTimeouts
.SetReadTotalC(const Value
: Integer);
486 if Value
<> FReadTotalC
then
488 FReadTotalC
:= Value
;
489 // if FComPort <> nil then
490 // FComPort.ApplyTimeouts;
494 // set read total multiplier
495 procedure TComTimeouts
.SetReadTotalM(const Value
: Integer);
497 if Value
<> FReadTotalM
then
499 FReadTotalM
:= Value
;
500 // if FComPort <> nil then
501 // FComPort.ApplyTimeouts;
505 // set write total constant
506 procedure TComTimeouts
.SetWriteTotalC(const Value
: Integer);
508 if Value
<> FWriteTotalC
then
510 FWriteTotalC
:= Value
;
511 // if FComPort <> nil then
512 // FComPort.ApplyTimeouts;
516 // set write total multiplier
517 procedure TComTimeouts
.SetWriteTotalM(const Value
: Integer);
519 if Value
<> FWriteTotalM
then
521 FWriteTotalM
:= Value
;
522 // if FComPort <> nil then
523 // FComPort.ApplyTimeouts;
528 constructor TComParity
.Create
;
534 // copy properties to other class
535 procedure TComParity
.AssignTo(Dest
: TPersistent
);
537 if Dest
is TComParity
then
539 with TComParity(Dest
) do
542 FCheck
:= Self
.Check
;
543 FReplace
:= Self
.Replace
;
544 FReplaceChar
:= Self
.ReplaceChar
;
548 inherited AssignTo(Dest
);
551 // select TCustomComPort to own this class
552 procedure TComParity
.SetComPort(const AComPort
: TKOLMHComPort
);
554 FComPort
:= AComPort
;
558 procedure TComParity
.SetBits(const Value
: TParityBits
);
560 if Value
<> FBits
then
563 // if FComPort <> nil then
564 // FComPort.ApplyDCB;
569 procedure TComParity
.SetCheck(const Value
: Boolean);
571 if Value
<> FCheck
then
574 // if FComPort <> nil then
575 // FComPort.ApplyDCB;
579 // set replace on parity error
580 procedure TComParity
.SetReplace(const Value
: Boolean);
582 if Value
<> FReplace
then
585 // if FComPort <> nil then
586 // FComPort.ApplyDCB;
591 procedure TComParity
.SetReplaceChar(const Value
: Char);
593 if Value
<> FReplaceChar
then
595 FReplaceChar
:= Value
;
596 // if FComPort <> nil then
597 // FComPort.ApplyDCB;
601 constructor TComBuffer
.Create
;
608 // copy properties to other class
609 procedure TComBuffer
.AssignTo(Dest
: TPersistent
);
611 if Dest
is TComBuffer
then
613 with TComBuffer(Dest
) do
615 FOutputSize
:= Self
.OutputSize
;
616 FInputSize
:= Self
.InputSize
;
620 inherited AssignTo(Dest
);
623 // select TCustomComPort to own this class
624 procedure TComBuffer
.SetComPort(const AComPort
: TKOLMHComPort
);
626 FComPort
:= AComPort
;
630 procedure TComBuffer
.SetInputSize(const Value
: Integer);
632 if Value
<> FInputSize
then
635 if (FInputSize
mod 2) = 1 then
637 // if FComPort <> nil then
638 // FComPort.ApplyBuffer;
643 procedure TComBuffer
.SetOutputSize(const Value
: Integer);
645 if Value
<> FOutputSize
then
647 FOutputSize
:= Value
;
648 if (FOutputSize
mod 2) = 1 then
650 // if FComPort <> nil then
651 // FComPort.ApplyBuffer;
656 constructor TKOLMHComPort
.Create(AOwner
: TComponent
);
659 FComponentStyle
:= FComponentStyle
- [csInheritable
];
660 // FLinks := TList.Create;
662 FCustomBaudRate
:= 9600;
664 FStopBits
:= sbOneStopBit
;
665 FDataBits
:= dbEight
;
666 FEvents
:= [evRxChar
, evTxEmpty
, evRxFlag
, evRing
, evBreak
,
667 evCTS
, evDSR
, evError
, evRLSD
, evRx80Full
];
668 // FHandle := INVALID_HANDLE_VALUE;
669 FStoredProps
:= [spBasic
];
670 FParity
:= TComParity
.Create
;
671 // FParity.SetComPort(Self);
672 FFlowControl
:= TComFlowControl
.Create
;
673 // FFlowControl.SetComPort(Self);
674 FTimeouts
:= TComTimeouts
.Create
;
675 // FTimeouts.SetComPort(Self);
676 FBuffer
:= TComBuffer
.Create
;
677 // FBuffer.SetComPort(Self);
678 // FInitFont:=TKOLFont.Create(Self);
681 destructor TKOLMHComPort
.Destroy
;
694 function TKOLMHComPort
.AdditionalUnits
;
696 Result
:= ', KOLMHComPort';
699 procedure TKOLMHComPort
.SetupFirst(SL
: TStringList
; const AName
,
700 AParent
, Prefix
: String);
702 Boolean2Str
:array [Boolean] of String=('False','True');
703 BaudRate2Str
:array [TBaudRate
] of String=('brCustom', 'br110', 'br300', 'br600', 'br1200', 'br2400', 'br4800', 'br9600', 'br14400',
704 'br19200', 'br38400', 'br56000', 'br57600', 'br115200', 'br128000', 'br256000');
705 StopBits2Str
:array [TStopBits
] of String=('sbOneStopBit', 'sbOne5StopBits', 'sbTwoStopBits');
706 DataBits2Str
:array [TDataBits
] of String=('dbFive', 'dbSix', 'dbSeven', 'dbEight');
707 ParityBits2Str
:array [TParityBits
] of String=('prNone', 'prOdd', 'prEven', 'prMark', 'prSpace');
708 ControlDTR2Str
:array [TDTRFlowControl
] of String=('dtrDisable', 'dtrEnable', 'dtrHandshake');
709 ControlRTS2Str
:array [TRTSFlowControl
] of String=('rtsDisable', 'rtsEnable', 'rtsHandshake', 'rtsToggle');
710 SyncMethod2Str
:array [TSyncMethod
] of String=('smThreadSync', 'smWindowSync', 'smNone');
711 ComEvent2Str
:array [TComEvent
] of String=('evRxChar', 'evTxEmpty', 'evRxFlag', 'evRing', 'evBreak', 'evCTS', 'evDSR', 'evError', 'evRLSD', 'evRx80Full');
716 SL
.Add(Prefix
+AName
+':=NewMHComPort('+AParent
+');');
717 SL
.Add(Prefix
+AName
+'.BaudRate:='+BaudRate2Str
[BaudRate
]+';');
718 SL
.Add(Prefix
+AName
+'.Port:='''+Port
+''';');
719 SL
.Add(Prefix
+AName
+'.DiscardNull:='+Boolean2Str
[DiscardNull
]+';');
720 SL
.Add(Prefix
+AName
+'.CustomBaudRate:='+Int2Str(CustomBaudRate
)+';');
721 SL
.Add(Prefix
+AName
+'.StopBits:='+StopBits2Str
[StopBits
]+';');
722 SL
.Add(Prefix
+AName
+'.DataBits:='+DataBits2Str
[DataBits
]+';');
723 SL
.Add(Prefix
+AName
+'.EventChar:=#'+Int2Str(Ord(EventChar
))+';');
724 SL
.Add(Prefix
+AName
+'.SyncMethod:='+SyncMethod2Str
[SyncMethod
]+';');
726 if evRxChar
in Events
then
727 tmpStr
:=tmpStr
+'evRxChar, ';
728 if evTxEmpty
in Events
then
729 tmpStr
:=tmpStr
+'evTxEmpty, ';
730 if evRxFlag
in Events
then
731 tmpStr
:=tmpStr
+'evRxFlag, ';
732 if evRing
in Events
then
733 tmpStr
:=tmpStr
+'evRing, ';
734 if evBreak
in Events
then
735 tmpStr
:=tmpStr
+'evBreak, ';
736 if evCTS
in Events
then
737 tmpStr
:=tmpStr
+'evCTS, ';
738 if evDSR
in Events
then
739 tmpStr
:=tmpStr
+'evDSR, ';
740 if evError
in Events
then
741 tmpStr
:=tmpStr
+'evError, ';
742 if evRLSD
in Events
then
743 tmpStr
:=tmpStr
+'evRLSD, ';
744 if evRx80Full
in Events
then
745 tmpStr
:=tmpStr
+'evRx80Full, ';
746 tmpStr
[Length(tmpStr
)-1]:=' ';
747 tmpStr
:=Trim(tmpStr
);
748 SL
.Add(Prefix
+AName
+'.Events:=[ '+tmpStr
+' ];');
750 SL
.Add(Prefix
+AName
+'.Parity.Bits:='+ParityBits2Str
[Parity
.Bits
]+';');
751 SL
.Add(Prefix
+AName
+'.Parity.Check:='+Boolean2Str
[Parity
.Check
]+';');
752 SL
.Add(Prefix
+AName
+'.Parity.Replace:='+Boolean2Str
[Parity
.Replace
]+';');
753 SL
.Add(Prefix
+AName
+'.Parity.ReplaceChar:=#'+Int2Str(Ord(Parity
.ReplaceChar
))+';');
755 SL
.Add(Prefix
+AName
+'.Buffer.InputSize:='+Int2Str(Buffer
.InputSize
)+';');
756 SL
.Add(Prefix
+AName
+'.Buffer.OutputSize:='+Int2Str(Buffer
.OutputSize
)+';');
758 SL
.Add(Prefix
+AName
+'.FlowControl.ControlDTR:='+ControlDTR2Str
[FlowControl
.ControlDTR
]+';');
759 SL
.Add(Prefix
+AName
+'.FlowControl.ControlRTS:='+ControlRTS2Str
[FlowControl
.ControlRTS
]+';');
760 SL
.Add(Prefix
+AName
+'.FlowControl.DSRSensitivity:='+Boolean2Str
[FlowControl
.DSRSensitivity
]+';');
761 SL
.Add(Prefix
+AName
+'.FlowControl.OutCTSFlow:='+Boolean2Str
[FlowControl
.OutCTSFlow
]+';');
762 SL
.Add(Prefix
+AName
+'.FlowControl.OutDSRFlow:='+Boolean2Str
[FlowControl
.OutDSRFlow
]+';');
763 SL
.Add(Prefix
+AName
+'.FlowControl.TxContinueOnXoff:='+Boolean2Str
[FlowControl
.TxContinueOnXoff
]+';');
764 SL
.Add(Prefix
+AName
+'.FlowControl.XoffChar:=#'+Int2Str(Ord(FlowControl
.XoffChar
))+';');
765 SL
.Add(Prefix
+AName
+'.FlowControl.XonChar:=#'+Int2Str(Ord(FlowControl
.XonChar
))+';');
766 SL
.Add(Prefix
+AName
+'.FlowControl.XonXoffIn:='+Boolean2Str
[FlowControl
.XonXoffIn
]+';');
767 SL
.Add(Prefix
+AName
+'.FlowControl.XonXoffOut:='+Boolean2Str
[FlowControl
.XonXoffOut
]+';');
769 SL
.Add(Prefix
+AName
+'.Timeouts.ReadInterval:='+Int2Str(Timeouts
.ReadInterval
)+';');
770 SL
.Add(Prefix
+AName
+'.Timeouts.ReadTotalConstant:='+Int2Str(Timeouts
.ReadTotalConstant
)+';');
771 SL
.Add(Prefix
+AName
+'.Timeouts.ReadTotalMultiplier:='+Int2Str(Timeouts
.ReadTotalMultiplier
)+';');
772 SL
.Add(Prefix
+AName
+'.Timeouts.WriteTotalConstant:='+Int2Str(Timeouts
.WriteTotalConstant
)+';');
773 SL
.Add(Prefix
+AName
+'.Timeouts.WriteTotalMultiplier:='+Int2Str(Timeouts
.WriteTotalMultiplier
)+';');
776 procedure TKOLMHComPort
.AssignEvents(SL
: TStringList
; const AName
: String);
779 DoAssignEvents( SL
, AName
, [ 'OnRxChar', 'OnRxBuf', 'OnAfterOpen' ,
780 'OnAfterClose', 'OnBeforeOpen', 'OnBeforeClose', 'OnTxEmpty', 'OnBreak',
781 'OnRing', 'OnCTSChange', 'OnDSRChange', 'OnRLSDChange', 'OnRxFlag',
782 'OnError', 'OnRx80Full'], [ @OnRxChar
,@OnRxBuf
, @OnAfterOpen
, @OnAfterClose
,
783 @OnBeforeOpen
, @OnBeforeClose
, @OnTxEmpty
, @OnBreak
, @OnRing
, @OnCTSChange
,
784 @OnDSRChange
, @OnRLSDChange
, @OnRxFlag
, @OnError
, @OnRx80Full
] );
788 procedure TKOLMHComPort
.SetBaudRate(const Value
: TBaudRate
);
790 if Value
<> FBaudRate
then
793 // if possible, apply settings
799 // set custom baud rate
800 procedure TKOLMHComPort
.SetCustomBaudRate(const Value
: Integer);
802 if Value
<> FCustomBaudRate
then
804 FCustomBaudRate
:= Value
;
811 procedure TKOLMHComPort
.SetDataBits(const Value
: TDataBits
);
813 if Value
<> FDataBits
then
821 // set discard null charachters
822 procedure TKOLMHComPort
.SetDiscardNull(const Value
: Boolean);
824 if Value
<> FDiscardNull
then
826 FDiscardNull
:= Value
;
832 // set event charachters
833 procedure TKOLMHComPort
.SetEventChar(const Value
: Char);
835 if Value
<> FEventChar
then
843 // translated numeric string to port string
844 function ComString(Str
: string): TPort
;
848 if UpperCase(Copy(Str
, 1, 3)) = 'COM' then
849 Str
:= Copy(Str
, 4, Length(Str
) - 3);
855 if (Num
< 1) or (Num
> 16) then
857 Result
:= Format('COM%d', [Num
]);
861 procedure TKOLMHComPort
.SetPort(const Value
: TPort
);
865 Str
:= ComString(Value
);
870 { if (FConnected) and (not ((csDesigning in ComponentState) or
871 (csLoading in ComponentState))) then
880 procedure TKOLMHComPort
.SetStopBits(const Value
: TStopBits
);
882 if Value
<> FStopBits
then
890 // set event synchronization method
891 procedure TKOLMHComPort
.SetSyncMethod(const Value
: TSyncMethod
);
893 if Value
<> FSyncMethod
then
895 { if (FConnected) and (not ((csDesigning in ComponentState) or
896 (csLoading in ComponentState)))
898 raise EComPort.CreateNoWinCode(CError_SyncMeth)
900 FSyncMethod
:= Value
;
905 // returns true if RxChar is triggered when data arrives input buffer
906 {function TKOLMHComPort.GetTriggersOnRxChar: Boolean;
913 if FLinks.Count > 0 then
914 for I := 0 to FLinks.Count - 1 do
916 ComLink := TComLink(FLinks[I]);
917 if Assigned(ComLink.OnRxBuf) then
918 Result := False; // link found, do not call OnRxChar event, call OnRxBuf instead
923 procedure TKOLMHComPort
.SetFlowControl(const Value
: TComFlowControl
);
925 FFlowControl
.Assign(Value
);
931 procedure TKOLMHComPort
.SetParity(const Value
: TComParity
);
933 FParity
.Assign(Value
);
939 procedure TKOLMHComPort
.SetTimeouts(const Value
: TComTimeouts
);
941 FTimeouts
.Assign(Value
);
947 procedure TKOLMHComPort
.SetBuffer(const Value
: TComBuffer
);
949 FBuffer
.Assign(Value
);
954 procedure TKOLMHComPort
.SetOnRxChar(const Value
:TRxCharEvent
);
962 RegisterComponents('KOL', [TKOLMHComPort
]);