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

📄 optionsdialog.pas

📁 此软件支持多文档打开
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  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 + -