| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- {Unidad con frame para almacenar y configurar las propiedades de un editor
- SynEdit. Las propiedades que se manejan son con respecto al coloreado.
- El frame definido, está pensado para usarse en una ventana de configuración.
- También incluye una lista para almacenamiento de los archivos recientes
- Por Tito Hinostroza 23/11/2013
- }
- unit FrameCfgSynEdit;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, Forms, StdCtrls, Dialogs, SynEdit, Graphics, Spin, LCLType,
- Globales, MiConfigXML, MiConfigBasic, SynEditMarkupHighAll, SynEditMarkup,
- SynPluginSyncroEdit, SynPluginMultiCaret;
- type
- { TfraCfgSynEdit }
- TfraCfgSynEdit = class(TFrame)
- cbutFonPan: TColorButton;
- cbutResPalCFon: TColorButton;
- cbutResPalCTxt: TColorButton;
- cbutResPalCBor: TColorButton;
- cbutTxtPan: TColorButton;
- chkFullWord: TCheckBox;
- chkHighCurWord: TCheckBox;
- chkVerBarDesH: TCheckBox;
- chkVerBarDesV: TCheckBox;
- chkVerPanVer: TCheckBox;
- chkHighCurLin: TCheckBox;
- cbutLinAct: TColorButton;
- chkVerNumLin: TCheckBox;
- chkVerMarPle: TCheckBox;
- cbutBackCol: TColorButton;
- cbutTextCol: TColorButton;
- cmbTipoLetra: TComboBox;
- GroupBox1: TGroupBox;
- GroupBox2: TGroupBox;
- Label1: TLabel;
- Label10: TLabel;
- Label11: TLabel;
- Label12: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label6: TLabel;
- Label7: TLabel;
- Label8: TLabel;
- Label9: TLabel;
- spTam: TSpinEdit;
- procedure chkHighCurLinChange(Sender: TObject);
- procedure chkHighCurWordChange(Sender: TObject);
- procedure chkVerPanVerChange(Sender: TObject);
- public
- //Configuración del editor
- TipLet : string; //Tipo de letra
- TamLet : integer; //Tamaño de letra
- showVertSB : boolean; //Mostrar barra de desplazamiento vertical.
- showHoriSB : boolean; //Mostrar barra de desplazamiento horizontal.
- MarLinAct : boolean; //marcar línea actual
- Autoindent : boolean; //Autotabulación
- ResPalAct : boolean; //Resaltar palabra actual
- ResPalCFon : TColor; //Color de fondo de la palabra actual
- ResPalCTxt : TColor; //Color de texto de la palabra actual
- ResPalCBor : TColor; //Color de borde de la palabra actual
- ResPalFWord: Boolean; //Activa "palabra completa"
- cTxtNor : TColor; //color de texto normal
- cFonEdi : TColor; //Color de fondo del control de edición
- cFonSel : TColor; //color del fondo de la selección
- cTxtSel : TColor; //color del texto de la selección
- cLinAct : TColor; //color de la línea actual
- //Panel vertical
- VerPanVer : boolean; //ver pánel vertical
- VerNumLin : boolean; //ver número de línea
- VerMarPle : boolean; //ver marcas de plegado
- cFonPan : TColor; //color de fondo del panel vertical
- cTxtPan : TColor; //color de texto del panel vertical
- ArcRecientes: TStringList; //Lista de archivos recientes
- procedure PropToWindow;
- procedure Iniciar(section: string; cfgFile: TMiConfigXML; colFonDef: TColor =
- clWhite); //Inicia el frame
- procedure ConfigEditor(ed: TSynEdit);
- public
- //Genera constructor y destructor
- constructor Create(AOwner: TComponent) ; override;
- destructor Destroy; override;
- end;
- implementation
- {$R *.lfm}
- //const
- // MAX_ARC_REC = 5; //si se cambia, actualizar ActualMenusReciente()
- procedure TfraCfgSynEdit.Iniciar(section: string; cfgFile: TMiConfigXML;
- colFonDef: TColor = clWhite);
- var
- s: TParElem;
- begin
- //Asigna referencia necesarias
- //Crea las relaciones variable-control
- s:=cfgFile.Asoc_Str(section+ '/TipLet' , @TipLet, cmbTipoLetra, 'Courier New');
- s:=cfgFile.Asoc_Int(section+ '/TamLet' , @TamLet, spTam, 10);
- s:=cfgFile.Asoc_Bol(section+ '/showVertSB', @showVertSB, chkVerBarDesV, true);
- s:=cfgFile.Asoc_Bol(section+ '/showHoriSB', @showHoriSB, chkVerBarDesH, true);
- s:=cfgFile.Asoc_TCol(section+ '/cTxtNor', @cTxtNor, cbutTextCol, clBlack);
- s.categ := 1; //marca como propiedad de tipo "Tema"
- s:=cfgFile.Asoc_TCol(section+ '/cFonEdi', @cFonEdi, cbutBackCol, colFonDef);
- s.categ := 1; //marca como propiedad de tipo "Tema"
- s:=cfgFile.Asoc_TCol(section+ '/cLinAct', @cLinAct, cbutLinAct, clYellow);
- s.categ := 1; //marca como propiedad de tipo "Tema"
- s:=cfgFile.Asoc_Bol(section+ '/MarLinAct' , @MarLinAct , chkHighCurLin , false);
- s:=cfgFile.Asoc_Bol(section+ '/ResPalCur' , @ResPalAct , chkHighCurWord , true);
- s.categ := 1;
- s:=cfgFile.Asoc_TCol(section+ '/ResPalCFon',@ResPalCFon, cbutResPalCFon, clSkyBlue);
- s.categ := 1;
- s:=cfgFile.Asoc_TCol(section+ '/ResPalCTxt',@ResPalCTxt, cbutResPalCTxt, clBlack);
- s.categ := 1;
- s:=cfgFile.Asoc_TCol(section+ '/ResPalCBor',@ResPalCBor, cbutResPalCBor, clSkyBlue);
- s.categ := 1;
- s:=cfgFile.Asoc_Bol(section+ '/ResPalFWord',@ResPalFWord, chkFullWord, false);
- s:=cfgFile.Asoc_Bol(section+ '/VerPanVer', @VerPanVer, chkVerPanVer, true);
- s:=cfgFile.Asoc_Bol(section+ '/VerNumLin', @VerNumLin, chkVerNumLin, false);
- s:=cfgFile.Asoc_Bol(section+ '/VerMarPle', @VerMarPle, chkVerMarPle, true);
- s:=cfgFile.Asoc_TCol(section+ '/cFonPan' , @cFonPan , cbutFonPan , clWhite);
- s.categ := 1; //marca como propiedad de tipo "Tema"
- s:=cfgFile.Asoc_TCol(section+ '/cTxtPan' , @cTxtPan , cbutTxtPan , clBlack);
- s.categ := 1; //marca como propiedad de tipo "Tema"
- cfgFile.Asoc_StrList(section+ '/recient', @ArcRecientes);
- end;
- procedure TfraCfgSynEdit.chkVerPanVerChange(Sender: TObject);
- begin
- chkVerNumLin.Enabled:=chkVerPanVer.Checked;
- chkVerMarPle.Enabled:=chkVerPanVer.Checked;
- cbutFonPan.Enabled:=chkVerPanVer.Checked;
- cbutTxtPan.Enabled:=chkVerPanVer.Checked;
- label2.Enabled:=chkVerPanVer.Checked;
- label3.Enabled:=chkVerPanVer.Checked;
- end;
- procedure TfraCfgSynEdit.chkHighCurLinChange(Sender: TObject);
- begin
- label1.Enabled:=chkHighCurLin.Checked;
- cbutLinAct.Enabled:=chkHighCurLin.Checked;
- end;
- procedure TfraCfgSynEdit.chkHighCurWordChange(Sender: TObject);
- begin
- label10.Enabled:=chkHighCurWord.Checked;
- cbutResPalCFon.Enabled:=chkHighCurWord.Checked;
- end;
- procedure TfraCfgSynEdit.PropToWindow;
- begin
- inherited;
- chkHighCurLinChange(self); //para actualizar
- chkVerPanVerChange(self); //para actualizar
- end;
- constructor TfraCfgSynEdit.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- ArcRecientes := TStringList.Create; //crea lista
- cmbTipoLetra.Items.Clear;
- cmbTipoLetra.Items.Add('Courier New');
- cmbTipoLetra.Items.Add('Fixedsys');
- cmbTipoLetra.Items.Add('Lucida Console');
- cmbTipoLetra.Items.Add('Consolas');
- cmbTipoLetra.Items.Add('Cambria');
- end;
- destructor TfraCfgSynEdit.Destroy;
- begin
- FreeAndNil(ArcRecientes);
- inherited Destroy;
- end;
- procedure TfraCfgSynEdit.ConfigEditor(ed: TSynEdit);
- {Configura el editor con las propiedades almacenadas}
- var
- marc: TSynEditMarkup;
- fSynchro: TSynPluginSyncroEdit;
- fMultiCaret: TSynPluginMultiCaret;
- begin
- if ed = nil then exit; //protección
- //Tipo de texto
- if TipLet <> '' then ed.Font.Name:=TipLet;
- if (TamLet > 6) and (TamLet < 32) then ed.Font.Size:=Round(TamLet);
- //Colores
- ed.Font.Color:=cTxtNor; //color de texto normal
- ed.Color:=cFonEdi; //color de fondo
- //Resaltado de línea actual
- if MarLinAct then
- ed.LineHighlightColor.Background:=cLinAct
- else
- ed.LineHighlightColor.Background:=clNone;
- //Configura panel vertical
- ed.Gutter.Visible:=VerPanVer; //muestra panel vertical
- ed.Gutter.Parts[1].Visible:=VerNumLin; //Número de línea
- if ed.Gutter.Parts.Count>4 then
- ed.Gutter.Parts[4].Visible:=VerMarPle; //marcas de plegado
- ed.Gutter.Color:=cFonPan; //color de fondo del panel
- ed.Gutter.Parts[1].MarkupInfo.Background:=cFonPan; //fondo del núemro de línea
- ed.Gutter.Parts[1].MarkupInfo.Foreground:=cTxtPan; //texto del núemro de línea
- if showVertSB and showHoriSB then //barras de desplazamiento
- ed.ScrollBars:= ssBoth
- else if showVertSB and not showHoriSB then
- ed.ScrollBars:= ssVertical
- else if not showVertSB and showHoriSB then
- ed.ScrollBars:= ssHorizontal
- else
- ed.ScrollBars := ssNone;
- ////////Configura el resaltado de la palabra actual //////////
- marc := ed.MarkupByClass[TSynEditMarkupHighlightAllCaret];
- if marc<>nil then begin //hay marcador
- marc.Enabled:=ResPalAct; //configura
- marc.MarkupInfo.Background := ResPalCFon;
- marc.MarkupInfo.FrameColor := ResPalCBor;
- marc.MarkupInfo.Foreground := ResPalCTxt;
- TSynEditMarkupHighlightAllCaret(marc).FullWord := ResPalFWord;
- end;
- ///////fija color de delimitadores () {} [] ///////////
- ed.BracketMatchColor.Foreground := clRed;
- //Crea un "plugin" de edición síncrona
- fSynchro := TSynPluginSyncroEdit.Create(self);
- fSynchro.Editor := ed;
- //Configura múltiples cursores
- fMultiCaret := TSynPluginMultiCaret.Create(self);
- with fMultiCaret do begin
- Editor := ed;
- with KeyStrokes do begin
- Add.Command := ecPluginMultiCaretSetCaret;
- Add.Key := VK_INSERT;
- Add.Shift := [ssShift, ssCtrl];
- Add.ShiftMask := [ssShift,ssCtrl,ssAlt];
- // Add.Command := ecPluginMultiCaretUnsetCaret;
- // Add.Key := VK_DELETE;
- // Add.Shift := [ssShift, ssCtrl];
- // Add.ShiftMask := [ssShift,ssCtrl,ssAlt];
- end;
- end;
- end;
- end.
|