private
public
//Вывод каталога в TreeView1
procedure FilePathToTreeNode(aTreeView: TTreeView; aRoot: TTreeNode;
Path: string; Recurse: boolean);
//Запись в INI
procedure INIWrite(FileName: string; Section: string; Key: string; Param: string);
//Чтение из INI
function INIRead(FileName: string; Section: string; Key: string;
Param: string): string;
//Создание вкладка
function NewTab(TabCaption: string): boolean;
//Команды выполнения для компонента TSynEdit и PageControl1
procedure SynEditComadeTab(Comade, Param: string);
//SynFacilComplet
procedure rKeyUp(Sender: TObject; var Key: word; Shift: TShiftState);
//SynFacilComplet
procedure rUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
//Загрузить компоненты из катологка
procedure LoadComponent();
procedure rToolButtonClick(Sender: TObject);
end;
var
Form1: TForm1;
IniF: TINIFile;// Класс для работы с INI-файлами
{Создание вкладки с TSynEdit}
hlt: TSynFacilComplet;
Tab: TTabSheet;
rSynEdit: TSynEdit;
{TreeView Добовляем интемы при открытие файла}
TreeViewObject: TStringList;
i: integer;
ProjectDir: string;
implementation
{$R *.lfm}
{ TForm1 }
//Откроем проект через диалог - Вызываем функцию Вывод каталога в TreeView1
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
MenuItem12.Click;
end;
//Сохранить
procedure TForm1.ToolButton3Click(Sender: TObject);
begin
MenuItem13.Click;
end;
procedure TForm1.ToolButton5Click(Sender: TObject);
var
CompilT: CompilThread;
begin
if GroupBox1.Visible = False then
begin
GroupBox1.Visible := True;
MenuItem10.Checked := True;
end;
Form1.SynEdit1.Color := clWhite;
MenuItem12.Enabled := False;
CompilT := CompilThread.Create(True);
CompilT.FreeOnTerminate := True;
CompilT.Priority := tpnormal;
CompilT.Start;
end;
//Отмена
procedure TForm1.ToolButton7Click(Sender: TObject);
begin
SynEditComadeTab('Undo', '');
end;
//Вернуть
procedure TForm1.ToolButton8Click(Sender: TObject);
begin
SynEditComadeTab('Redo', '');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//Загрузим настроки из INI приложения при старте программы
Form1.Width := StrToInt(INIRead('Otions.ini', 'Form', 'Form1.Width',
IntToStr(Form1.Width)));
Form1.Height := StrToInt(INIRead('Otions.ini', 'Form', 'Form1.Height',
IntToStr(Form1.Height)));
Form1.Left := StrToInt(INIRead('Otions.ini', 'Form', 'Form1.Left',
IntToStr(Form1.Left)));
Form1.Top := StrToInt(INIRead('Otions.ini', 'Form', 'Form1.Top', IntToStr(Form1.Top)));
{Свойста проекта}
//Запускать ли игру Fals True
ValueListEditor1.Strings[0] := ('Запускать L.exe=True');
// ValueListEditor1.ItemProps[0].EditStyle:= esPickList;
ValueListEditor1.ItemProps[0].PickList.Add('True');
ValueListEditor1.ItemProps[0].PickList.Add('False');
//Путь до игры
ValueListEditor1.ItemProps[1].EditStyle := esEllipsis;
ValueListEditor1.ItemProps[1].ReadOnly := True;
//Загрузить настройки проекта при старте
ValueListEditor1.Strings[1] := ('Путь к L.exe=');
ValueListEditor1.Refresh;
ValueListEditor1.AutoSizeColumn(0);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
hlt.UnSelectEditor; //release editor (only necessary if we are to call to SelectEditor(), again)
hlt.Free; //destroy the highlighter
end;
procedure TForm1.FormShow(Sender: TObject);
begin
LoadComponent(); // загрузка компонентов
end;
//Откроем проект через диалог - Вызываем функцию Вывод каталога в TreeView1
procedure TForm1.MenuItem12Click(Sender: TObject);
var
g: integer;
begin
if OpenDialog1.Execute then
// if ExtractFileName(OpenDialog1.FileName) = 'Projects.luse' then
begin
TreeViewObject := TStringList.Create;
for i := 0 to TreeViewObject.Count - 1 do
begin
if TreeView1.Items.Item[i].Data <> nil then
Dispose(PString(TreeView1.Items.Item[i].Data));
end;
TreeView1.Items.Clear;
FilePathToTreeNode(TreeView1, nil, ExtractFileDir(OpenDialog1.FileName) +
'\', True);
with TStringList.Create do
begin
LoadFromFile(OpenDialog1.FileName);
for g := 0 to Count - 1 do
ValueListEditor1.Cells[1, g + 1] := Strings[g];
end;
ProjectDir := ExtractFileDir(OpenDialog1.FileName);
end;
end;
//Сохранить в файл Активный SynEdit
procedure TForm1.MenuItem13Click(Sender: TObject);
begin
SynEditComadeTab('SaveFile', '');
end;
//Закрыть вкладку
procedure TForm1.MenuItem16Click(Sender: TObject);
begin
SynEditComadeTab('CloseTab', '');
end;
//Удалить файл
procedure TForm1.MenuItem21Click(Sender: TObject);
begin
DeleteFile(string(TreeView1.Selected.Data));
TreeView1.Selected.Free;
end;
//Копировать
procedure TForm1.MenuItem22Click(Sender: TObject);
begin
SynEditComadeTab('Copy', '');
end;
//Вставить
procedure TForm1.MenuItem23Click(Sender: TObject);
begin
SynEditComadeTab('Paste', '');
end;
//Выделить все
procedure TForm1.MenuItem24Click(Sender: TObject);
begin
SynEditComadeTab('SelectAll', '');
end;
//Удалить выделеное
procedure TForm1.MenuItem25Click(Sender: TObject);
begin
SynEditComadeTab('ClearSelection', '');
end;
procedure TForm1.MenuItem26Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.PageControl1Changing(Sender: TObject; var AllowChange: Boolean
);
begin
//(PageControl1.ActivePage.FindComponent('syed' +
// IntToStr(PageControl1.ActivePageIndex + 1)) as TSynEdit).SetFocus;
end;
procedure TForm1.PageControl1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer);
var
SelectPoint: TPoint;
begin
//Смысл в том, что хотим выделить таб, при нажатии на нем правой клавишей мыши (вызов меню)
SelectPoint.x := X;
SelectPoint.y := Y;
PageControl1.ActivePageIndex := PageControl1.IndexOfPageAt(SelectPoint);
end;
procedure TForm1.SynEdit1DblClick(Sender: TObject);
begin
if (Trim(ExtractWord(1, SynEdit1.LineText, ['|'])) = 'Просмотр') then
begin
if PageControl1.PageCount > 0 then
for i:=0 to PageControl1.PageCount-1 do
if Trim(ExtractWord(2, SynEdit1.LineText, ['|', '('])) = Trim(PageControl1.Page[i].Hint) then
begin
PageControl1.ActivePageIndex:=i;
SynEditComadeTab('LineIndex', Trim(ExtractWord(2, SynEdit1.LineText, ['(', ')'])));
exit;
end;
if (NewTab(ExtractFileName(Trim(ExtractWord(2, SynEdit1.LineText, ['|', '('])))) =
True) then
begin
// ShowMessage(Trim(ExtractWord(2, SynEdit1.LineText, ['|','(']))); //Путь до файла
// ShowMessage(Trim(ExtractWord(2, SynEdit1.LineText, ['(',')']))); //Номер строки
SynEditComadeTab('Hint', Trim(ExtractWord(2, SynEdit1.LineText, ['|', '('])));
SynEditComadeTab('LoadFile', Trim(ExtractWord(2, SynEdit1.LineText, ['|', '('])));
SynEditComadeTab('LineIndex', Trim(ExtractWord(2, SynEdit1.LineText, ['(', ')'])));
end;
end;
end;
// Расцветка лога
procedure TForm1.SynEdit1SpecialLineColors(Sender: TObject; Line: integer;
var Special: boolean; var FG, BG: TColor);
begin
if ((line mod 1) = 0) and (SynEdit1.Lines[0] = 'Готово!') then
begin
Special := True;
BG := $0072F968;
end;
if ((line mod 1) = 0) and (SynEdit1.Lines[0] =
'Компиляция проекта: ...') then
begin
Special := True;
BG := clYellow;
end;
if ((line mod 1) = 0) and (SynEdit1.Lines[0] = 'Запуск игры...') then
begin
Special := True;
BG := clAqua;
end;
if ((line mod 1) = 0) and (SynEdit1.Lines[0] =
'Файл скомпилирован но путь к игре не найден!')
then
begin
Special := True;
BG := $0072F968;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
//Сохранить настроки в INI приложения при закрытие программы
INIWrite('Otions.ini', 'Form', 'Form1.Width', IntToStr(Form1.Width));
INIWrite('Otions.ini', 'Form', 'Form1.Height', IntToStr(Form1.Height));
INIWrite('Otions.ini', 'Form', 'Form1.Left', IntToStr(Form1.Left));
INIWrite('Otions.ini', 'Form', 'Form1.Top', IntToStr(Form1.Top));
end;
procedure TForm1.TreeView1DblClick(Sender: TObject);
var
i:integer;
begin
// ShowMessage(string(TreeView1.Selected.Data));
{При клике на элемент в TreeView1 загрузить файл в таб}
if PageControl1.PageCount > 0 then
for i:=0 to PageControl1.PageCount-1 do
if string(TreeView1.Selected.Data) = PageControl1.Page[i].Hint then
begin
PageControl1.ActivePageIndex:=i;
exit;
end;
if (ExtractFileExt(string(TreeView1.Selected.Data)) > '') and
(NewTab(ExtractFileName(string(TreeView1.Selected.Data))) = True) then
begin
SynEditComadeTab('Hint', string(TreeView1.Selected.Data));
SynEditComadeTab('LoadFile', string(TreeView1.Selected.Data));
end;
end;
//Указать путь к игре в редакторе проета
procedure TForm1.ValueListEditor1ButtonClick(Sender: TObject; aCol, aRow: integer);
begin
if aCol = 1 then
if OpenDialog1.Execute then
if ExtractFileName(OpenDialog1.FileName) = 'L.exe' then
ValueListEditor1.Strings[1] := ('Путь к L.exe=' + OpenDialog1.FileName);
end;
//Вывод каталога в TreeView1 Пример:
//FilePathToTreeNode(TreeView1, nil, 'Папка' + '\', True);
procedure TForm1.FilePathToTreeNode(aTreeView: TTreeView; aRoot: TTreeNode;
Path: string; Recurse: boolean);
var
NewNode: TTreeNode;
SRec: TSearchRec;
begin
if FindFirst(Path + '*.*', SysUtils.faAnyFile, SRec) = 0 then
repeat
if (sRec.Name = '.') or (sRec.Name = '..') then
Continue;
// if SRec.Name <> 'Projects.luse' then
//Не отоброжаем фай конфигурации
begin
TreeViewObject.Add(PChar(Path + srec.Name));
NewNode := aTreeView.Items.AddChildObject(aRoot, SRec.Name,
PChar(TreeViewObject.Strings[i]));
Inc(i);
end;
if Recurse and ((srec.Attr and SysUtils.faDirectory) <> 0) then
begin
FilePathToTreeNode(aTreeView, NewNode, Path + srec.Name + '\', True);
//папка
NewNode.ImageIndex := 1108;
NewNode.SelectedIndex := 1108;
end
else
begin
// ShowMessage(PChar(NewNode.Data));
//Файл
NewNode.ImageIndex := 804;
NewNode.SelectedIndex := 785;
end;
until FindNext(SRec) <> 0;
FindClose(SRec);
end;
//Запись в INI Пример:
//INIWrite('Otions.ini','Section', 'Key','тест');
procedure TForm1.INIWrite(FileName: string; Section: string; Key: string;
Param: string);
begin
if (FileExists(FileName)) then
begin
Inif := TINIFile.Create(FileName);
INiF.WriteString(Section, Key, Param);
end;
end;
//Чтение из INI Пример:
//INIRead('Otions.ini','Section', 'Key','тест');
function TForm1.INIRead(FileName: string; Section: string; Key: string;
Param: string): string;
begin
if (FileExists(FileName)) then
begin
Inif := TINIFile.Create(FileName);
Result := INiF.ReadString(Section, Key, Param);
end;
end;
//Создание вкладки
function TForm1.NewTab(TabCaption: string): boolean;
begin
Tab := TTabSheet.Create(Self);
Tab.PageControl := PageControl1;
Tab.Caption := TabCaption;
Tab.PageControl.ActivePage := Tab;
Tab.Visible := False;
rSynEdit := TSynEdit.Create(Tab);
rSynEdit.Parent := Tab;
rSynEdit.Align := alClient;
rSynEdit.OnUTF8KeyPress := @rUTF8KeyPress;
rSynEdit.OnKeyUp := @rKeyUp;
rSynEdit.RightEdge := 0;
rSynEdit.BorderStyle := bsNone;
rSynEdit.Color := clWhite;
rSynEdit.Font := SynEdit1.Font;
rSynEdit.MouseOptions := SynEdit1.MouseOptions;
rSynEdit.Options := SynEdit1.Options;
rSynEdit.Options2 := SynEdit1.Options2;
rSynEdit.Text := 'class NameClass' + IntToStr(PageControl1.PageCount) +
' extends UICommonAPI;' + #13#13#13 + 'defaultproperties{}';
rSynEdit.Name := 'syed' + IntToStr(PageControl1.PageCount);
rSynEdit.PopupMenu := PopupMenu3;
SynPluginSyncroEdit1.Editor := rSynEdit;
//configure highlighter
hlt := TSynFacilComplet.Create(Self); //my highlighter
rSynEdit.Highlighter := hlt; //optional if we are going to use SelectEditor()
hlt.LoadFromFile('UnrealScript.xml'); //load syntax
hlt.SelectEditor(rSynEdit); //assign to editor
hlt.IconList := ImageList1;
Result := True;
Tab.Visible := True;
end;
//Команды выполнения для компонента TSynEdit и PageControl1
procedure TForm1.SynEditComadeTab(Comade, Param: string);
var
syed: TSynEdit;
x1, x2: integer;
begin
syed := (PageControl1.ActivePage.FindComponent('syed' +
IntToStr(PageControl1.ActivePageIndex + 1)) as TSynEdit);
case Comade of
'Hint': PageControl1.ActivePage.Hint := Param; //Тут хранится путь к файлу
'Text': syed.Text := Param; //Загрузим текст
//Загрузим текст из файла
'LoadFile': syed.Lines.LoadFromFile(UTF8ToSys(Param));
//Сохраним текст в файл
'SaveFile': syed.Lines.SaveToFile(UTF8ToSys(PageControl1.ActivePage.Hint));
//Вставить текст в позицию курсора
'SelText': syed.SelText := Param;
//Перейти на Index строки
'LineIndex':
begin
syed.TopLine := StrToInt(Param);
//ShowMessage(Trim(syed.Lines[StrToInt(Param) - 1]));
x1 := PosEx(Trim(syed.Lines[StrToInt(Param)]), Trim(syed.Text));
x2 := PosEx(Trim(syed.Lines[StrToInt(Param)]), Trim(syed.Text)) +
length(Trim(syed.Lines[StrToInt(Param)]));
syed.SelStart := x1;
syed.SelEnd := x2;
end;
//Копировать
'Copy': syed.CopyToClipboard;
//Вставить
'Paste': syed.PasteFromClipboard;
//Вырезать
'Cut': syed.CutToClipboard;
//Выделить все
'SelectAll': syed.SelectAll;
//Удалить выделеное
'ClearSelection': syed.ClearSelection;
//Отмена
'Undo': syed.Undo;
//Вернуть
'Redo': syed.Redo;
////Проверить существует ли TAB с таким файлом
//'EatTab': for PageControl1.TabIndex-1;
//Закрыть активную вкладку
'CloseTab': PageControl1.ActivePage.Free;
else
ShowMessage(Comade + 'Comade Не известнена!');
end;
end;
//SynFacilComplet
procedure TForm1.rKeyUp(Sender: TObject; var Key: word; Shift: TShiftState);
begin
sleep(10);
hlt.KeyUp(Sender, Key, Shift);
end;
//SynFacilComplet
procedure TForm1.rUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
begin
hlt.UTF8KeyPress(Sender, UTF8Key);
end;
//Загрузить компоненты
procedure TForm1.LoadComponent();
var
Pic: TPortableNetworkGraphic;
i: integer;
PascalFiles, FilePathComponent: TStringList;
begin
PascalFiles := TStringList.Create;
FilePathComponent := TStringList.Create;
try
FindAllFiles(PascalFiles, 'components', '*.lc', True);
//ShowMessage(PascalFiles.Text);
// ... тут читаем файл в StringList:
for i := 0 to PascalFiles.Count - 1 do
begin
ToolBar2.ButtonList.Add(TToolButton.Create(Self));
//Ico:= TIcon.Create;
FilePathComponent.LoadFromFile(PascalFiles.Strings[i]);
Pic := TPortableNetworkGraphic.Create;
if FileExists(ExtractFilePath(PascalFiles.Strings[i]) + 'icon.png') = True then
begin
Pic.LoadFromFile(ExtractFilePath(PascalFiles.Strings[i]) + 'icon.png');
ImageList2.Add(Pic, nil);
//ShowMessage(ExtractFilePath(PascalFiles.Strings[i]) + '\icon.png');
ToolBar2.Buttons[ToolBar2.ButtonCount - 1].Hint := FilePathComponent.Strings[0];
ToolBar2.Buttons[ToolBar2.ButtonCount - 1].Caption := PascalFiles.Strings[i];
ToolBar2.Buttons[ToolBar2.ButtonCount - 1].Parent := ToolBar2;
ToolBar2.Images := ImageList2;
ToolBar2.Buttons[ToolBar2.ButtonCount - 1].ImageIndex := i;
ToolBar2.Buttons[ToolBar2.ButtonCount - 1].OnClick := @rToolButtonClick;
end;
end;
finally
PascalFiles.Free;
FilePathComponent.Free;
Pic.Free;
end;
end;
procedure TForm1.rToolButtonClick(Sender: TObject);
var
FilePathComponent: TStringList;
begin
if PageControl1.ControlCount <> 0 then
begin
FilePathComponent := TStringList.Create;
FilePathComponent.LoadFromFile((Sender as TToolButton).Caption);
FilePathComponent.Strings[0] := '';
SynEditComadeTab('SelText', FilePathComponent.Text);
FilePathComponent.Free;
end;
end;
end.