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

📄 umain.pas

📁 单片机
💻 PAS
📖 第 1 页 / 共 5 页
字号:

//Token a word and delete it form a string

function TokenStr(var lns: string): string;
var
  i: Integer;
begin
  Result := '';
  if lns = '' then
    Exit;
  i := 1;
  while
    ((lns[i] = ' ') or
    (lns[i] = ',') or
    (lns[i] = '{') or
    (lns[i] = '}') or
    (lns[i] = '='))
    and (i < Length(lns))
    do
    i := i + 1;
  while
    (lns[i] <> ' ') and
    (lns[i] <> ',') and
    (lns[i] <> '=') and
    (lns[i] <> '{') and
    (lns[i] <> '}') and
    (i <= Length(lns))
    do
  begin
    Result := Result + lns[i];
    i := i + 1;
  end;
  Delete(lns, 1, i - 1);
end;

//User define functions end.

//System event

procedure TfrmMain.FormResize(Sender: TObject);
begin
  pgctMain.Left := -1;
  pgctMain.Top := -5;
  pgctMain.Width := pnlMain.Width + 3;
  pgctMain.Height := pnlMain.Height + 5;
  stat.Panels[0].Width := ClientWidth - 1 - 2 - 110 - 1;
  pbMain.Left := 1 + stat.Panels[0].Width + 2;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
var
  sr: TSearchRec;
  s: string;
  i: Integer;
  mi: TMenuItem;
  K: Word;
begin
  Randomize;
  pnlMain.Align := alClient;
  HWD := Handle;

  //embed Gauge to StatusBar
  pbMain.Parent := stat;
  pbMain.Top := 3;
  pbMain.Width := 100;
  pbMain.Height := stat.Height - 4;

  //initialization
  mmoLog.Clear;
  mmoHex.Clear;
  //mmoBin.Align := alClient;

  pbMain.Progress := 0;
  pbMain.ShowText := True;

  btnDownload.Enabled := False;
  mnDownLoad.Enabled := False;

  TS := Now;

  //Search language file
  i := 1;
  if FindFirst(ExtractFilePath(Application.ExeName) + '*.lng', faArchive, sr) = 0 then
  begin
    s := ChangeFileExt(ExtractFileName(sr.Name), '');
    if pmLang.Items.Find(s) = nil then
    begin
      mi := TMenuItem.Create(Self);
      mi.Caption := s;
      mi.RadioItem := True;
      mi.GroupIndex := 1;
      mi.AutoHotkeys := maManual;
      mi.AutoLineReduction := maManual;
      mi.Tag := 2003;
      mi.OnClick := pmLangEnglishClick;
      pmLang.Items.Add(mi);
      mi := TMenuItem.Create(Self);
      mi.Caption := s;
      mi.RadioItem := True;
      mi.GroupIndex := 1;
      mi.AutoHotkeys := maManual;
      mi.AutoLineReduction := maManual;
      mi.Tag := 2003;
      mi.OnClick := pmLangEnglishClick;
      mnLanguage.Add(mi);
    end;
    while FindNext(sr) = 0 do
    begin
      s := ChangeFileExt(ExtractFileName(sr.Name), '');
      if pmLang.Items.Find(s) = nil then
      begin
        mi := TMenuItem.Create(Self);
        mi.Caption := s;
        mi.RadioItem := True;
        mi.GroupIndex := 1;
        mi.AutoHotkeys := maManual;
        mi.AutoLineReduction := maManual;
        mi.Tag := 2003 + i;
        mi.OnClick := pmLangEnglishClick;
        pmLang.Items.Add(mi);
        mi := TMenuItem.Create(Self);
        mi.Caption := s;
        mi.RadioItem := True;
        mi.GroupIndex := 1;
        mi.AutoHotkeys := maManual;
        mi.AutoLineReduction := maManual;
        mi.Tag := 2003 + i;
        i := i + 1;
        mi.OnClick := pmLangEnglishClick;
        mnLanguage.Add(mi);
      end;
    end;
    FindClose(sr);
  end;

  loadcfg;
  //showtips
  K := VK_F11;
  FormKeyDown(Sender, K, [ssAlt, ssShift]);
  pgctMain.ActivePageIndex := 0;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  savecfg;
end;

//Load last saved config data, or default value

procedure TfrmMain.loadcfg;
var
  s: string;
  i: Integer;
  hf: TMenuItem;
  buf: CBuf;
begin
  s := ExtractFilePath(Application.ExeName) + 'avrubd.ini';
  ini := TFastIniFile.Create(s);
  try
    try
      Left := ini.ReadInteger('Last', 'Left', 100);
      Top := ini.ReadInteger('Last', 'Top', 100);
      Width := ini.ReadInteger('Last', 'Width', 636);
      Height := ini.ReadInteger('Last', 'Height', 420);
      WindowState := wsNormal;
      //limit main window will not be outside desktop
      if Left < 0 then
        Left := 0;
      if Top < 0 then
        Top := 0;
      if Width > Screen.Width then
        Width := Screen.Width;
      if Height > Screen.Height then
        Height := Screen.Height;
      if Left > Screen.Width then
        Left := Screen.Width - Width;
      if Top > Screen.Height then
        Top := Screen.Height - Height;

      //Comport
      cfg.RTS := ini.ReadBool('ComPort', 'RTS', False);
      cfg.DTR := ini.ReadBool('ComPort', 'DTR', False);
      ComPort.Port := ini.ReadString('ComPort', 'Port', 'COM1');
      ComPort.BaudRate := TBaudRate(ini.ReadInteger('ComPort', 'BaudRate', Ord(br19200)));
      ComPort.DataBits := TDataBits(ini.ReadInteger('ComPort', 'DataBits', Ord(dbEight)));
      ComPort.StopBits := TStopBits(ini.ReadInteger('ComPort', 'StopBits', Ord(sbOneStopBit)));
      ComPort.Parity.Bits := TParityBits(ini.ReadInteger('ComPort', 'Parity', Ord(prNone)));
      ComPort.FlowControl.FlowControl := TFlowControl(ini.ReadInteger('ComPort', 'FlowControl', Ord(fcNone)));

      cfg.SmartMouse := ini.ReadBool('system', 'SmartMouse', False);
      tmrSmartMouse.Enabled := cfg.SmartMouse;
      cfg.Beep := ini.ReadBool('system', 'Beep', True);
      cfg.keyMode := ini.ReadInteger('AVR', 'KEYMODE', 1);
      cfg.keyASC := ini.ReadString('AVR', 'KEYASC', 'd');
      cfg.keyHEX := FormatHexStr(ini.ReadString('AVR', 'KEYHEX', '64'), buf);
      cfg.Protocol := ini.ReadInteger('system', 'Protocol', 0);
      cfg.SendTime := ini.ReadInteger('system', 'SendTime', 200);
      cfg.BootCnt := ini.ReadInteger('system', 'BootCount', 10);
      cfg.SendRST := ini.ReadBool('AVR', 'SendRST', False);
      cfg.AutoSize := ini.ReadBool('AVR', 'AutoSize', True);
      cfg.CmdRST := ini.ReadString('AVR', 'CmdRST', '7E');
      cfg.FrameLen := ((ini.ReadInteger('system', 'Length', 128)) div 16) * 16;
      cfg.FlashSize := ini.ReadInteger('AVR', 'FlashSize', 2);
      cfg.fillunused := ini.ReadBool('AVR', 'Fill', True);
      cfg.filldata := FormatHexStr(ini.ReadString('AVR', 'filldata', 'FF CF'), buf);

      cfg.run := DecryptInt(ini.ReadString('last', 'run', '0000000000000000')) + 1;
      ini.WriteString('last', 'run', EncryptInt(cfg.run));
      StaSum.sum := DecryptInt(ini.ReadString('last', 'sum', '0000000000000000'));
      StaSum.fail := DecryptInt(ini.ReadString('last', 'fail', '0000000000000000'));
      StaToday.sum := 0;
      StaToday.fail := 0;

      for i := 1 to ini.ReadInteger('History', 'Count', 0) do
      begin
        s := ini.ReadString('History', 'File' + IntToStr(i - 1), '');
        if s <> '' then
        begin
          if FileExists(s) then
          begin
            hf := TMenuItem.Create(Self);
            hf.OnClick := HisFileClick;
            hf.Caption := s;
            hf.RadioItem := True;
            s := ExtractFileExt(s);
            if CompareText(s, '.hex') = 0 then
              hf.ImageIndex := 14
            else
              if CompareText(s, '.aub') = 0 then
                hf.ImageIndex := 9
              else
                hf.ImageIndex := 15;
            pmHisFile.Items.Add(hf);
          end;
        end;
        if i >= MaxHisFileCount then
          Break;
      end;

      for i := 1 to ini.ReadInteger('ImportHistory', 'Count', 0) do
      begin
        s := ini.ReadString('ImportHistory', 'File' + IntToStr(i - 1), '');
        if s <> '' then
        begin
          hf := TMenuItem.Create(Self);
          hf.OnClick := ImportHisClick;
          hf.Caption := s;
          hf.RadioItem := True;
          pmImportHis.Items.Add(hf);
        end;
      end;

      if cfg.run = 1 then
      begin
        //Get default codepage
        if (GetSystemMetrics(SM_DBCSENABLED) > 0) and (IsValidCodePage(936)) then
          cfg.Language := 'Chinese'
        else
          cfg.Language := 'English';
      end
      else
        cfg.Language := ini.ReadString('Last', 'language', 'English');

      if cfg.Language = 'Chinese' then
      begin
        cfg.FontName := ini.ReadString('Last', 'FontName', '宋体');
        cfg.FontSize := ini.ReadInteger('Last', 'FontSize', 9);
      end
      else
      begin
        cfg.FontName := ini.ReadString('Last', 'FontName', 'MS Sans Serif');
        cfg.FontSize := ini.ReadInteger('Last', 'FontSize', 8);
      end;
      //limit font size
      if cfg.FontSize < 8 then
        cfg.FontSize := 8;
      if cfg.FontSize > 24 then
        cfg.FontSize := 24;
      //Set main window's Font
      Font.Name := cfg.FontName;
      Font.Size := cfg.FontSize;
      mmoHex.Font := Font;
      mmoLog.Font := Font;
      mmoVer.Font := Font;

    except

    end;
  finally
    ini.Free;
  end;
end;

//save current config data

procedure TfrmMain.savecfg;
var
  s: string;
  i: Integer;
begin
  s := ExtractFilePath(Application.ExeName) + 'avrubd.ini';
  ini := TFastIniFile.Create(s);
  try
    try
      ini.WriteInteger('Last', 'Left', Left);
      ini.WriteInteger('Last', 'Top', Top);
      ini.WriteInteger('Last', 'Width', Width);
      ini.WriteInteger('Last', 'Height', Height);

      ini.WriteBool('ComPort', 'RTS', cfg.RTS);
      ini.WriteBool('ComPort', 'DTR', cfg.DTR);
      ini.WriteString('ComPort', 'Port', ComPort.Port);
      ini.WriteInteger('ComPort', 'BaudRate', Ord(ComPort.BaudRate));
      ini.WriteInteger('ComPort', 'DataBits', Ord(ComPort.DataBits));
      ini.WriteInteger('ComPort', 'StopBits', Ord(ComPort.StopBits));
      ini.WriteInteger('ComPort', 'Parity', Ord(ComPort.Parity.Bits));
      ini.WriteInteger('ComPort', 'FlowControl', Ord(ComPort.FlowControl.FlowControl));

      ini.WriteBool('system', 'SmartMouse', cfg.SmartMouse);
      ini.WriteBool('system', 'Beep', cfg.Beep);
      ini.WriteInteger('AVR', 'KEYMODE', cfg.keyMode);
      ini.WriteString('AVR', 'KEYASC', cfg.keyASC);
      ini.WriteString('AVR', 'KEYHEX', cfg.keyHEX);
      ini.WriteInteger('system', 'Protocol', cfg.Protocol);
      ini.WriteInteger('system', 'SendTime', cfg.SendTime);
      ini.WriteInteger('system', 'BootCount', cfg.BootCnt);
      ini.WriteBool('AVR', 'SendRST', cfg.SendRST);
      ini.WriteBool('AVR', 'AutoSize', cfg.AutoSize);
      ini.WriteString('AVR', 'CmdRST', cfg.CmdRST);
      ini.WriteInteger('system', 'Length', cfg.FrameLen);
      ini.WriteInteger('AVR', 'FlashSize', cfg.FlashSize);
      ini.WriteBool('AVR', 'Fill', cfg.fillunused);
      ini.WriteString('AVR', 'filldata', cfg.filldata);

      ini.WriteString('last', 'sum', EncryptInt(StaSum.sum));
      ini.WriteString('last', 'fail', EncryptInt(StaSum.fail));

      ini.EraseSection('History');
      ini.WriteInteger('History', 'Count', pmHisFile.Items.Count);
      for i := 0 to pmHisFile.Items.Count - 1 do
        ini.WriteString('History', 'File' + IntToStr(i), pmHisFile.Items[i].Caption);

      ini.EraseSection('ImportHistory');
      ini.WriteInteger('ImportHistory', 'Count', pmImportHis.Items.Count);
      for i := 0 to pmImportHis.Items.Count - 1 do
        ini.WriteString('ImportHistory', 'File' + IntToStr(i), pmImportHis.Items[i].Caption);

      ini.WriteString('Last', 'language', cfg.Language);
      ini.WriteString('Last', 'FontName', cfg.FontName);
      ini.WriteInteger('Last', 'FontSize', cfg.FontSize);
    except

    end;
  finally
    ini.Free;
  end;
end;

//Load target file(HEX/BIN)

procedure TfrmMain.btnLoadClick(Sender: TObject);
begin
  //avoid reiteration event
  if Idle then
  begin
    Idle := False;
    try
      dlgOpen.Title := mnLoad.Caption + '           ';
      if dlgOpen.Execute then
      begin
        OpenFile(dlgOpen.FileName);
      end;
    finally
      HWD := frmMain.Handle;
      Idle := True;
    end;
  end;
end;

procedure TfrmMain.dlgOpenShow(Sender: TObject);
begin
  HWD := FindWindow(nil, PChar(dlgOpen.Title));
  clrSmart;
end;

//load history file

procedure TfrmMain.btnLoadHisClick(Sender: TObject);
begin
  //avoid reiteration event
  if Idle then
  begin
    Idle := False;
    try
      GetCursorPos(mp);
      pmHisFile.Popup(mp.X, mp.Y);
    finally
      Idle := True;
    end;
  end;
end;

//save buffer to file

procedure TfrmMain.btnSaveClick(Sender: TObject);
var
  i: Integer;
  aub: TFastIniFile;
  s: string;
begin
  //avoid reiteration event
  if Idle then
  begin
    Idle := False;
    try
      dlgSave.Title := mnSave.Caption + '           ';
      if dlgSave.Execute then

⌨️ 快捷键说明

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