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

📄 mainform.cpp

📁 用于开发Atmel的AVR系列单片机的GCC集成开发环境
💻 CPP
📖 第 1 页 / 共 4 页
字号:
 {
  cliphastext = false;
  Paste1->Enabled = false;
  ToolButton11->Enabled = false;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Programmer1Click(TObject *Sender)
{
 PgmDlg->ShowWindow (OptDlg->options.MCUType);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
 static bool first = true;

 if (first)
 {
  CNode = TreeView1->Items->Item[1];
  HNode = TreeView1->Items->Item[2];
  first = false;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Console1Click(TObject *Sender)
{
 TRunFile *RunFile;
 AnsiString temp;

 RunFile = new TRunFile;
 temp = getenv ("COMSPEC");
 RunFile->Run (temp, NULL, ProjectPath);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Terminal1Click(TObject *Sender)
{
 TermForm->mfrm = this;
 TermForm->ShowWindow ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Programmer2Click(TObject *Sender)
{
 PrgOpt->ShowWindow ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Tools2Click(TObject *Sender)
{
 int i, d;
 TMenuItem *mitem;

 ToolDlg->ShowWindow ();
 if (ToolDlg->ModalResult == mrOk)
 {
  d = MainMenu1->Items->Items[4]->Count;
  d -= 3;
  for (i = 0;i < d;i++)
  {
   mitem = MainMenu1->Items->Items[4]->Items[3];
   delete mitem;
  }
  d = ToolDlg->Tools->Count;
  for (i = 0;i < d;i++)
  {
   mitem = new TMenuItem (this);
   mitem->Caption = ToolDlg->Tools->Strings[i];
   mitem->OnClick = ToolsMenuClick;
   mitem->ImageIndex = 32;
   MainMenu1->Items->Items[4]->Add (mitem);
  }
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ToolsMenuClick(TObject *Sender)
{
 TMenuItem *mitem;
 AnsiString file, params, wdir, temp, t;
 int i, d;
 char ch;
 bool placeholder = false;

 mitem = (TMenuItem *)Sender;
 i = mitem->MenuIndex - 3;
 file = ToolDlg->ToolFiles->Strings[i];
 temp = ToolDlg->Params->Strings[i];
 wdir = ToolDlg->WorkingDir->Strings[i];
 if (wdir == "") wdir = IncludeTrailingBackslash (ProjectPath);
 params = "";
 for (i = 1;i <= temp.Length();i++)
 {
  ch = temp[i];
  if (ch == '*')
  {
   placeholder = true;
   t = "";
   d = 0;
  }
  else if (placeholder)
  {
   if (ch == ' ' || d == 3)
   {
    placeholder = false;
    if (t.Pos ("DIR")) params += IncludeTrailingBackslash (ProjectPath);
    if (t.Pos ("OUT"))
    {
     params += OptDlg->OutputName;
    }
    if (t.Pos ("DRV")) params += IncludeTrailingBackslash (ExtractFileDrive (ProjectPath));
    if (t.Pos ("MCU")) params += OptDlg->options.MCUType;
    params += ch;
   }
   else
   {
    t += ch;
    d++;
   }
  }
  else params += ch;
 }
 if (placeholder)
 {
  if (t.Pos ("DIR")) params += IncludeTrailingBackslash (ProjectPath);
  if (t.Pos ("OUT")) params += OptDlg->OutputName;
  if (t.Pos ("DRV")) params += IncludeTrailingBackslash (ExtractFileDrive (ProjectPath));
  if (t.Pos ("MCU")) params += OptDlg->options.MCUType;
 }
 ShellExecute (NULL, "open", file.c_str(), params.c_str(), wdir.c_str(), SW_SHOW);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::avrlibcHelp1Click(TObject *Sender)
{
 AnsiString LibCHelp;

 LibCHelp = EnvIni->ReadString ("Directories", "LibCMan", NULL);
 if (LibCHelp != 0)
 {
  ShellExecute (NULL, "open", LibCHelp.c_str(), NULL, NULL, SW_SHOW);
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::About1Click(TObject *Sender)
{
 AboutDlg->ShowWindow ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
 if (CheckForUnsavedFiles (true) == IDCANCEL)
 {
  CanClose = false;
  return;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IDEHelp1Click(TObject *Sender)
{
 Application->HelpCommand(HELP_CONTENTS, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SynEditKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 ActSynEdit = (TSynEdit *)Sender;
 if (Key == VK_F2 && ActSynEdit->SelectionMode != smNormal)
 {
  ActSynEdit->SelectionMode = smNormal;
  StatusBar1->Panels->Items[1]->Text = "Selection Mode : Normal";
 }
 else if (Key == VK_F3 && ActSynEdit->SelectionMode != smLine)
 {
  ActSynEdit->SelectionMode = smLine;
  StatusBar1->Panels->Items[1]->Text = "Selection Mode : Line";
 }
 else if (Key == VK_F4 && ActSynEdit->SelectionMode != smColumn)
 {
  ActSynEdit->SelectionMode = smColumn;
  StatusBar1->Panels->Items[1]->Text = "Selection Mode : Column";
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ParamProposalExecute(SynCompletionType Kind,
      TObject *Sender, AnsiString &AString, int &x, int &y,
      bool &CanExecute)
{
 if (EnvOptions->ParamProp) PropExecute (Sender, CanExecute);
 else CanExecute = false;
}
//---------------------------------------------------------------------------
//----- Parameter Proposal Routines
//---------------------------------------------------------------------------
void __fastcall TForm1::PropExecute(TObject *Sender, bool &CanExecute)
{
 TSynEdit *ActEdit;
 TSynCompletionProposal *comprop;
 AnsiString temp, lookup;
 int pos, ParmNum = 0, ParenCounter, StartPos, SavePos, i;
 int index;
 bool FoundMatch = false;

 comprop = (TSynCompletionProposal *)Sender;
 ActEdit = (TSynEdit *)comprop->Editor;
 // Step Back to end of Last Function for Multiline Support
 for (i = ActEdit->SelStart;i > 1;i--)
 {
  if (ActEdit->Lines->Text[i] == ';' ||
      ActEdit->Lines->Text[i] == '{' ||
      ActEdit->Lines->Text[i] == '}') break;
 }
 temp = ActEdit->Lines->Text.SubString (i, ActEdit->SelStart - i);
 pos = temp.Length ();
 // Parse Text
 while (pos && !FoundMatch)
 {
  if (temp[pos] == ',') // Look for Parameter Number
  {
   ParmNum++;
   pos--;
  }
  else if (temp[pos] == ')') // Check if Number of Open/Close Parenthesis are equal
  {                          // In this case, no Parameter Proposal is displayed
   ParenCounter = 1;
   pos--;
   while (pos && ParenCounter)
   {
    if (temp[pos] == ')') ParenCounter++;
    else if (temp[pos] == '(') ParenCounter--;
    pos--;
   }
  }
  else if (temp[pos] == '(')
  {
   StartPos = pos;
   while (pos && !ValidChars.Contains (temp[pos])) pos--; // Look for Start of Keyword
   if (pos)
   {
    SavePos = pos;
    while (pos && ValidChars.Contains (temp[pos])) pos--;
    pos++;
    lookup = temp.SubString (pos, SavePos - pos + 1);
    // Search Keyword in StringList (Method IndexOf is not case sensitive)
    for (index = 0;index < FuncList->Count;index++)
    {
     if (FuncList->Strings[index] == lookup)
     {
      FoundMatch = true;
      break;
     }
    }
    if (!FoundMatch)
    {
     pos = StartPos;
     pos--;
    }
   }
  }
  else pos--;
 } // End of Parsing

 CanExecute = FoundMatch;
 if (CanExecute)
 {
  if (lookup != comprop->PreviousWord)
  {
   comprop->ItemList->Clear ();
   comprop->ItemList->Add (FormatParameters (FuncList->Strings[index + 1], ParmNum));
  }
 }
 else comprop->ItemList->Clear ();
}
//---------------------------------------------------------------------------
AnsiString __fastcall TForm1::FormatParameters (AnsiString parm, int idx)
{
 AnsiString result = "";
 int i, ParameterIndex = 0;
 bool ParameterPart = false, ActParameter = false;

 // 'Format Parameters' in SynCompletionProposal didn't work correctly
 // so i had to write my own
 for (i = 1;i <= parm.Length ();i++)
 {
  if (parm[i] == ',')
  {
   ParameterIndex++;
   if (ActParameter) result += '\x9';
   ActParameter = false;
  }
  if (parm[i] == ')' && ActParameter)
  {
   result += '\x9';
   ActParameter = ParameterPart = false;
  }
  result += parm[i];
  if (parm[i] == '(') ParameterPart = true;
  if (ParameterPart && ParameterIndex == idx && !ActParameter)
  {
   result += '\x9'; // Enclose selected Parameter Part in ASCII 9 to make it bold
   ActParameter = true;
  }
 }
 return result;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BuildFuncTable (void)
{
 char i;
 AnsiString temp;

 for (i = '0';i <= '9';i++) ValidChars << i;
 for (i = 'A';i <= 'Z';i++) ValidChars << i;
 for (i = 'a';i <= 'z';i++) ValidChars << i;
 ValidChars << '_';

 FuncList = new TStringList;
 temp = ExtractFilePath (Application->ExeName) + "paramprop.lst";
 if (!FileExists (temp))
 {
  Application->MessageBox ("Can't load paramprop.lst\nParameter Proposal "
                           "Feature not available", "Error", MB_OK | MB_ICONERROR);
 }
 else FuncList->LoadFromFile (temp);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ExportMakefile1Click(TObject *Sender)
{
 TExpMFile *exmfile;

 if (CList->Count == 0)
 {
  ShowMessage ("Project is empty\nCan't create MakeFile");
  return;
 }
 SaveDialog1->Title = "Save MakeFile as";
 SaveDialog1->Filter = "All Files (*.*)|*.*";
 SaveDialog1->DefaultExt = "";
 SaveDialog1->FileName = "makefile";
 SaveDialog1->InitialDir = ProjectPath;
 if (SaveDialog1->Execute ())
 {
  if (FileExists (SaveDialog1->FileName))
  {
   if (Application->MessageBox ("File already exists.\nOverwrite it ?",
                   "Info", MB_OKCANCEL | MB_ICONINFORMATION) != IDOK) return;
  }
 }
 exmfile = new TExpMFile;
 exmfile->Export (SaveDialog1->FileName, TreeView1->Items->Item[0]->Text,
                  CList, HList);
 delete exmfile;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 // Save actual Window Positions
 EnvIni->WriteInteger ("Environment", "FormHeight", Height);
 EnvIni->WriteInteger ("Environment", "FormWidth", Width);
 EnvIni->WriteInteger ("Environment", "FormTop", Top);
 EnvIni->WriteInteger ("Environment", "FormLeft", Left);
 if (WindowState == wsMaximized)
     EnvIni->WriteBool ("Environment", "FormMax", true);
 else EnvIni->WriteBool ("Environment", "FormMax", false);
 // Save Component Positions
 EnvIni->WriteInteger ("Environment", "TreeWidth", TreeView1->Width);
 EnvIni->WriteInteger ("Environment", "TabWidth", PageControl1->Width);
 EnvIni->WriteInteger ("Environment", "PanelHeight", Panel1->Height);
 delete EnvIni;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
 TreeView1->Constraints->MaxWidth = Width - 200;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Print1Click(TObject *Sender)
{
 if (PrintDialog1->Execute ())
 {
  PreparePrinting ();
  SynEditPrint1->Print ();
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PreparePrinting (void)
{
 TTabSheet *ActTabSheet;
 AnsiString temp;
 Graphics::TFont *tfont;

 ActTabSheet = PageControl1->ActivePage;
 temp = ActTabSheet->Name;
 temp.Delete (1, 3);
 temp = "Syn" + temp;
 ActSynEdit = (TSynEdit *)ActTabSheet->FindComponent(temp);
 tfont = new Graphics::TFont;
 tfont->Assign (ActSynEdit->Font);
 tfont->Color = clBlack;
 SynEditPrint1->CleanupInstance ();
 SynEditPrint1->SynEdit = ActSynEdit;
 SynEditPrint1->Title = ExtractFileName (EdList->Strings[ActTabSheet->PageIndex]);
 // Set Margins
 SynEditPrint1->Margins->Top = PrtSetForm->TopMargin;
 SynEditPrint1->Margins->Bottom = PrtSetForm->BottomMargin;
 SynEditPrint1->Margins->Left = PrtSetForm->LeftMargin;
 SynEditPrint1->Margins->Right = PrtSetForm->RightMargin;
 SynEditPrint1->Margins->Header = PrtSetForm->HeaderMargin;
 SynEditPrint1->Margins->Footer = PrtSetForm->FooterMargin;
 // Misc Settings
 SynEditPrint1->Highlight = PrtSetForm->UseHighlighter;
 SynEditPrint1->Colors = PrtSetForm->UseHighlighter;
 if (!PrtSetForm->UseHighlighter)
 {
  SynEditPrint1->Color = clWhite;
  SynEditPrint1->Font->Color = clBlack;
 }
 else
 {
  SynEditPrint1->Color = SynAVRCSyn1->SpaceAttri->Background;
  SynEditPrint1->Font->Color = SynAVRCSyn1->IdentifierAttri->Foreground;
 }
 SynEditPrint1->LineNumbers = PrtSetForm->PrintNumbers;
 // Prepare Header
 SynEditPrint1->Header->Clear ();
 SynEditPrint1->Header->Add ("File : $TITLE$", tfont, taLeftJustify, 1);
 temp = "Project : ";
 temp += TreeView1->Items->Item[0]->Text;
 if (temp.Pos (" *")) temp.Delete (temp.Pos (" *"), 2);
 SynEditPrint1->Header->Add (temp, tfont, taLeftJustify, 2);
 SynEditPrint1->Header->Add ("$TIMEDATE$", tfont, taRightJustify, 2);
 // Prepare Footer
 SynEditPrint1->Footer->Clear ();
 SynEditPrint1->Footer->Add ("$PAGENUM$/$PAGECOUNT$", tfont, taCenter, 1);

 delete tfont;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PrintPreview1Click(TObject *Sender)
{
 PrtPreForm->SynEditPrintPreview1->SynEditPrint = SynEditPrint1;
 PreparePrinting ();
 PrtPreForm->ShowWindow ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PrtSetupClick(TObject *Sender)
{
 PrtSetForm->ShowWindow ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DelayMS (int ms)
{
 TimerExpired = false;
 DelTimer->Interval = ms;
 DelTimer->Enabled = true;
 while (!TimerExpired)
 {
  Application->ProcessMessages ();
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DelTimerTimer(TObject *Sender)
{
 DelTimer->Enabled = false;
 TimerExpired = true;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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