1 {Unidad con frame para almacenar y configurar las propiedades de un editor 2 SynEdit. Las propiedades que se manejan son con respecto al coloreado. 3 El frame definido, está pensado para usarse en una ventana de configuración. 4 También incluye una lista para almacenamiento de los archivos recientes 5 Por Tito Hinostroza 23/11/2013 6 } 7 unit FrameCfgSynEdit; 8 {$mode objfpc}{$H+} 9 interface 10 uses 11 Classes, SysUtils, Forms, StdCtrls, Dialogs, SynEdit, Graphics, 12 Globales, MiConfigXML, MiConfigBasic, SynEditMarkupHighAll, SynEditMarkup; 13 type 14 15 { TfraCfgSynEdit } 16 TfraCfgSynEdit = class(TFrame) 17 cbutFonPan: TColorButton; 18 cbutResPalCFon: TColorButton; 19 cbutResPalCTxt: TColorButton; 20 cbutResPalCBor: TColorButton; 21 cbutTxtPan: TColorButton; 22 chkFullWord: TCheckBox; 23 chkHighCurWord: TCheckBox; 24 chkAutoindent: TCheckBox; 25 chkVerPanVer: TCheckBox; 26 chkHighCurLin: TCheckBox; 27 cbutLinAct: TColorButton; 28 chkVerNumLin: TCheckBox; 29 chkVerMarPle: TCheckBox; 30 cbutBackCol: TColorButton; 31 cbutTextCol: TColorButton; 32 GroupBox1: TGroupBox; 33 GroupBox2: TGroupBox; 34 Label1: TLabel; 35 Label10: TLabel; 36 Label11: TLabel; 37 Label12: TLabel; 38 Label2: TLabel; 39 Label3: TLabel; 40 Label8: TLabel; 41 Label9: TLabel; 42 procedure chkHighCurLinChange(Sender: TObject); 43 procedure chkHighCurWordChange(Sender: TObject); 44 procedure chkVerPanVerChange(Sender: TObject); 45 public 46 //configuración del editor 47 MarLinAct : boolean; //marcar línea actual 48 Autoindent : boolean; //Autotabulación 49 ResPalAct : boolean; //resaltar palabra actual 50 ResPalCFon : TColor; //color de fondo de la palabra actual 51 ResPalCTxt : TColor; //color de texto de la palabra actual 52 ResPalCBor : TColor; //color de borde de la palabra actual 53 ResPalFWord: Boolean; //Activa "palabra completa" 54 55 cTxtNor : TColor; //color de texto normal 56 cFonEdi : TColor; //Color de fondo del control de edición 57 cFonSel : TColor; //color del fondo de la selección 58 cTxtSel : TColor; //color del texto de la selección 59 cLinAct : TColor; //color de la línea actual 60 //panel vertical 61 VerPanVer : boolean; //ver pánel vertical 62 VerNumLin : boolean; //ver número de línea 63 VerMarPle : boolean; //ver marcas de plegado 64 cFonPan : TColor; //color de fondo del panel vertical 65 cTxtPan : TColor; //color de texto del panel vertical 66 ArcRecientes: TStringList; //Lista de archivos recientes 67 68 procedure PropToWindow; 69 procedure Iniciar(section: string; cfgFile: TMiConfigXML); //Inicia el frame 70 procedure ConfigEditor(ed: TSynEdit); 71 procedure SetLanguage; 72 public 73 //genera constructor y destructor 74 constructor Create(AOwner: TComponent) ; override; 75 destructor Destroy; override; 76 end; 77 78 implementation 79 {$R *.lfm} 80 //const 81 // MAX_ARC_REC = 5; //si se cambia, actualizar ActualMenusReciente() 82 83 { TfraCfgSynEdit } 84 procedure TfraCfgSynEdit.SetLanguage; 85 //Rutina de traducción 86 begin 87 {$I ..\language\tra_CfgSynEdit.pas} 88 end; 89 procedure TfraCfgSynEdit.Iniciar(section: string; cfgFile: TMiConfigXML); 90 var 91 s: TParElem; 92 begin 93 //Asigna referencia necesarias 94 //crea las relaciones variable-control 95 s:=cfgFile.Asoc_TCol(section+ '/cTxtNor', @cTxtNor, cbutTextCol, clBlack); 96 s.categ := 1; //marca como propiedad de tipo "Tema" 97 s:=cfgFile.Asoc_TCol(section+ '/cFonEdi', @cFonEdi, cbutBackCol, clWhite); 98 s.categ := 1; //marca como propiedad de tipo "Tema" 99 s:=cfgFile.Asoc_TCol(section+ '/cLinAct', @cLinAct, cbutLinAct, clYellow); 100 s.categ := 1; //marca como propiedad de tipo "Tema" 101 102 s:=cfgFile.Asoc_Bol(section+ '/Autoindent', @Autoindent, chkAutoindent, true); 103 s:=cfgFile.Asoc_Bol(section+ '/MarLinAct' , @MarLinAct , chkHighCurLin , false); 104 105 s:=cfgFile.Asoc_Bol(section+ '/ResPalCur' , @ResPalAct , chkHighCurWord , true); 106 s.categ := 1; 107 s:=cfgFile.Asoc_TCol(section+ '/ResPalCFon',@ResPalCFon, cbutResPalCFon, clSkyBlue); 108 s.categ := 1; 109 s:=cfgFile.Asoc_TCol(section+ '/ResPalCTxt',@ResPalCTxt, cbutResPalCTxt, clBlack); 110 s.categ := 1; 111 s:=cfgFile.Asoc_TCol(section+ '/ResPalCBor',@ResPalCBor, cbutResPalCBor, clSkyBlue); 112 s.categ := 1; 113 s:=cfgFile.Asoc_Bol(section+ '/ResPalFWord',@ResPalFWord, chkFullWord, false); 114 115 s:=cfgFile.Asoc_Bol(section+ '/VerPanVer', @VerPanVer, chkVerPanVer, true); 116 s:=cfgFile.Asoc_Bol(section+ '/VerNumLin', @VerNumLin, chkVerNumLin, false); 117 s:=cfgFile.Asoc_Bol(section+ '/VerMarPle', @VerMarPle, chkVerMarPle, true); 118 s:=cfgFile.Asoc_TCol(section+ '/cFonPan' , @cFonPan , cbutFonPan , clWhite); 119 s.categ := 1; //marca como propiedad de tipo "Tema" 120 s:=cfgFile.Asoc_TCol(section+ '/cTxtPan' , @cTxtPan , cbutTxtPan , clBlack); 121 s.categ := 1; //marca como propiedad de tipo "Tema" 122 123 cfgFile.Asoc_StrList(section+ '/recient', @ArcRecientes); 124 end; 125 procedure TfraCfgSynEdit.chkVerPanVerChange(Sender: TObject); 126 begin 127 chkVerNumLin.Enabled:=chkVerPanVer.Checked; 128 chkVerMarPle.Enabled:=chkVerPanVer.Checked; 129 cbutFonPan.Enabled:=chkVerPanVer.Checked; 130 cbutTxtPan.Enabled:=chkVerPanVer.Checked; 131 label2.Enabled:=chkVerPanVer.Checked; 132 label3.Enabled:=chkVerPanVer.Checked; 133 end; 134 procedure TfraCfgSynEdit.chkHighCurLinChange(Sender: TObject); 135 begin 136 label1.Enabled:=chkHighCurLin.Checked; 137 cbutLinAct.Enabled:=chkHighCurLin.Checked; 138 end; 139 procedure TfraCfgSynEdit.chkHighCurWordChange(Sender: TObject); 140 begin 141 label10.Enabled:=chkHighCurWord.Checked; 142 cbutResPalCFon.Enabled:=chkHighCurWord.Checked; 143 end; 144 procedure TfraCfgSynEdit.PropToWindow; 145 begin 146 inherited; 147 chkHighCurLinChange(self); //para actualizar 148 chkVerPanVerChange(self); //para actualizar 149 end; 150 constructor TfraCfgSynEdit.Create(AOwner: TComponent); 151 begin 152 inherited Create(AOwner); 153 ArcRecientes := TStringList.Create; //crea lista 154 end; 155 destructor TfraCfgSynEdit.Destroy; 156 begin 157 FreeAndNil(ArcRecientes); 158 inherited Destroy; 159 end; 160 procedure TfraCfgSynEdit.ConfigEditor(ed: TSynEdit); 161 {Configura el editor con las propiedades almacenadas} 162 var 163 marc: TSynEditMarkup; 164 begin 165 if ed = nil then exit; //protección 166 167 ed.Font.Color:=cTxtNor; //color de texto normal 168 ed.Color:=cFonEdi; //color de fondo 169 if MarLinAct then //resaltado de línea actual 170 ed.LineHighlightColor.Background:=cLinAct 171 else 172 ed.LineHighlightColor.Background:=clNone; 173 //configura panel vertical 174 ed.Gutter.Visible:=VerPanVer; //muestra panel vertical 175 ed.Gutter.Parts[1].Visible:=VerNumLin; //Número de línea 176 if ed.Gutter.Parts.Count>4 then 177 ed.Gutter.Parts[4].Visible:=VerMarPle; //marcas de plegado 178 ed.Gutter.Color:=cFonPan; //color de fondo del panel 179 ed.Gutter.Parts[1].MarkupInfo.Background:=cFonPan; //fondo del núemro de línea 180 ed.Gutter.Parts[1].MarkupInfo.Foreground:=cTxtPan; //texto del núemro de línea 181 182 ////////Configura el resaltado de la palabra actual ////////// 183 marc := ed.MarkupByClass[TSynEditMarkupHighlightAllCaret]; 184 if marc<>nil then begin //hay marcador 185 marc.Enabled:=ResPalAct; //configura 186 marc.MarkupInfo.Background := ResPalCFon; 187 marc.MarkupInfo.FrameColor := ResPalCBor; 188 marc.MarkupInfo.Foreground := ResPalCTxt; 189 TSynEditMarkupHighlightAllCaret(marc).FullWord := ResPalFWord; 190 end; 191 ///////fija color de delimitadores () {} [] /////////// 192 ed.BracketMatchColor.Foreground := clRed; 193 //Opciones 194 if Autoindent then begin 195 ed.Options := ed.Options + [eoAutoIndent]; 196 end else begin 197 ed.Options := ed.Options - [eoAutoIndent]; 198 end; 199 end; 200 201 end. 202 203