Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Write / read a string to / from the serial port

01.01.2007
function OpenCOMPort: Boolean;
var
  DeviceName: array[0..80] of Char;
  ComFile: THandle;
begin
   { First step is to open the communications device for read/write.
     This is achieved using the Win32 'CreateFile' function.
     If it fails, the function returns false.
   }
  StrPCopy(DeviceName, 'COM1:');
 
  ComFile := CreateFile(DeviceName,
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);
 
  if ComFile = INVALID_HANDLE_VALUE then
    Result := False
  else
    Result := True;
end;
 
 
function SetupCOMPort: Boolean;
const
  RxBufferSize = 256;
  TxBufferSize = 256;
var
  DCB: TDCB;
  Config: string;
  CommTimeouts: TCommTimeouts;
begin
   { We assume that the setup to configure the setup works fine.
     Otherwise the function returns false.
   }
 
  Result := True;
 
  if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
    Result := False;
 
  if not GetCommState(ComFile, DCB) then
    Result := False;
 
  Config := 'baud=9600 parity=n data=8 stop=1';
 
  if not BuildCommDCB(@Config[1], DCB) then
    Result := False;
 
  if not SetCommState(ComFile, DCB) then
    Result := False;
 
  with CommTimeouts do
  begin
    ReadIntervalTimeout         := 0;
    ReadTotalTimeoutMultiplier  := 0;
    ReadTotalTimeoutConstant    := 1000;
    WriteTotalTimeoutMultiplier := 0;
    WriteTotalTimeoutConstant   := 1000;
  end;
 
  if not SetCommTimeouts(ComFile, CommTimeouts) then
    Result := False;
end;
 
 
{
  The following is an example of using the 'WriteFile' function
  to write data to the serial port.
}
 
 
procedure SendText(s: string);
var
  BytesWritten: DWORD;
begin
   {
     Add a word-wrap (#13 + #10) to the string
   }
  s := s + #13 + #10;
  WriteFile(ComFile, s[1], Length(s), BytesWritten, nil);
end;
 
 
{
  The following is an example of using the 'ReadFile' function to read
  data from the serial port.
}
 
 
procedure ReadText: string;
var
  d: array[1..80] of Char;
  s: string;
  BytesRead, i: Integer;
begin
  Result := '';
  if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
  begin
    { Raise an exception }
  end;
  s := '';
  for i := 1 to BytesRead do s := s + d[I];
  Result := s;
end;
 
 
procedure CloseCOMPort;
begin
  // finally close the COM Port!
  CloseHandle(ComFile);
end;

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php