⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uoption.pas

📁 这个程序的主要目的是为了提供一个具有通用性的 AVR Bootloader
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{
  Project:  AVR Universal Bootloader Download
  File:     uOption.pas
  Describe: Show option dialog, import bootcfg.h config
            set config value
  Author:   Shaoziyang
  Date:     2007.6
  Version:  3.0
  Web:      http://shaoziyang.googlepages.com
        or  http://shaoziyang.bloger.com.cn (Chinese)
  Email:    shaoziyang@gmail.com
}

unit uOption;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  ComCtrls,
  StdCtrls,
  Buttons,
  ExtCtrls,
  CPort,
  CPortCtl,
  Menus,
  ImgList;

type
  TfrmOption = class(TForm)
    btnCancel: TBitBtn;
    btnFont: TBitBtn;
    btnHypertrm: TBitBtn;
    btnImport: TBitBtn;
    btnImportHis: TBitBtn;
    btnOk: TBitBtn;
    cbbBootCnt: TComboBox;
    cbbComPort: TComComboBox;
    cbbComPortBaudRate: TComboBox;
    cbbComPortDataBits: TComboBox;
    cbbComPortFlowControl: TComboBox;
    cbbComPortParity: TComboBox;
    cbbComPortPort: TComboBox;
    cbbComPortStopBits: TComboBox;
    cbbFlash: TComboBox;
    cbbFrameLen: TComboBox;
    cbbProtocol: TComboBox;
    cbbSendTime: TComboBox;
    chkAutoSize: TCheckBox;
    chkBeepEn: TCheckBox;
    chkComPortDTR: TCheckBox;
    chkComPortRTS: TCheckBox;
    chkFillUnused: TCheckBox;
    chkSendRST: TCheckBox;
    chkSmartMouse: TCheckBox;
    dlgFont: TFontDialog;
    dlgOpen: TOpenDialog;
    edtFillUnused: TEdit;
    edtKeyASC: TEdit;
    edtKeyHEX: TEdit;
    edtSendRST: TEdit;
    gpbConnectKey: TGroupBox;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    lbAutoSize: TLabel;
    lbBasicTime: TLabel;
    lbBasicTimeMs: TLabel;
    lbBaudRate: TLabel;
    lbCommProt: TLabel;
    lbComPort: TLabel;
    lbDataBits: TLabel;
    lbFillUnused: TLabel;
    lbFlashSize: TLabel;
    lbFlashSizeBytes: TLabel;
    lbFlowCtrl: TLabel;
    lbFont: TLabel;
    lbFrameLen: TLabel;
    lbFrameLenBytes: TLabel;
    lbMaxConCnt: TLabel;
    lbParity: TLabel;
    lbSendRST: TLabel;
    lbStopBits: TLabel;
    pgctOption: TPageControl;
    pnlBtn: TPanel;
    pnlpgctOption: TPanel;
    rbASC: TRadioButton;
    rbHEX: TRadioButton;
    tmrErr: TTimer;
    tsAVR: TTabSheet;
    tsComport: TTabSheet;
    tsSystem: TTabSheet;
    chkReloadFile: TCheckBox;
    Image4: TImage;
    procedure btnFontClick(Sender: TObject);
    procedure btnHypertrmClick(Sender: TObject);
    procedure btnImportClick(Sender: TObject);
    procedure btnImportHisClick(Sender: TObject);
    procedure btnOkClick(Sender: TObject);
    procedure cbbFrameLenChange(Sender: TObject);
    procedure dlgFontShow(Sender: TObject);
    procedure dlgOpenShow(Sender: TObject);
    procedure edtFillUnusedChange(Sender: TObject);
    procedure edtKeyHEXChange(Sender: TObject);
    procedure edtKeyHEXClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure lbAutoSizeClick(Sender: TObject);
    procedure lbSendRSTClick(Sender: TObject);
    procedure pnlpgctOptionMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure tmrErrTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure lbFillUnusedClick(Sender: TObject);
  private
    { Private declarations }
    Modify: Boolean;
    procedure setcbbErr(cbb: TComboBox);
  public
    { Public declarations }
    procedure ImportCfg(FileName: string);
  end;

var
  frmOption: TfrmOption;
  cbbErr: TComboBox;
  IdleOpt: Boolean = True;

implementation

uses
  uMain,
  uAbout,
  uAutoCode;

{$R *.DFM}

procedure TfrmOption.FormShow(Sender: TObject);
var
  buf: CBuf;
begin
  btnOk.Enabled := True;
  pgctOption.Left := -1;
  pgctOption.Top := 0;
  pgctOption.Width := pnlpgctOption.Width + 4;
  pgctOption.Height := pnlpgctOption.Height + 3;

  //update Comport properties
  cbbComPort.ComProperty := cpPort;
  cbbComPort.Refresh;
  cbbComPortPort.Items := cbbComPort.Items;
  cbbComPortPort.ItemIndex := cbbComPortPort.Items.IndexOf(frmMain.ComPort.Port);
  if cbbComPortPort.ItemIndex = -1 then
    cbbComPortPort.ItemIndex := 0;

  cbbComPort.ComProperty := cpBaudRate;
  cbbComPort.Refresh;
  cbbComPortBaudRate.Items := cbbComPort.Items;
  cbbComPortBaudRate.ItemIndex := Ord(frmMain.ComPort.BaudRate);

  cbbComPort.ComProperty := cpDataBits;
  cbbComPort.Refresh;
  cbbComPortDataBits.Items := cbbComPort.Items;
  cbbComPortDataBits.ItemIndex := Ord(frmMain.ComPort.DataBits);

  cbbComPort.ComProperty := cpStopBits;
  cbbComPort.Refresh;
  cbbComPortStopBits.Items := cbbComPort.Items;
  cbbComPortStopBits.ItemIndex := Ord(frmMain.ComPort.StopBits);

  cbbComPort.ComProperty := cpParity;
  cbbComPort.Refresh;
  cbbComPortParity.Items := cbbComPort.Items;
  cbbComPortParity.ItemIndex := Ord(frmMain.ComPort.Parity.Bits);

  cbbComPort.ComProperty := cpFlowControl;
  cbbComPort.Refresh;
  cbbComPortFlowControl.Items := cbbComPort.Items;
  cbbComPortFlowControl.ItemIndex := Ord(frmMain.ComPort.FlowControl.FlowControl);

  chkComPortRTS.Checked := cfg.RTS;
  chkComPortDTR.Checked := cfg.DTR;

  //Load config data
  edtKeyASC.Text := cfg.keyASC;
  edtKeyHEX.Text := FormatHexStr(cfg.keyHEX, buf);
  if cfg.keyMode = 0 then
    rbASC.Checked := True
  else
    rbHEX.Checked := True;

  chkAutoSize.Checked := cfg.AutoSize;
  chkSendRST.Checked := cfg.SendRST;
  edtSendRST.Text := FormatHexStr(cfg.CmdRST, buf);
  chkFillUnused.Checked := cfg.fillunused;
  edtFillUnused.Text := FormatHexStr(cfg.filldata, buf);

  cbbProtocol.ItemIndex := cfg.Protocol;
  cbbBootCnt.Text := IntToStr(cfg.BootCnt);
  cbbSendTime.Text := IntToStr(cfg.SendTime);
  cbbFlash.ItemIndex := cfg.FlashSize;
  if cbbFlash.ItemIndex = -1 then
    cbbFlash.ItemIndex := 2;
  cbbFrameLen.Text := IntToStr(cfg.FrameLen);
  Modify := False;

  chkBeepEn.Checked := cfg.Beep;
  chkSmartMouse.Checked := cfg.SmartMouse;
  chkReloadFile.Checked := cfg.reload;

  lbFont.Font.Name := cfg.FontName;
  lbFont.Font.Size := cfg.FontSize;
  lbFont.Caption := lbFont.Font.Name + ' ' + IntToStr(lbFont.Font.Size);
  Font := lbFont.Font;
  //On Font change, TComboBox will select text automatically
  cbbFrameLen.SelLength := 0;
  cbbSendTime.SelLength := 0;
  cbbBootCnt.SelLength := 0;
end;

procedure TfrmOption.lbFillUnusedClick(Sender: TObject);
begin
  chkFillUnused.Checked := not chkFillUnused.Checked;
  Modify := True;
end;

procedure TfrmOption.lbSendRSTClick(Sender: TObject);
begin
  chkSendRST.Checked := not chkSendRST.Checked;
end;

procedure TfrmOption.lbAutoSizeClick(Sender: TObject);
begin
  chkAutoSize.Checked := not chkAutoSize.Checked;
  Modify := True
end;

procedure TfrmOption.btnFontClick(Sender: TObject);
begin
  dlgFont.Font := lbFont.Font;
  if dlgFont.Execute then
  begin
    lbFont.Caption := dlgFont.Font.Name + ' ' + IntToStr(dlgFont.Font.Size);
    lbFont.Font := dlgFont.Font;
    if lbFont.Font.Size < 8 then
      lbFont.Font.Size := 8;
    if lbFont.Font.Size > 24 then
      lbFont.Font.Size := 24;
  end;
  HWD := Handle;
end;

procedure TfrmOption.dlgFontShow(Sender: TObject);
begin
  HWD := dlgFont.Handle;
  frmMain.clrSmart;
end;

procedure TfrmOption.btnOkClick(Sender: TObject);
var
  buf: CBuf;
begin
  //avoid reiteration event
  if IdleOpt then
  begin
    IdleOpt := False;
    try
      //comport
      cfg.RTS := chkComPortRTS.Checked;
      cfg.DTR := chkComPortDTR.Checked;

      with frmMain.ComPort do
      begin
        BeginUpdate;
        Port := cbbComPortPort.Items[cbbComPortPort.ItemIndex];
        BaudRate := TBaudRate(cbbComPortBaudRate.ItemIndex);
        DataBits := TDataBits(cbbComPortDataBits.ItemIndex);
        StopBits := TStopBits(cbbComPortStopBits.ItemIndex);
        Parity.Bits := TParityBits(cbbComPortParity.ItemIndex);
        FlowControl.FlowControl := TFlowControl(cbbComPortFlowControl.ItemIndex);
        EndUpdate;
      end;

      edtKeyHEXClick(Sender);
      cfg.keyASC := edtKeyASC.Text;
      cfg.keyHEX := edtKeyHEX.Text;
      if rbASC.Checked then
        cfg.keyMode := 0
      else
        cfg.keyMode := 1;

      cfg.Protocol := cbbProtocol.ItemIndex;
      cfg.FlashSize := cbbFlash.ItemIndex;
      cfg.fillunused := chkFillUnused.Checked;
      cfg.filldata := edtFillUnused.Text;

      cfg.reload := chkReloadFile.Checked;
      cfg.Beep := chkBeepEn.Checked;
      cfg.SmartMouse := chkSmartMouse.Checked;
      frmMain.tmrSmartMouse.Enabled := cfg.SmartMouse;

      cfg.AutoSize := chkAutoSize.Checked;
      cfg.SendRST := chkSendRST.Checked;
      cfg.CmdRST := FormatHexStr(edtSendRST.Text, buf);

      try
        cfg.BootCnt := StrToInt(cbbBootCnt.Text);
        if (cfg.BootCnt < 2) then
          cfg.BootCnt := 2
        else
          if (cfg.BootCnt > 100) then
            cfg.BootCnt := 100;
      except
        Application.MessageBox(PChar(lang.msgError + ': [' + lbMaxConCnt.Caption + ']'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
        setcbbErr(cbbBootCnt);
        Exit;
      end;
      try
        cfg.SendTime := StrToInt(cbbSendTime.Text);
        if (cfg.SendTime < 100) then
          cfg.SendTime := 100
        else
          if (cfg.SendTime > 4096) then
            cfg.SendTime := 4096;
      except
        Application.MessageBox(PChar(lang.msgError + ': [' + lbBasicTime.Caption + ']'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
        setcbbErr(cbbSendTime);
        Exit;
      end;
      try
        cfg.FrameLen := StrToInt(cbbFrameLen.Text);
        if (cfg.FrameLen < 16) or (cfg.FrameLen > 4096) then
          cfg.FrameLen := 128;
      except
        Application.MessageBox(PChar(lang.msgError + ': [' + lbFrameLen.Caption + ']'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
        setcbbErr(cbbFrameLen);
        Exit;
      end;

      if cfg.SendTime < 100 then
        cfg.SendTime := 100;
      if cfg.SendTime > 2000 then
        cfg.SendTime := 2000;
      if cfg.BootCnt < 2 then
        cfg.BootCnt := 2;
      if cfg.BootCnt > 100 then
        cfg.BootCnt := 100;

      cfg.FontName := lbFont.Font.Name;
      cfg.FontSize := lbFont.Font.Size;
      frmMain.Font := lbFont.Font;
      frmMain.mmoHex.Font := lbFont.Font;
      frmMain.mmoLog.Font := lbFont.Font;
      frmMain.mmoVer.Font := lbFont.Font;

      //reload file
      if Modify and (frmMain.dlgOpen.FileName <> '') then
        frmMain.OpenFile(frmMain.dlgOpen.FileName);

      Close;
    finally
      IdleOpt := True;
    end;
  end;

end;

procedure TfrmOption.btnHypertrmClick(Sender: TObject);
begin
  //avoid reiteration event
  if IdleOpt then
  begin
    IdleOpt := False;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -