⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commmain.pas

📁 这是一个PC机串口通信控制软件 开发环境:基于window xp的delphi 7.0平台 开发语言:pascal语言
💻 PAS
📖 第 1 页 / 共 2 页
字号:
        s:=stringreplace(s,#$d,'',[rfReplaceAll,rfIgnoreCase]);
        s2:='';
        for i:=1 to  length(s) do
        begin
          if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
            or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
          begin
            s2:=s2+copy(s,i,1);
          end;
        end;
        x:=length(s2);
        for i:=0 to (x div 16) do
        begin
          s3:=copy(s2,i*16+1,16) ;
          SendHex(s3);
          waitcommEmpty(16);
        end;
      end
      else begin
        x:=length(s);
        for i:=0 to (x div 16) do
        begin
          s2:=copy(s,i*16+1,16) ;
          ComPort1.PutString(s2);
          waitcommEmpty(16);
        end;
      end;
    end;
    x:=length(s);
    FSdate:=FSdate+x;
    StatusBar.Panels.Items[1].Text:='发送:'+inttostr(FSdate);

    if CB_ShowSend.Checked then
      SendMemo.Clear;
  end else
  begin
    CB_AutoSend.Checked:=false;
    showmessage('串口未打开。');
  end;
end;

procedure TMainForm.Btn_ClearViewClick(Sender: TObject);
begin
  Memo_Show.Clear;
end;

procedure TMainForm.CB_ComNumSelect(Sender: TObject);
begin
  ComPortInit;
end;

procedure TMainForm.Btn_SaveViewClick(Sender: TObject);
begin
  if SaveDialog1.Execute then
  begin
    Memo_Show.Lines.SaveToFile(SaveDialog1.FileName);
  end;
end;

procedure TMainForm.Btn_OpenFileClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    SendMemo.Lines.LoadFromFile(OpenDialog1.FileName);
  end;
end;

procedure TMainForm.Btn_ClearMomeClick(Sender: TObject);
begin
  SendMemo.Clear;
end;

procedure TMainForm.CB_AutoSendClick(Sender: TObject);
begin
  if CB_AutoSend.Checked then
  begin
    Timer_AutoSend.Interval:=strtoint(Edt_Interval.Text);
    Timer_AutoSend.Enabled:=true;
  end else
    Timer_AutoSend.Enabled:=false;
end;

procedure TMainForm.Edt_IntervalKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#8 then exit;
  if (key>'9') or (key<'0') then
    key:=#0;
end;

procedure TMainForm.Timer_AutoSendTimer(Sender: TObject);
begin
  Btn_SendClick(Sender);
end;

procedure TMainForm.Memo_ShowChange(Sender: TObject);
begin
  if CB_Clear.Checked then
    if length(Memo_Show.Text)>10000 then
      Memo_Show.Clear;
end;

procedure TMainForm.Btn_AboutClick(Sender: TObject);
begin
  AboutBox.ShowModal;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  MainForm.Caption:=Application.Title;
  InitDate;
  ComPortInit;
end;

procedure TMainForm.Btn_CountResetClick(Sender: TObject);
begin
  InitDate;
end;

procedure TMainForm.Timer_WatchStateTimer(Sender: TObject);
begin
  if  ComPort1.Open then
    Shape_ComState.Brush.Color:=clLime
  else
    Shape_ComState.Brush.Color:=clRed;
  StatusBar.Panels.Items[0].Text:=datetimetostr(now);
  StatusBar.Panels.Items[3].Text:=version;
end;

//窗体尺寸控制
procedure TMainForm.FormResize(Sender: TObject);
begin
  if MainForm.Width<670 then  MainForm.Width:=670;
  if MainForm.Height<490 then  MainForm.Height:=490;
end;

//通过INI文件,记忆设置和窗口位置
procedure TMainForm.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Top     :=  Ini.ReadInteger( 'Form', 'Top', 100 );
    Left    :=  Ini.ReadInteger( 'Form', 'Left', 100 );
    Width   :=  Ini.ReadInteger( 'Form', 'Width', 500 );
    Height  :=  Ini.ReadInteger( 'Form', 'Height', 300 );
    Caption :=  Ini.ReadString( 'Form', 'Caption', SoftName );
    
    CB_HexGet.Checked:=Ini.ReadBool('parameter', 'HexGet', false );
    CB_StopShow.Checked:=Ini.ReadBool('parameter', 'StopShow', false);
    CB_Clear.Checked:=Ini.ReadBool('parameter', 'Clear', true );
    CB_Show.Checked:=Ini.ReadBool('parameter', 'Show', false );
    CB_hexSend.Checked:=Ini.ReadBool('parameter', 'hexSend', false );
    CB_EnterSend.Checked:=Ini.ReadBool('parameter', 'EnterSend', false );
    CB_AddCenter.Checked:=Ini.ReadBool('parameter', 'AddCenter', false );
    CB_ShowSend.Checked:=Ini.ReadBool('parameter', 'ShowSend', false );

    CB_ComNum.ItemIndex:=Ini.ReadInteger( 'parameter', 'ComNum',0);
    CB_Baud.ItemIndex:=Ini.ReadInteger( 'parameter', 'Baud',6);
    CB_Parity.ItemIndex:=Ini.ReadInteger( 'parameter', 'Parity',2);
    CB_DataBits.ItemIndex:=Ini.ReadInteger( 'parameter', 'DataBits',3);
    CB_StopBits.ItemIndex:=Ini.ReadInteger( 'parameter', 'StopBits',0);

    Edt_Interval.Text:= inttostr(Ini.ReadInteger( 'Form', 'Interval', 1000 ));
    if Ini.ReadBool( 'Form', 'InitMax', false ) then
      WindowState := wsMaximized
    else
      WindowState := wsNormal;
  finally
    Ini.Free;
  end;
end;

//把窗体信息写入INI文件中
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Ini.WriteInteger( 'Form', 'Top', Top);
    Ini.WriteInteger( 'Form', 'Left', Left);
    Ini.WriteInteger( 'Form', 'Width',Width);
    Ini.WriteInteger( 'Form', 'Height',Height);
    Ini.WriteString( 'Form', 'Caption', Caption );
    
    Ini.WriteBool( 'parameter', 'InitMax', WindowState = wsMaximized );
    Ini.WriteBool('parameter', 'HexGet',CB_HexGet.Checked);
    Ini.WriteBool('parameter', 'EnterSend',CB_EnterSend.Checked);
    Ini.WriteBool('parameter', 'AddCenter',CB_AddCenter.Checked);
    Ini.WriteBool('parameter', 'ShowSend',CB_ShowSend.Checked);
    Ini.WriteBool('parameter', 'StopShow',CB_StopShow.Checked);
    Ini.WriteBool('parameter', 'Clear',CB_Clear.Checked);
    Ini.WriteBool('parameter', 'Show',CB_Show.Checked);
    Ini.WriteBool('parameter', 'hexSend',CB_hexSend.Checked);
    Ini.WriteInteger( 'parameter', 'Interval', strtoint(Edt_Interval.Text));
    Ini.WriteInteger( 'parameter', 'ComNum',CB_ComNum.ItemIndex);
    Ini.WriteInteger( 'parameter', 'Baud',CB_Baud.ItemIndex);
    Ini.WriteInteger( 'parameter', 'Parity',CB_Parity.ItemIndex);
    Ini.WriteInteger( 'parameter', 'DataBits',CB_DataBits.ItemIndex);
    Ini.WriteInteger( 'parameter', 'StopBits',CB_StopBits.ItemIndex);
  finally
    Ini.Free;
  end;
end;

//撤消
procedure TMainForm.N6Click(Sender: TObject);
begin
  Memo_Show.Undo;
end;

//剪切
procedure TMainForm.N2Click(Sender: TObject);
begin
  Memo_Show.CutToClipboard;
end;

//拷贝
procedure TMainForm.N1Click(Sender: TObject);
begin
  Memo_Show.CopyToClipboard;
end;

//粘贴
procedure TMainForm.N3Click(Sender: TObject);
begin
  Memo_Show.PasteFromClipboard;
end;

//选中所有
procedure TMainForm.N4Click(Sender: TObject);
begin
  Memo_Show.SelectAll;
end;

//查找
procedure TMainForm.FindDialog1Find(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with Memo_Show do
  begin
    if SelLength <> 0 then
      StartPos := SelStart + SelLength
    else
      StartPos := 0;
    ToEnd := Length(Text) - StartPos;

    FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialog1.FindText);
    end else
    begin
      showmessage('没有查到相应数据。');
      SelStart := 0;
    end;
  end;
end;

//快捷键处理
procedure TMainForm.Memo_ShowKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if  key=114 then         //f3
  begin
    FindDialog1Find(Sender);
    exit;
  end;
  if (key=70) and (Shift=[ssCtrl]) then   //ctrl+f
    FindDialog1.Execute;
end;

procedure TMainForm.SendMemoKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
  begin
    if CB_EnterSend.Checked then
    begin
      Btn_SendClick(Sender);
      key:=#0;
    end;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -