рассматривал эту версию
http://www.delphisources.ru/pages/so...bcom_port.html
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
F: TFileStream;
Buf: String;
N, PackSize, PackCount: Integer;
begin
Button2.Enabled := False;
Button3.Enabled := False;
Button4.Enabled := False;
FBreak := False;
BComPort1.BaudRate := TBaudRate(ComboBox1.ItemIndex);
if not BComPort1.Open then Exit; // Открываем порт
Button2.Enabled := True;
F := TFileStream.Create(OpenDialog1.FileName, fmOpenRead); // Открываем файл
try
// Определим размер и количество пакетов.
if F.Size <= BComPort1.OutBufSize then
begin
PackSize := F.Size; PackCount := 1;
end else
begin
PackSize := BComPort1.OutBufSize;
PackCount := F.Size div PackSize;
if (F.Size mod PackSize) > 0 then Inc(PackCount);
end;
ProgressBar1.Max := PackCount;
ProgressBar1.Position := 0;
N := 0; FEmpty := False;
// Передаем имя файла и его размер
BComPort1.WriteStr(ExtractFileName(OpenDialog1.FileName) + ':' +
IntToStr(F.Size) + '[BEGIN]');
repeat
repeat
// Ждем, пока выходной буфер не освободится или пользователь не прервет передачу
Application.ProcessMessages; Sleep(10);
until FEmpty or FBreak;
if FBreak then
// Пользователь прервал передачу. Ожидание конца передачи текущего пакета
begin
repeat
Application.ProcessMessages; Sleep(10);
until FEmpty;
Break;
end;
F.Seek(N * PackSize, soFromBeginning);
if (F.Size - F.Position) < PackSize then // Последний пакет
PackSize := F.Size - F.Position;
SetLength(Buf, PackSize);
F.Read(Buf[1], PackSize);
FEmpty := False;
BComPort1.WriteStr(Buf);
Inc(N);
ProgressBar1.Position := ProgressBar1.Position + 1;
until N = PackCount;
BComPort1.WriteStr('[END]'); // Строка, идентифицирующая конец передачи
finally
F.Free;
if BComPort1.Close then
begin
Button2.Enabled := True;
Button3.Enabled := True;
Button4.Enabled := True;
end;
end;
end;
при запись файла выдает ошибку попытка открыть не существующий ком порт
Админ: учимся правильно форматировать текст!