📄 optionsdialog.pas
字号:
s: String;
Begin
If Assigned(TemplateLst) Then Begin
TemplateLst.Clear;
With lvTemplate Do For I := 0 To Items.Count - 1 Do Begin
s := Items[I].SubItems[0];
TemplateLst.Add('[' + Items[I].Caption + ' | ' + s + ']');
for j := 1 to Items[I].SubItems.Count - 1 do
TemplateLst.Add(Items[I].SubItems[j]);
End; //for
SaveTemplate(LanName, TemplateLst);
TemplateModified := False;
End; //if
End;
Procedure TdlgOption.lvTemplateChanging(Sender: TObject; Item: TListItem;
Change: TItemChange; Var AllowChange: Boolean);
Begin
If Assigned(CurrentTemplate) Then Begin
If Change = CtState Then Begin //Focus Change
If edtCode.Modified Then Begin
UpdateCode(Item);
End; //if
End; //if
End; //if
End;
Procedure TdlgOption.FormDestroy(Sender: TObject);
Begin
ClearTemplateLists;
End;
Procedure TdlgOption.btnAddTemplateClick(Sender: TObject);
Var
ListItem: TListItem;
// s: string;
Begin
dlgTemplateEdit := TdlgTemplateEdit.Create(Application);
With dlgTemplateEdit Do Try
If ShowModal = MrOk Then Begin
ListItem := lvTemplate.Items.Add;
ListItem.Caption := edtShortcut.Text;
ListItem.SubItems.Add(edtDesc.Text);
ListItem.Focused := True;
ListItem.Selected := True;
edtCode.Lines.Clear;
edtCode.Modified := False;
edtCode.SetFocus;
End;
Finally
dlgTemplateEdit.Free;
End;
End;
Procedure TdlgOption.btnEditTemplateClick(Sender: TObject);
Var
ListItem: TListItem;
Begin
dlgTemplateEdit := TdlgTemplateEdit.Create(Application);
With dlgTemplateEdit Do Try
ListItem := lvTemplate.ItemFocused;
edtShortcut.Text := ListItem.Caption;
edtDesc.Text := ListItem.SubItems[0];
If ShowModal = MrOk Then Begin
ListItem.Caption := edtShortcut.Text;
ListItem.SubItems[0] := edtDesc.Text;
ListItem.Focused := True;
ListItem.Selected := True;
//edtCode.Lines.Clear;
edtCode.Modified := False;
edtCode.SetFocus;
End;
Finally
dlgTemplateEdit.Free;
End;
// lvTemplate.ItemFocused.EditCaption;
End;
Procedure TdlgOption.btnDelTemplateClick(Sender: TObject);
Begin
lvTemplate.ItemFocused.Delete;
edtCode.Lines.Clear;
End;
Procedure TdlgOption.UpdateCode(Const Item: TListItem);
Var
// I: Integer;
s: String;
Begin
s := Item.SubItems[0];
Item.SubItems.Clear;
//The first line is a code template description.
Item.SubItems.Add(s);
Item.SubItems.Add(edtCode.Lines.Text);
If Not TemplateModified Then TemplateModified := True;
End;
Procedure TdlgOption.btnKeyEditClick(Sender: TObject);
Var
Dlg: TSynEditKeystrokesEditorForm;
Begin
Application.CreateForm(TSynEditKeystrokesEditorForm, Dlg);
Try
Dlg.Caption := Tran.TMsg('Key Editor');
Dlg.Keystrokes := edtCode.Keystrokes;
If Dlg.ShowModal = MrOk Then Begin
edtCode.Keystrokes := Dlg.Keystrokes;
UpdateKeystrokesList(edtCode);
End;
Finally
Dlg.Free;
End;
End;
Procedure TdlgOption.UpdateKeystrokesList(Edit: TSynEdit);
Var
I: Integer;
Begin
KeyCmdList.Items.BeginUpdate;
Try
KeyCmdList.Items.Clear;
For I := 0 To Edit.Keystrokes.Count - 1 Do Begin
With KeyCmdList.Items.Add Do Begin
Caption := EditorCommandToCodeString(Edit.Keystrokes[I].Command);
If Edit.Keystrokes[I].Shortcut = 0 Then
SubItems.Add('<none>')
Else
SubItems.Add(Menus.ShortCutToText(Edit.Keystrokes[I].Shortcut));
End;
End;
Finally
KeyCmdList.Items.EndUpdate;
End;
End;
Procedure TdlgOption.TimerAutoSaveTimer(Sender: TObject);
Var
Edit: TMySynEdit;
Begin
Edit := frmJediEdit.CurrentEditor;
If Assigned(Edit) And Edit.Modified And (Edit.FileName <> '') Then Begin
Edit.Lines.SaveToFile(Edit.FileName);
Edit.Modified := False;
End; //if
End;
Procedure TdlgOption.chkAutosaveClick(Sender: TObject);
Begin
If chkAutoSave.Checked Then Begin
TimerAutoSave.Enabled := False;
edtSaveSeconds.Enabled := True;
TimerAutoSave.Interval := edtSaveSeconds.AsInteger * 1000;
TimerAutoSave.Enabled := True;
End
Else Begin
TimerAutoSave.Enabled := False;
edtSaveSeconds.Enabled := False;
End;
End;
Procedure TdlgOption.btnCodeTemplateShortcutClick(Sender: TObject);
Var
s: String;
Begin
s := InputBox(tran.TMsg(sEditShortcutCaption), tran.TMsg(sInputShortCutPrompt), ShortCutToText(hkCodeTemplate.Hotkey));
hkCodeTemplate.Hotkey := TextToShortcut(s);
End;
Procedure TdlgOption.chkShowCurrentLineClick(Sender: TObject);
Begin
If chkShowCurrentLine.Checked Then
cboCurrentLineColor.Enabled := True
Else
cboCurrentLineColor.Enabled := False;
End;
Procedure TdlgOption.cboBackColorChange(Sender: TObject);
Var
i, j: Integer;
h: TSynCustomHighLighter;
Begin
With lbLanguage Do For i := 0 To Items.Count - 1 Do Begin
h := Items.Objects[i] As TSynCustomHighLighter;
For j := 0 To h.AttrCount - 1 Do
h.Attribute[j].BackGround := cboBackColor.ColorValue;
End; //for
lbElementClick(Sender); //refresh current element
End;
Procedure TdlgOption.chkBackupFileClick(Sender: TObject);
Begin
chkOverwriteBackup.Enabled := chkBackupFile.Checked;
End;
Procedure TdlgOption.btnAddToolClick(Sender: TObject);
Begin
If dlgToolProp = Nil Then
dlgToolProp := TdlgToolProp.Create(Application);
With dlgToolProp Do
If ShowModal = MrOk Then Begin
If lstTools.ItemIndex < 0 Then
lstTools.Items.Add(edtTitle.Text + '=' + edtProgram.FileName + ',' + edtParams.Text + ',' + edtWorkDir.Text)
Else
lstTools.Items.Insert(lstTools.ItemIndex, edtTitle.Text + '=' + edtProgram.FileName + ',' + edtParams.Text + ',' + edtWorkDir.Text);
ToolsLstModified := True;
End; //if
End;
Procedure TdlgOption.btnEditToolClick(Sender: TObject);
Var
i: Integer;
Begin
If lstTools.ItemIndex < 0 Then Exit;
If dlgToolProp = Nil Then
dlgToolProp := TdlgToolProp.Create(Application);
With dlgToolProp, lstTools Do Begin
edtTitle.Text := Items.Names[ItemIndex];
edtProgram.FileName := Items.Values[edtTitle.Text];
i := Pos(',', edtProgram.FileName);
If i > 0 Then Begin
edtParams.Text := Copy(edtProgram.FileName, i + 1, Length(edtProgram.FileName));
edtProgram.FileName := Copy(edtProgram.FileName, 1, i - 1);
i := Pos(',', edtParams.Text);
If i > 0 Then Begin
edtWorkDir.Text := Copy(edtParams.Text, i + 1, Length(edtParams.Text));
edtParams.Text := Copy(edtParams.Text, 1, i - 1);
End;
End;
If ShowModal = MrOk Then Begin
Items[ItemIndex] := edtTitle.Text + '=' + edtProgram.FileName + ',' + edtParams.Text + ',' + edtWorkDir.Text;
ToolsLstModified := True;
End; //if
End; //with
End;
Procedure TdlgOption.btnDelToolClick(Sender: TObject);
Begin
If lstTools.ItemIndex < 0 Then Exit;
With lstTools Do
Items.Delete(ItemIndex);
ToolsLstModified := True;
End;
Procedure TdlgOption.btnUpToolClick(Sender: TObject);
Begin
With lstTools Do If ItemIndex > 0 Then Begin
Items.Exchange(ItemIndex - 1, ItemIndex);
ToolsLstModified := True;
End;
End;
Procedure TdlgOption.btdDownToolClick(Sender: TObject);
Begin
With lstTools Do If (ItemIndex > -1) And (ItemIndex < (Items.Count - 1)) Then Begin
Items.Exchange(ItemIndex + 1, ItemIndex);
ToolsLstModified := True;
End;
End;
Procedure TdlgOption.lstToolsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
Var
s: String;
Begin
With (Control As TListBox) Do Begin
s := Items.Names[Index];
{ clear the rectangle }
Canvas.FillRect(Rect);
Rect.Left := Rect.Left + 2;
{ display the text }
DrawText(Canvas.Handle, @s[1], Length(s), Rect, DT_LEFT Or DT_SINGLELINE);
//Canvas.TextOut(Rect.Left + 2, Rect.Top, Items.Names[Index]);
End;
End;
Procedure TdlgOption.LoadToolsList;
Begin
lstTools.Items.Assign(ToolsList);
End;
Procedure TdlgOption.SaveToolsList;
Begin
ToolsList.Assign(lstTools.Items);
ToolsList.SaveToFile(ToolsListFileName);
frmJediEdit.BuildToolsMenu;
ToolsLstModified := False;
End;
Procedure TdlgOption.FormCreate(Sender: TObject);
Begin
// TimerAutoSave.Enabled := False;
tran := TvgTranslator.Create(Self);
// tran.LanguageFile := CurrentLan;
LastLan := -1;
LastAsso := -1;
TimeAMString := tran.TMsg(sTimeAMString);
TimePMString := tran.TMsg(sTimePMString);
//Week Names:
LongDayNames[1] := tran.TMsg(sMonday);
LongDayNames[2] := tran.TMsg(sTuesday);
LongDayNames[3] := tran.TMsg(sWednesday);
LongDayNames[4] := tran.TMsg(sThursday);
LongDayNames[5] := tran.TMsg(sFriday);
LongDayNames[6] := tran.TMsg(sSaturday);
LongDayNames[7] := tran.TMsg(sSunday);
End;
Procedure TdlgOption.cbTabsToSpacesClick(Sender: TObject);
Begin
edtSpaces.Enabled := cbTabsToSpaces.Checked;
End;
Procedure TdlgOption.cboExtsExit(Sender: TObject);
Begin
//search register this ext whether ext description
edtExtDesc.Text := ExtDescription(cboExts.Text);
If AnsiPos(UpperCase(cboExts.Text), UpperCase(cboExts.Items.Text)) <> 0 Then
cboExts.Items.Add(cboExts.Text);
End;
Procedure TdlgOption.lstAssoClick(Sender: TObject);
Var
i: Integer;
Begin
If (lstAsso.ItemIndex >= 0) And (LastAsso <> lstAsso.ItemIndex) Then Begin
LastAsso := lstAsso.ItemIndex;
i := AnsiPos('<', lstAsso.Items[LastAsso]);
edtExtDesc.Text := Copy(lstAsso.Items[LastAsso], i + 1, Length(lstAsso.Items[LastAsso]) - i - 1);
cboExts.Text := Copy(lstAsso.Items[LastAsso], 1, i - 1);
End;
End;
Procedure TdlgOption.btnAddExtClick(Sender: TObject);
Var
s: String;
Begin
If cboExts.Text <> '' Then Begin
AssociationExists(cboExts.Text, s);
If s <> UpperCase(Application.ExeName) Then Begin
CreateAssociation(
cboExts.Text,
Application.ExeName,
'', //Default Icon
sJeditRegKey + cboExts.Text,
edtExtDesc.Text, //File Type Description
False //not ShowInNew
);
lstAsso.Items.Add(cboExts.Text + '<' + edtExtDesc.Text + '>');
End;
End;
End;
Procedure TdlgOption.btnDelExtClick(Sender: TObject);
Var
i, j: Integer;
Ext: String;
Begin
If lstAsso.ItemIndex >= 0 Then Begin
For i := 0 To lstAsso.Items.Count - 1 Do Begin
If lstAsso.Selected[i] Then Begin
j := Pos('<', lstAsso.Items[i]);
Ext := Copy(lstAsso.Items[i], 1, j - 1);
RemoveAssociation(
sJeditRegKey + Ext,
Ext,
True, //Remove Key Name
False //UpdateSystem
);
End;
End;
End;
End;
Procedure TdlgOption.btnRestoreAllExtsClick(Sender: TObject);
Var
i, j: Integer;
Ext: String;
Begin
For i := 0 To lstAsso.Items.Count - 1 Do Begin
j := Pos('<', lstAsso.Items[i]);
Ext := Copy(lstAsso.Items[i], 1, j - 1);
RemoveAssociation(
sJeditRegKey + Ext,
Ext,
True, //Remove Key Name
False //UpdateSystem
);
End;
UnRegisterAllFileType('JediEdit');
End;
Procedure TdlgOption.btnRegAllClick(Sender: TObject);
Var
i: Integer;
s: String;
Begin
For i := 0 To cboExts.Items.Count - 1 Do Begin
AssociationExists(cboExts.Items[i], s);
If UpperCase(s) <> UpperCase(Application.ExeName) Then Begin
s := ExtDescription(cboExts.Items[i]);
CreateAssociation(
cboExts.Items[i],
Application.ExeName,
'', //Default Icon
sJeditRegKey + cboExts.Items[i],
s, //File Type Description
False //not ShowInNew
);
lstAsso.Items.Add(cboExts.Items[i] + '<' + s + '>');
End;
End;
End;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -