?? mainunit.pas
字號:
//Menu Style:
MainForm.TBXSubmenuItem6.Caption := LanguageINI.ReadString('Project', 'Menu Style', 'Menu Style');
MainForm.NormalStyleMenus1.Caption := LanguageINI.ReadString('Menu Style', 'Normal', 'Normal');
MainForm.StripesStyleMenus1.Caption := LanguageINI.ReadString('Menu Style', 'Stripes', 'Stripes');
MainForm.XPStyleMenus1.Caption := LanguageINI.ReadString('Menu Style', 'XP', 'XP');
//Mode:
MainForm.TBXSubmenuItem7.Caption := LanguageINI.ReadString('Project', 'Mode', 'Mode');
MainForm.RQ1.Caption := LanguageINI.ReadString('Mode', 'Rapid-Q', 'Rapid-Q');
MainForm.KB1.Caption := LanguageINI.ReadString('Mode', 'KoolBASIC', 'KoolBASIC');
MainForm.BPP1.Caption := LanguageINI.ReadString('Mode', 'B++', 'B++');
//View:
MainForm.TBXSubmenuItem5.Caption := LanguageINI.ReadString('Menu Bar', 'View', 'View');
MainForm.TBXItem13.Caption := LanguageINI.ReadString('View', 'Project Manager', 'Project Manager');
MainForm.TBXItem18.Caption := LanguageINI.ReadString('View', 'Object Inspector', 'Object Inspector');
MainForm.TBXItem19.Caption := LanguageINI.ReadString('View', 'Project TreeView', 'Project TreeView');
MainForm.TBXItem31.Caption := LanguageINI.ReadString('View', 'Cascade', 'Cascade');
MainForm.TBXItem32.Caption := LanguageINI.ReadString('View', 'Tile', 'Tile');
//Options:
MainForm.TBXSubmenuItem9.Caption := LanguageINI.ReadString('Menu Bar', 'Options', 'Options');
MainForm.OptionsItem.Caption := LanguageINI.ReadString('Options', 'Options', 'Options');
MainForm.LanguageItem.Caption := LanguageINI.ReadString('Options', 'Language', 'Language');
//Help:
MainForm.TBXSubmenuItem4.Caption := LanguageINI.ReadString('Menu Bar', 'Help', 'Help');
MainForm.TBXItem27.Caption := LanguageINI.ReadString('Help', 'Help', 'Help');
MainForm.TBXItem28.Caption := LanguageINI.ReadString('Help', 'About', 'About');
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Application.Title := 'BASIC IDE '+VersionNum;
MainForm.Caption := 'BASIC IDE '+VersionNum;
PageCount := 0;
Language := 'Rapid-Q';
Properties.Cells[0,0]:='Parent';
Properties.Cells[0,1]:='Top';
Properties.Cells[0,2]:='Left';
Properties.Cells[0,3]:='Height';
Properties.Cells[0,4]:='Width';
TBXSetTheme('OfficeXP');
Project := True;
// PageCount := 1;
FormCount := 0;
CodeView := 1;
CloseChildren := False;
LastTabCount := 0;
end;
Function TMainForm.GetControlClass : TControlClass;
Begin
Result:=nil;
if BImage.Down Then Result := TImage
Else if BLabel.Down Then Result:=TLabel
Else if BEdit.Down Then Result:=TEdit
Else if BGroup.Down Then Result:=TGroupBox
Else if BButton.Down Then Result:=TButton
Else if BCheckBox.Down Then Result:=TCheckBox
Else if BRadio.Down Then Result:=TRadioButton
Else if BComboBox.Down Then Result:=TComboBox
Else if BListBox.Down Then Result:=TListBox
Else if BScrollBar.Down Then Result:=TScrollBar
Else if BBitBtn.Down Then Result:=TBitBtn
Else if BSpeedButton.Down Then Result:=TSpeedButton
Else if BPanel.Down Then Result:=TPanel;
BNone1.Down:=True;
BNone2.Down:=True;
End;
procedure TMainForm.Open1Click(Sender: TObject);
var ProjectINI : TINIFile;
Items : Integer;
NumOfBASICFiles : Integer;
// FormFiles : Integer;
TempCode : TCodeSEnse;
TempNode : TTreeNode;
Count : Integer;
TempMDI : TMDIChild;
Extracted : STRING;
CurrentlyAt: INTEGER; //How many times we've looped
NewNode : TTreeNode;
// NumOfTabs : Integer;
BPCName : STRING;
begin
//Reset the array of names:
for CurrentlyAt := 0 to 255 do
begin
BASICFiles[CurrentlyAt] := '';
end;
IF OpenDialog.Execute = True then
ProjectName := OpenDialog.FileName
else
exit;
ProjectINI := TINIFile.Create(ProjectName);
ProjectName := ProjectINI.ReadString('Project', 'ProjectName', '');
FormFiles[0] := ProjectINI.ReadString('Form Designer', 'FormFile0', '');
LastTabCount := ProjectINI.ReadInteger('Code View', 'PageCount', 0);
PageCount := ProjectINI.ReadInteger('Code View', 'PageCount', 0);
NumOfBASICFiles := ProjectINI.ReadInteger('Code View', 'BASICFiles', 0);
Language := 'Rapid-Q';
//Load up the Form
RTDesigner1.LoadBCFromFile(FormFiles[0]);
if LastTabCount > Form1.Tabs.PageCount-1 then //If we need more tabs
begin
for CurrentlyAt := Form1.Tabs.PageCount to LastTabCount do
begin
TBXItem15Click(Sender);
end;
end;
//If we have to many tabs:
if LastTabCount < Form1.Tabs.PageCount-1 then //If we have to many files
for CurrentlyAt := LastTabCount+1 to Form1.Tabs.PageCount-1 do
begin
Form1.Tabs.Pages[CurrentlyAt].Destroy;
Unit1.CodeSense[CurrentlyAt].Destroy;
end;
Form1.Tabs.ActivePageIndex := 0;
PageCount := ProjectINI.ReadInteger('Code View', 'PageCount', 0);
//We need to reset PageCount because when I create new tabs, it increases
//PageCount.
//Load up the files:
for CurrentlyAt := 0 to NumOfBASICFiles do
begin
BasicFiles[CurrentlyAt] := ProjectINI.ReadString('Code View', 'BASICFile' + IntToStr(CurrentlyAt), '');
Unit1.CodeSense[CurrentlyAt].OpenFile(BASICFiles[CurrentlyAt]);
Unit1.CodeSense[CurrentlyAt].Language := 'Rapid-Q';
end; //End loading up files
//exit;;
Form1.Tabs.ActivePageIndex := 0;
//Change their title:
for CurrentlyAt := 0 to PageCount do
begin
Form1.Tabs.Pages[CurrentlyAt].Caption := ExtractFileName(BASICFiles[CurrentlyAt]);
end;
TreeView2.LoadFromFile(ChangeFileExt(ProjectName, '.PTV'));
For CurrentlyAt := 0 to Form1.Tabs.PageCount-1 do
begin
Unit1.CodeSense[CurrentlyAt].Language := Language; //aka., RapidQ
end;
Form1.Tabs.ActivePageIndex := ProjectINI.ReadInteger('CodeView', 'LastActiveTab',0);
Save1Click(Sender); //save it, resets tab titles and does other useful stuff
end;
procedure TMainForm.SaveAs1Click(Sender: TObject);
var
CurrentlyAt : Integer; //How many tabs we've covered
begin
ProjectName := '';
IF SaveProjectDialog.Execute = False then
exit;;
ProjectName := SaveProjectDialog.FileName;
FOR CurrentlyAt := 0 to Form1.Tabs.PageCount-1 do
begin
SaveBASICDialog.Title := 'Save '+Form1.Tabs.Pages[CurrentlyAt].Caption+' as...';
IF SaveBasicDialog.Execute = true then
begin
BasicFiles[CurrentlyAt] := SaveBasicDialog.FileName;
SaveBASICDialog.FileName := '';
end //End of IF
//The user clicked cancle:
else
exit;
end; //End for loop
IF SaveFormDialog.Execute = true then
FormFiles[0] := SaveFormDialog.FileName
Else
Exit;
LastTabCount := Form1.Tabs.PageCount-1;
Save1Click(Sender);
end;
procedure TMainForm.Save1Click(Sender: TObject);
var ProjectINI : TINIFile;
Items : Integer;
TempCode : TCodeSense;
Extracted : STRING; //Used for setting tab titles
CurrentlyAt: Integer; //Loop count
ToBeWritten: String; //What's to be written to the compiled file
FileHandle : Integer; //Was creating the BPC sucessful?
BPCName : STRING; //Name of the BPC FIle
SettingsINI: TINIFIle;
RecentFilesCount: Integer;
TempRecent : array[1..11] of String;
RecentFile : String;
RecentFileTB: array[1..10] of TTBXItem;
RecentTBClick: array[1..10] of TNotifyEvent;
begin
IF ProjectName = '' THEN
begin
SaveAs1Click(Sender);
exit;
end;
if PageCount = 0 then
PageCount := Form1.Tabs.PageCount-1;
Language := 'Rapid-Q'; //makes it a little eaiser to port from language to language
//just change the var name.
IF LastTabCount < Form1.Tabs.PageCount-1 then
begin
for CurrentlyAt := LastTabCount+1 to Form1.Tabs.PageCount-1 do
//We need to start counting at at LastTabCount+1 because LastTabCount is an
//old number
begin
SaveBASICDialog.Title := 'Save '+Form1.Tabs.Pages[CurrentlyAt].Caption+' as...';
IF SaveBASICDialog.Execute then
begin
BASICFiles[CurrentlyAt] := SaveBASICDialog.FileName;
SaveBASICDialog.FileName := '';
end
else
exit;;
end;
end;
LastActiveTab := Form1.Tabs.ActivePageIndex; //We don't want to forget...
//Write the INI (Project) File:
ProjectINI := TINIFile.Create(ProjectName);
ProjectINI.WriteString('Project', 'ProjectName', ProjectName);
//Language the program is written in
//See above for comments about NumOfTabs. It might also be used for creating
//tabs.
ProjectINI.WriteInteger('Code View', 'PageCount', PageCount);
ProjectINI.WriteString('Form Designer', 'FormFile0', FormFiles[0]);
ProjectINI.WriteInteger('Form Designer', 'FormFiles', 0); //OK, OK, this is lame
ProjectINI.WriteInteger('Code View', 'LastActiveTab', LastActiveTab); //bring it up next time
//Save the Form File:
RTDesigner1.SaveBCToFile(FormFiles[0]);
//Save the TreeView. Yep! :-)
TreeView2.SaveToFile(ChangeFileExt(ProjectName, '.PTV'));
//Save the BASIC Files:
for CurrentlyAt := 0 to PageCount do
begin
Unit1.CodeSense[CurrentlyAt].SaveFile(BASICFiles[CurrentlyAt], False);
ProjectINI.WriteString('Code View', 'BASICFile'+IntToStr(CurrentlyAt), BASICFiles[CurrentlyAt]);
end;
//Change the titles of the BASIC Files to the tabs:
for CurrentlyAt := 0 to PageCount do
begin
Form1.Tabs.Pages[CurrentlyAt].Caption := ExtractFileName(BASICFiles[CurrentlyAt]);
end;
//After all the work is done, write down the number of tabs:
LastTabCount := Form1.Tabs.PageCount-1;
ProjectINI.WriteInteger('Code View', 'BASICFiles', LastTabCount);
SettingsINI := TINIFile.Create('BASICIDE.INI');
RecentFilesCount := SettingsINI.ReadInteger('RecentFiles', 'FileCount', 0);
{for CurrentlyAt := 1 to 10 do
begin
TempRecent[CurrentlyAt] := SettingsINI.ReadString('RecentFiles', 'File'+IntToStr(CurrentlyAt), '');
SettingsINI.WriteString('RecentFiles','File'+IntToStr(CurrentlyAt), TempRecent[CurrentlyAt]);
SettingsINI.DeleteKey('Recent','File10');
end;
SettingsINI.WriteString('RecentFiles', 'File1', ProjectName);
//Redo the entries:
RecentFilesMenu.Clear;
//load recent menu:
for CurrentlyAt := 1 to 10 do
begin
RecentFile := SettingsINI.ReadString('RecentFiles','File'+IntToStr(CurrentlyAt), '');
IF RecentFile = '' then //at the end of recent files
exit;;
RecentNamePublic := RecentFile; //because we can't pass params w/ a TNotifyEvent
RecentFileTB[CurrentlyAt] := TTBXItem.Create(RecentFilesMenu);
RecentFileTB[CurrentlyAt].Caption := RecentFile;
RecentFilesMenu.Add(RecentFileTB[CurrentlyAt]);
RecentTBClick[CurrentlyAt] := LoadRecentProject;
RecentFileTB[CurrentlyAt].OnClick := RecentTBClick[CurrentlyAt];
end;}
//Clean up:
ProjectINI.Free;
end;
procedure TMainForm.New1Click(Sender: TObject);
var aChild : TMDIChild;
begin
{
Close1Click(Sender);
ShowWindow(Form1.Handle, SW_SHOW);
aChild := TMDIChild.Create(Application);
RTDesigner1.BaseControl:=aChild;
aChild.FileName:='';
MainForm.Save1.Enabled := True;
MainForm.SaveAs1.Enabled := True;
MinForm.TBXItem3.Enabled := True;
Compile1.Enabled := True;
CompileRun1.Enabled := True;
TreeView2.Items.Clear;
TreeView2.Items.Add(TreeView2.TopItem, 'BASIC Project');
TreeView2.Items.AddChild(TreeView2.Items[0], 'Code View');
TreeView2.Select(TreeView2.Items.ADdChildObjectFirst(TreeView2.Items.AddChild(TreeView2.TopItem, 'Form Designer'), 'Form1', TObject(aChild)));
TreeView2.Items[1].Selected := True;
ComboBox1.AddItem(aChild.Caption, aChild);
SelectAt(FindString(aChild.Caption));
Properties.Cells[1,0]:= 'None';
Properties.Cells[1,1]:= IntToStr(ActiveMDIChild.Top);
Properties.Cells[1,2]:= IntToStr(ActiveMDIChild.Left);
Properties.Cells[1,3]:= IntToStr(ActiveMDIChild.Height);
Properties.Cells[1,4]:= IntToStr(ActiveMDIChild.Width);
Unit1.CodeSense[0].Text := '''Welcome to the KoolB-IDE, the multi-BASIC IDE';
// x(Sender, TControl(CreateWindowEx(0, PChar('button'), PChar('Test'), WS_VISIBLE Or WS_CHILD, 5, 5, 50, 25, aChild.Handle, HMENU(1001), HInstance, nil)));
// MakeButton(aChild.Handle, HInstance);
}
IF ActiveMDIChild.Handle = Form1.Handle then //If the Code Editor is active
TBXItem15Click(Sender) //Make a new tab
else //the Form Designer must be active
TBXItem17Click(Sender); //make a new form
end;
procedure TMainForm.Close1Click(Sender: TObject);
var NumberOfChildren : Integer;
Count : Integer;
TotalItems : Integer;
Modified : Bool;
begin
For Count := 0 to Form1.Tabs.PageCount-1 do
begin
IF Unit1.CodeSense[Count].Modified = True then
Modified := True;
IF Modified = True then
IF(MessageDlg('One or more files had been modified since last save. Do you want to save the current project before closing?', mtWarning, [mbYes, mbNo], 0) = mrYes) THEN
Save1Click(Sender);
break;
end;
{ IF Form1.CodeSense1.Modified = TRUE THEN
IF(MessageDlg('Do you want to save before closing project?', mtWarning, [mbYes, mbNo], 0) = mrYes) THEN
Save1Click(Sender);}
// BASICFile := '';
RTDesigner1.BaseControl := nil;
//Form1.CodeSense1.Text := '';
For Count := 0 to Form1.Tabs.PageCount-1 do
Unit1.CodeSense[Count].Text := '';
CloseChildren := True;
TotalItems := TreeView2.Items.Count-1;
Count := 0;
IF Form1.Tabs.PageCount > 1 then
For Count := 2 to Form1.Tabs.PageCount do
begin
Unit1.CodeSense[Count-1].Destroy;
Form1.Tabs.Pages[Count-1].Destroy;
end;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -