unit Unit1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Spin, Mask, ComCtrls,
  Comportonline;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    btnClose: TBitBtn;
    ParamPanel: TPanel;
    rgPortIndex: TRadioGroup;
    btnOpenPort: TSpeedButton;
    btnClosePort: TSpeedButton;
    StatusBar: TStatusBar;
    GroupBox3: TGroupBox;
    BaudRate: TSpinEdit;
    btnBaudRate: TButton;
    GroupBox4: TGroupBox;
    Label1: TLabel;
    cbDataLen: TComboBox;
    cbStopBits: TComboBox;
    Label2: TLabel;
    cbParity: TComboBox;
    Label13: TLabel;
    btnLineProperties: TButton;
    GroupBox1: TGroupBox;
    cbRTS: TCheckBox;
    cbDTR: TCheckBox;
    Timer1: TTimer;
    _DTR: TRadioButton;
    _RTS: TRadioButton;
    cbOUT1: TCheckBox;
    cbOUT2: TCheckBox;
    _OUT1: TRadioButton;
    _OUT2: TRadioButton;
    procedure FormCreate(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnOpenPortClick(Sender: TObject);
    procedure btnClosePortClick(Sender: TObject);
    procedure btnLinePropertiesClick(Sender: TObject);
    procedure btnBaudRateClick(Sender: TObject);
    procedure cbRTSClick(Sender: TObject);
    procedure cbDTRClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure cbOUT1Click(Sender: TObject);
  private
    { Компонент для доступа к порту. Будем создавать его}
    { динамически.                                      }
    FPort : TComPortOnline;
  public
   procedure SetEnabledControls; 
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ Создание компонента доступа к портам при создании формы }
procedure TForm1.FormCreate(Sender: TObject);
begin
 FPort:= TComPortOnline.Create(Self);
 SetEnabledControls;
end;

{Вызывается при уничтожении формы (выходе из программы) }
procedure TForm1.FormDestroy(Sender: TObject);
begin
 FPort.Free;
end;

{Кнопка открытия порта}
procedure TForm1.btnOpenPortClick(Sender: TObject);
begin
 FPort.ComNumber:= rgPortIndex.ItemIndex+1;
 FPort.Open;
 If FPort.Connected then
  StatusBar.Panels[0].Text:= 'Порт успешно открыт'
 Else
  StatusBar.Panels[0].Text:= 'Ошибка открытия порта';
 SetEnabledControls;
 {Отображение текущего состояния порта}
 If FPort.Connected then begin
  cbDTR.Checked := FPort.DTR;
  cbRTS.Checked := FPort.RTS;
  cbOUT1.Checked:= FPort.OUT1;
  cbOUT2.Checked:= FPort.OUT2;
  BaudRate.Value:= FPort.BaudRate;
  cbDataLen.ItemIndex := Byte(FPort.ByteSize);
  cbStopBits.ItemIndex:= Byte(FPort.Stopbits);
  cbParity.ItemIndex  := Byte(FPort.Parity  );
 End;
end;

procedure TForm1.btnClosePortClick(Sender: TObject);
begin
 FPort.Close;
 StatusBar.Panels[0].Text:= '';
 SetEnabledControls;
end;

procedure TForm1.SetEnabledControls;
Var Active : Boolean;
begin
 Active:= FPort.Connected;
 btnClosePort.Enabled:= Active;
 rgPortIndex.Enabled := not Active;
 btnOpenPort.Enabled := not Active;
 cbDataLen.Enabled   := Active;
 cbStopBits.Enabled  := Active;
 cbParity.Enabled    := Active;
 BaudRate.Enabled    := Active;
 btnBaudRate.Enabled := Active;
end;

{Кнопка закрытия программы}
procedure TForm1.btnCloseClick(Sender: TObject);
begin
 Close;
end;

{Установка базового адреса}
procedure TForm1.btnBaudRateClick(Sender: TObject);
begin
 FPort.BaudRate:= BaudRate.Value;
end;

{Установка характеристик обмена}
procedure TForm1.btnLinePropertiesClick(Sender: TObject);
begin
 FPort.Parity:= TParity(cbParity.ItemIndex);
 FPort.ByteSize:= TByteSize(cbDataLen.ItemIndex);
 Case cbStopBits.ItemIndex of
  0: // 1 стоп-бит
   FPort.Stopbits:= sb1BITS;
  1: // 2 (1.5) стоп-бита
   If cbDataLen.ItemIndex = 0 then FPort.Stopbits:= sb1HALFBITS
    Else FPort.Stopbits:= sb2BITS;
 End;
end;

{Управление RTS}
procedure TForm1.cbRTSClick(Sender: TObject);
begin
 FPort.RTS:= cbRTS.Checked;
end;

{Управление DTR}
procedure TForm1.cbDTRClick(Sender: TObject);
begin
 FPort.DTR:= cbDTR.Checked;
end;

procedure TForm1.cbOUT1Click(Sender: TObject);
begin
 FPort.OUT1:= cbOUT1.Checked;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 If not FPort.Connected then Exit;
 _RTS.Checked := FPort.RTS;
 _DTR.Checked := FPort.DTR;
 _OUT1.Checked:= FPort.OUT1;
 _OUT2.Checked:= FPort.OUT2;
end;


end.
