Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному.
Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
Код для использования:
На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить.
в паблике у формы добавляем объект
GPort: TComPort;
// ******************************************************************************
// ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ
// открываем порт
procedure TFormChannels.OpenPort(PortNum: Byte);
begin
GPort := TComPort.Create(PortNum, br9600);
GPort.OnRead := FormChannels.OnRead;
GFlagOpen := true;
FormChannels.ButtonClosePort.Enabled := true;
end;
// закрываем порт
procedure TFormChannels.ClosePort;
begin
GPort.Free;
end;
// отправляем в порт данные
procedure TFormChannels.WritePort(strWrite: string);
var
arrBytes: array of Byte;
i: Integer;
begin
if GFlagOpen = False then // проверяем, открыт ли порт
OpenPort(strtoint(edtPort.Text)); // если нет, то открываем
SetLength(arrBytes, Length(strWrite));
for i := Low(arrBytes) to High(arrBytes) do
arrBytes[i] := Ord(strWrite[i + 1]);
GPort.Write(arrBytes);
arrBytes := nil;
end;
// читаем данные из порта
procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte);
var
i: Integer;
begin
memRead1.Lines.BeginUpdate;
for i := Low(ReadBytes) to High(ReadBytes) do
begin
if i > Low(ReadBytes) then
memRead1.Text := memRead1.Text; // + '.';
memRead1.Text := memRead1.Text + char(ReadBytes[i]);
end;
// подчищаем заполняющийся Мемо
if memRead1.Lines.Count > 5 then
begin
// memRead1.Clear;
memRead1.Lines.Delete(0);
memRead1.Lines.Delete(1);
end;
memRead1.Lines.EndUpdate;
end;
procedure TFormChannels.ButtonClosePortClick(Sender: TObject);
begin
ClosePort;
end;
// открываем порт кнопкой
procedure TFormChannels.ButtonOpenPortClick(Sender: TObject);
begin
OpenPort(strtoint(edtPort.Text));
end;
// отправляем в порт данные кнопкой
procedure TFormChannels.btnWriteClick(Sender: TObject);
begin
WritePort(FormChannels.edtWrite.Text);
end;
// КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ
// ******************************************************************************
ComPort.zip