unit fmuDrawer;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,
  //
  LineX;

type
  TfmDrawer = class(TForm)
    btnClose: TButton;
    btnGetState: TButton;
    btnOpenDrawer: TButton;
    edtState: TMemo;
    chkDeviceEnabled: TCheckBox;
    procedure ControlChanged(Sender: TObject);
  private
    FLineX: TLineX;
    procedure Init(ALine: TLineX; AFont: TFont);
  end;

procedure ShowDrawerDialog(ALine: TLineX; AFont: TFont);

implementation

{$R *.DFM}

procedure ShowDrawerDialog(ALine: TLineX; AFont: TFont);
var
  fm: TfmDrawer;
begin
  fm := TfmDrawer.Create(nil);
  try
    fm.Init(ALine, AFont);
    fm.ShowModal;
  finally
    fm.Free;
  end;
end;

procedure TfmDrawer.Init(ALine: TLineX; AFont: TFont);
begin
  FLineX := ALine;
  Font := AFont;
end;

procedure TfmDrawer.ControlChanged(Sender: TObject);
const
  DrawerOpened: array [boolean] of string = (' ', ' ');

  procedure HandleException(E: Exception);
  begin
    edtState.Clear;
    if E is EDisplayError then
      edtState.Text := Format('(%d)', [EDisplayError(E).ErrorCode])
    else
      edtState.Text := '(-6)'; //  
    edtState.Text := edtState.Text + ' ' + E.Message;
  end;

begin
  try
    edtState.Clear;
    if Sender = btnOpenDrawer then
      FLineX.OpenDrawer
    else if Sender = btnGetState then
     edtState.Text := DrawerOpened[Boolean(FLineX.DrawerOpened)]
    else if Sender = chkDeviceEnabled then
      FLineX.DeviceEnabled := chkDeviceEnabled.Checked
  except
    on E: Exception do HandleException(E);
  end;
end;

end.
