{ Private declarations } public { Public declarations } end;
var Form1: TForm1; today : TDateTime; implementation
{$R *.dfm}
function ReadMes:word; var InBuf: char; mess: string; begin today := Now; mess := ''; with form1 do begin while true do begin if not bInit then continue; ReadFile(HPrt,InBuf,1,ChRead,nil); if form1.ChRead = 1 then repeat mess := mess + InBuf; until InBuf<>'#'; mess := 'Собеседник (' + TimeToStr(today) + ') - ' + mess; Memo1.Lines.Add(mess); end; end; end;
function TForm1.ThCreate: Boolean; begin Result := true; HThread:= CreateThread(nil,0,@ReadMes,nil,0,id); if HThread = INVALID_HANDLE_VALUE then begin ShowMessage('Ошибка нити'); Result := false; end; end;
procedure TForm1.ThTerminate; begin if HThread <> INVALID_HANDLE_VALUE then begin TerminateThread(HThread, 0); CloseHandle(HThread); HThread := INVALID_HANDLE_VALUE; end; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ThTerminate; if bInit then CloseHandle(HPrt); end;
procedure TForm1.FormCreate(Sender: TObject); begin bInit := false; ThCreate; end;
procedure TForm1.Button3Click(Sender: TObject); begin HPrt:= CreateFile(PChar(ComboBox1.Items[ComboBox1.ItemIndex]),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0); DCB.DCBlength:= sizeof(TDCB); GetCommState(HPrt,DCB); DCB.BaudRate:= CBR_115200; DCB.ByteSize:= 8; DCB.Parity:= EVENPARITY; DCB.StopBits:= 2; if SetCommState(HPrt,DCB) then begin ShowMessage('Порт существует'); bInit := true; end else ShowMessage('Порт не сушествует'); end;
procedure TForm1.Button1Click(Sender: TObject); var StrSz, i: integer; Outbuf: char; begin today := Now; if not bInit then begin ShowMessage('Порт не подключен'); exit; end;
StrSz:= Length(Edit1.Text);
if StrSz<>0 then begin ThTerminate; for i:= 2 to StrSz do begin Outbuf:= Edit1.Text[i]; WriteFile(HPrt,Outbuf,1,ChWrite,nil); end; Outbuf := '#'; WriteFile(HPrt,Outbuf,1,ChWrite,nil); Edit1.Text := 'Я (' + TimeToStr(today) + ') - ' + Edit1.Text; Memo1.Lines.Add(Edit1.Text); ThCreate; end; Edit1.Text:= ''; end;
procedure TForm1.Button2Click(Sender: TObject); begin Memo1.Clear; end;