📄 mainform.cpp
字号:
{
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 + -