📄 commmain.pas
字号:
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 + -