亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tscomm.pas

?? 一個比較好的串口控件(delphi 7.0)
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
end;

constructor TTSComm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
////////////////////////////////////////////////////////////////////////////////
  FErrorOptions := TErrorOptions.Create(self);
  FGeneralOption := TGeneralOption.Create(self);

  FSendList := TRecordList.Create;
  FReceiveList := TRecordList.Create;
  FSendRecord := nil;

  FHasSend := False;
  FHasReceive := False;

  TSComm1 := self;
    {啟動多媒體定時器}
  FTimeID := timeSetEvent(1, 0, @TimeProc, 0, TIME_PERIODIC);
end;

destructor TTSComm.Destroy;
begin
    {關閉多謀體定時器}
  timeKillEvent(FTimeID);

  FReceiveList.Free;
  FSendList.Free;
  FErrorOptions.Free;
  FGeneralOption.Free;
  inherited Destroy;
end;

function TTSComm.SendAgain: boolean;
begin
  Result := False;
  if FSendList.Count > 0 then
  begin
    FSendRecord := FSendList.Items[0];
    if Assigned(FOnTSSendData) then
    begin
      FOnTSSendData(self, FSendList.Items[0]);
      Result := True;
    end;
  end;
end;

function TTSComm.SendNext: boolean;
begin
  Result := False;
  if not FGeneralOption.IsCumulateError then
    ClearErrorOptionIndex;
  if FSendList.Count > 0 then
  begin
    FSendList.Delete(0);
    Result := SendAgain;
  end;
end;

procedure TTSComm.SetDataBuffer(Value: string);
begin
  FDataBuffer := Value;
end;

function TTSComm.AddToSendList(AItem: Pointer): Integer;
begin
  Result := FSendList.Add(AItem);
  if FSendList.Count = 1 then
  begin
    if FErrorOptions.OverTimeErrorOption <> nil then
      FErrorOptions.OverTimeErrorOption.TimeIndex := 0;
    FHasSend := SendAgain;
  end;
end;

function TTSComm.AddToReceiveList(AItem: Pointer): Integer;
begin
  Result := FReceiveList.Add(AItem);
end;

procedure TTSComm.DeleteReceiveList(Index: Integer);
begin
  FReceiveList.Delete(Index);
end;

procedure TTSComm.SetErrorOptions(Value: TErrorOptions);
begin
  FErrorOptions.Assign(Value);
end;

procedure TTSComm.ClearErrorOptionIndex;
var i: Integer;
begin
  for i := 0 to ErrorOptions.Count - 1 do
  begin
    ErrorOptions[i].Index := 0;
  end;
end;

procedure TTSComm.SetGeneralOption(const Value: TGeneralOption);
begin
  FGeneralOption := Value;
end;

procedure TTSComm.ClearErrorOptionTimeIndex;
var i: Integer;
begin
  for i := 0 to ErrorOptions.Count - 1 do
  begin
    ErrorOptions[i].TimeIndex := 0;
  end;
end;

{ TCustomErrorOption }

function TCustomErrorOption.AddSendInfoValue(Value: Pointer): Integer;
begin
  Result := FSendInfoList.Add(Value);
end;

procedure TCustomErrorOption.Assign(Source: TPersistent);
begin
  if Source is TCustomErrorOption then
  begin
    self.FCount := TCustomErrorOption(Source).Count;
    self.FDelay := TCustomErrorOption(Source).Delay;
  end;
  inherited Assign(Source);
end;

constructor TCustomErrorOption.Create(Collection: TCollection);
begin
  inherited Create(Collection);
  FErrorStyle := esOther;
  FCount := 2;
  FDelay := 2000;
  FIndex := 0;
  FSendinfoList := TRecordList.Create;
  FDateTime := 0;
  FText := '';
  FEnabled := True;
end;

destructor TCustomErrorOption.Destroy;
begin
  FSendinfoList.Free;
  inherited Destroy;
end;

function TCustomErrorOption.GetDisplayName: string;
begin
  Result := Text;
  if Result = '' then Result := inherited GetDisplayName;
end;

procedure TCustomErrorOption.SetCount(const ACount: Word);
begin
  if FCount <> ACount then
    FCount := ACount;
end;

procedure TCustomErrorOption.SetDateTime(const ADateTime: TDateTime);
begin
  if FDateTime <> ADateTime then
    FDateTime := ADateTime;
end;

procedure TCustomErrorOption.SetDelay(const ADelay: Longword);
begin
  if FDelay <> ADelay then
    FDelay := ADelay;
end;

procedure TCustomErrorOption.SetEnabled(const AEnabled: Boolean);
begin
  if FEnabled <> AEnabled then
    FEnabled := AEnabled;
end;

procedure TCustomErrorOption.SetErrorStyle(
  const AErrorStyle: TErrorStyle);
var i: Integer;
begin
  if AErrorStyle = esOverTime then
  begin
    for i := 0 to Collection.Count - 1 do
      if TCustomErrorOption(Collection.Items[i]).FErrorStyle = esOverTime then Exit;
    if AErrorStyle = esOverTime then
    begin
      TErrorOptions(Collection).OverTimeErrorOption := Self;
      if TErrorOptions(Collection).CurrentErrorOption = nil then
        TErrorOptions(Collection).CurrentErrorOption := TErrorOptions(Collection).OverTimeErrorOption;
    end;
  end;
  if FErrorStyle <> AErrorStyle then
  begin
    FErrorStyle := AErrorStyle;
  end;
end;

procedure TCustomErrorOption.SetErrorIndex(const AIndex: Word);
begin
  if FIndex <> AIndex then
    FIndex := AIndex;
end;

procedure TCustomErrorOption.SetText(const AText: string);
begin
  if FText <> AText then
    FText := AText;
end;

procedure TCustomErrorOption.SetTimeIndex(const Value: Integer);
begin
  if FTimeIndex <> Value then
    FTimeIndex := Value;
end;

{ TRecordList }

procedure TRecordList.Notify(Ptr: Pointer; Action: TListNotification);
begin
  if Action = lnDeleted then
    Dispose(Ptr);
  inherited;
end;

{ TErrorOptions }

function TErrorOptions.Add: TCustomErrorOption;
begin
  Result := TCustomErrorOption(inherited Add);
end;

constructor TErrorOptions.Create(TSComm: TTSComm);
begin
  inherited Create(TCustomErrorOption);
  FTSComm := TSComm;
end;

function TErrorOptions.GetItem(Index: Integer): TCustomErrorOption;
begin
  Result := TCustomErrorOption(inherited GetItem(Index));
end;

function TErrorOptions.GetOwner: TPersistent;
begin
  Result := FTSComm;
end;

procedure TErrorOptions.SetCurrentErrorOption(
  const Value: TCustomErrorOption);
begin
  FCurrentErrorOption := Value;
end;

procedure TErrorOptions.SetItem(Index: Integer; Value: TCustomErrorOption);
begin
  inherited SetItem(Index, Value);
end;

procedure TErrorOptions.SetOverTimeErrorOption(
  const Value: TCustomErrorOption);
begin
  FOverTimeErrorOption := Value;
end;

procedure TErrorOptions.Update(Item: TCollectionItem);
begin
  inherited;
end;


{ TGeneralOption }

procedure TGeneralOption.AssignTo(Dest: TPersistent);
begin
  if Dest is TGeneralOption then
  begin
    FIsSingleCountError := TGeneralOption(Dest).IsSingleCountError;  //錯誤次數是否獨立
    FIsSingleIndexError := TGeneralOption(Dest).IsSingleIndexError;  //錯誤當前次數是否獨立
    FIsSingleDelayError := TGeneralOption(Dest).IsSingleDelayError;  //錯誤延遲時間是否獨立
    FIsCumulateError := TGeneralOption(Dest).IsCumulateError;        //錯誤是否累積
    FErrorCount := TGeneralOption(Dest).ErrorCount;                  //錯誤總次數
    FErrorDelay := TGeneralOption(Dest).ErrorDelay;                  //錯誤延遲時間
    FSucceedDelay := TGeneralOption(Dest).SucceedDelay;              //接收數據成功后延遲
    FSucceedCount := TGeneralOption(Dest).SucceedCount;              //成功次數
  end;
  inherited AssignTo(Dest);
end;

constructor TGeneralOption.Create(TSComm: TTSComm);
begin
  inherited Create;
  FTSComm := TSComm;
  FIsSingleCountError := True;   //錯誤次數是否獨立
  FIsSingleIndexError := False;  //錯誤當前次數是否獨立
  FIsSingleDelayError := False;  //錯誤延遲時間是否獨立
  FIsCumulateError := False;     //錯誤是否累積
  FErrorCount := 2;              //錯誤總次數
  FErrorDelay := 2000;           //錯誤延遲時間
  FErrorIndex := 0;              //錯誤次數
  FSucceedDelay := 1000;         //接收數據成功后延遲
  FSucceedDelayIndex := 0;       //接收數據成功后當前延遲
  FSucceedCount := 0;            //成功次數
  FSucceedCountIndex := 0;       //成功當前次數
end;

procedure TGeneralOption.SetErrorCount(const Value: Word);
begin
  FErrorCount := Value;
end;

procedure TGeneralOption.SetErrorDelay(const Value: Cardinal);
begin
  FErrorDelay := Value;
end;

procedure TGeneralOption.SetIsCumulateError(const Value: Boolean);
begin
  FIsCumulateError := Value;
end;

procedure TGeneralOption.SetIsSingleCountError(const Value: Boolean);
begin
  FIsSingleCountError := Value;
end;

procedure TGeneralOption.SetIsSingleDelayError(const Value: Boolean);
begin
  FIsSingleDelayError := Value;
end;

procedure TGeneralOption.SetIsSingleIndexError(const Value: Boolean);
begin
  FIsSingleIndexError := Value;
end;

procedure TGeneralOption.SetSucceedCount(const Value: Word);
begin
  FSucceedCount := Value;
end;

procedure TGeneralOption.SetSucceedDelay(const Value: Cardinal);
begin
  FSucceedDelay := Value;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩色视频在线观看| 国产成人免费在线视频| 91久久精品日日躁夜夜躁欧美| 国产日韩欧美综合在线| 国产精品自拍毛片| 国产精品情趣视频| 欧美中文字幕不卡| 喷水一区二区三区| 久久久久久97三级| 91视频在线观看| 亚洲线精品一区二区三区八戒| 欧美区一区二区三区| 六月丁香综合在线视频| 国产午夜精品理论片a级大结局| 成人美女在线观看| 亚洲精品欧美二区三区中文字幕| 欧美日韩中文字幕一区| 免费在线观看一区| 国产精品视频你懂的| 欧美中文字幕一区| 美女mm1313爽爽久久久蜜臀| 国产视频一区在线观看| 欧美午夜精品久久久久久孕妇| 亚洲国产一区二区视频| 久久亚洲二区三区| 精品久久久久一区| 一区二区三区中文字幕| 欧美一区二区在线免费播放| 国产伦精一区二区三区| 亚洲人成7777| 欧美变态tickling挠脚心| 成人午夜av电影| 五月婷婷另类国产| 久久久久久影视| 欧美中文字幕一二三区视频| 国产做a爰片久久毛片| 一区二区三区中文字幕精品精品| 日韩一级大片在线观看| 91免费国产在线| 韩国欧美国产1区| 亚洲影视在线播放| 中文成人av在线| 日韩三级中文字幕| 欧美性极品少妇| aaa亚洲精品一二三区| 免费看日韩精品| 亚洲欧洲日韩在线| 国产日韩欧美麻豆| 欧美一区二区三区不卡| 欧美亚洲动漫另类| 成人手机电影网| 精品一区二区三区的国产在线播放| 亚洲精品视频免费看| 国产日韩成人精品| 欧美大片一区二区| 欧美精品成人一区二区三区四区| 成人免费看视频| 激情图区综合网| 天天av天天翘天天综合网| 日韩美女视频19| 中文字幕一区免费在线观看| 久久夜色精品一区| 精品处破学生在线二十三| 91精品国产高清一区二区三区| 91影院在线免费观看| 成人妖精视频yjsp地址| 国产精品99久久久久| 精品在线观看视频| 日本亚洲电影天堂| 日本女人一区二区三区| 亚洲高清免费观看高清完整版在线观看| 中文字幕不卡一区| 欧美国产欧美综合| 国产精品久线在线观看| 国产精品狼人久久影院观看方式| 久久九九99视频| 国产精品日韩精品欧美在线| 久久久久国产精品麻豆| 久久久亚洲精品一区二区三区| 精品国产免费人成电影在线观看四季| 666欧美在线视频| 欧美一区午夜精品| 精品第一国产综合精品aⅴ| 日韩写真欧美这视频| 欧美成人精品福利| 精品成人一区二区| 国产精品每日更新| 一区二区三区在线免费视频| 亚洲美女免费在线| 午夜久久久久久电影| 日本不卡视频一二三区| 久久国产精品一区二区| 国产在线视视频有精品| 国产99久久久久久免费看农村| 久久综合色婷婷| 国产日韩欧美精品电影三级在线 | 亚洲成人免费电影| 亚洲成av人片在线| 奇米色一区二区三区四区| 国产主播一区二区三区| 成人国产精品免费观看动漫| 欧美在线观看视频在线| 67194成人在线观看| 国产午夜精品一区二区三区视频| 国产精品传媒入口麻豆| 午夜激情综合网| 精品一区二区三区久久| 色综合网站在线| 7777精品伊人久久久大香线蕉超级流畅 | 欧美另类久久久品| 欧美精品欧美精品系列| 亚洲丝袜自拍清纯另类| 国产一区二区在线电影| 91麻豆精品国产无毒不卡在线观看| 不卡的电视剧免费网站有什么| 91黄色激情网站| 中文字幕一区二区三区四区| 国内精品伊人久久久久av一坑| 欧美色综合网站| 亚洲精品国久久99热| 福利一区在线观看| 国产亚洲欧洲一区高清在线观看| 欧美aⅴ一区二区三区视频| 欧美日韩国产小视频| 亚洲图片有声小说| 欧洲人成人精品| 亚洲精品v日韩精品| 在线亚洲欧美专区二区| 亚洲免费在线播放| 91麻豆蜜桃一区二区三区| 国产精品成人免费在线| 懂色av一区二区三区免费看| 国产目拍亚洲精品99久久精品 | 国产成a人亚洲精品| 久久人人爽人人爽| 国产一区在线看| 国产欧美日韩精品一区| 成人激情校园春色| 中文字幕一区二区三区视频| 91丨九色丨尤物| 亚洲欧美视频在线观看视频| 色哟哟亚洲精品| 一区二区三区欧美亚洲| 欧美性色欧美a在线播放| 亚洲r级在线视频| 欧美一区二区三区免费大片 | 韩国av一区二区三区| 精品不卡在线视频| 国产成人av电影在线观看| 欧美激情在线一区二区三区| 不卡的电影网站| 一片黄亚洲嫩模| 制服丝袜在线91| 狠狠色综合色综合网络| 国产精品乱码人人做人人爱| 91看片淫黄大片一级在线观看| 亚洲一区二区三区影院| 欧美一区二区三区视频免费| 国产麻豆精品一区二区| 亚洲欧洲国产专区| 欧美精选在线播放| 国产一区二区美女诱惑| 综合色天天鬼久久鬼色| 欧美日韩电影在线播放| 老司机精品视频一区二区三区| 久久久青草青青国产亚洲免观| 成人av午夜影院| 亚洲第一电影网| 久久久久综合网| 欧美伊人精品成人久久综合97 | 日本道精品一区二区三区| 丝袜亚洲另类丝袜在线| 久久综合中文字幕| 在线观看免费亚洲| 国内精品国产成人国产三级粉色| 亚洲欧洲综合另类在线 | 综合在线观看色| 91精品国产综合久久蜜臀| 国产久卡久卡久卡久卡视频精品| 亚洲视频在线观看一区| 日韩欧美亚洲国产精品字幕久久久 | 亚洲成人在线免费| 久久久美女毛片| 欧美日韩一级大片网址| 粉嫩绯色av一区二区在线观看| 亚洲伊人伊色伊影伊综合网| xfplay精品久久| 欧美精品在线一区二区三区| 国产麻豆精品久久一二三| 亚洲大尺度视频在线观看| 亚洲国产成人在线| 91精品国产综合久久福利| 99视频有精品| 国内外成人在线| 日韩精品免费视频人成| 亚洲欧美日韩国产综合| 久久精品一区二区三区不卡牛牛| 欧美老年两性高潮| 97久久久精品综合88久久| 国内精品在线播放|