SynEdit/es
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
polski (pl) │
русский (ru) │
中文(中国大陆) (zh_CN) │
SynEdit es un paquete que contiene un componente editor de código fuente llamado TSynEdit, varios resaltadores de sintaxis y otros componentes utilizados para la edición de código fuente. Está basado en SynEdit 1.3 a partir del cual fué adaptado y extendido con características tales como soporte UTF-8 y plegado de código (code folding).
SynEdit en el IDE
El componente SynEdit es un paquete que ya viene integrado con Lazarus debido a que lo utiliza el propio IDE. Es por ello que no existe un fichero .lpk. Estos componentes se pueden encontrar dentro de la paleta de componentes en la solapa 'SynEdit'.
Ejemplos
Se puede encontrar un ejemplo en lazarus/examples/synedit1.lpi.
Como añadir soporte para Copy, Paste, Cut, Undo, Redo, etc
Estas características se pueden implementar utilizando mandatos SynEdit.
uses
...
SynEdit, SynEditKeyCmds;
procedure TfrmPrincipal.HandleCodigoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Shift = [ssCtrl]) then
begin
case Key of
VK_C: synCodigo.CommandProcessor(TSynEditorCommand(ecCopy), ' ', nil);
VK_V: synCodigo.CommandProcessor(TSynEditorCommand(ecPaste), ' ', nil);
VK_X: synCodigo.CommandProcessor(TSynEditorCommand(ecCut), ' ', nil);
end;
end;
end;
Menú con Deshacer y Rehacer
procedure TForm1.MenuRehacer(Sender: TObject);
begin
SynEdit1.Redo;
end;
procedure TForm1.MenuDeshacer(Sender: TObject);
begin
SynEdit1.Undo;
end;
Menus con Duplicar e intercambiar líneas
//Duplicar Línea
procedure TForm1.MenuDuplicarLinea(Sender: TObject);
begin
SynEdit1.Lines.Insert(CustSynEdit().CaretY,CustSynEdit().LineText);
end;
//Intercambiar Línea hacia Arriba
procedure TForm1.MenuLineaArriba(Sender: TObject);
begin
if CustSynEdit.CaretY -1 >= 1 then
begin
CustSynEdit.Lines.Exchange(CustSynEdit.CaretY -1 ,CustSynEdit.CaretY-2);
CustSynEdit.CaretY:=CustSynEdit.CaretY-1;
end;
end;
//Intercambiar Línea hacia Abajo
procedure TForm1.MenuLineaAbajo(Sender: TObject);
begin
if ( CustSynEdit.CaretY + 1 <= CustSynEdit.Lines.Count) then
begin
CustSynEdit.Lines.Exchange(CustSynEdit.CaretY-1,CustSynEdit.CaretY);
CustSynEdit.CaretY:=CustSynEdit.CaretY+1;
end;
end;
Insertar caracteres en la posición actual
procedure TForm1.Button1Click(Sender: TObject);
begin
SynEdit1.CommandProcessor(ecChar,'a', nil); //Inserta a
SynEdit1.SetFocus;
end;
Completamiento de Código con SynCompletion
Uses
... ...
LCLType,//Para poder usar VK_SPACE
syncompletion;
... ... ....
var
Completion:TSynCompletion;
begin
Completion:=TSynCompletion.Create(Self);
Completion.Editor:=SynEdit;
Completion.ShortCut:=Menus.ShortCut(VK_SPACE, [ssCtrl]);
Completion.ItemList.add('Arc( )');
Completion.ItemList.add('Axes( )');
Completion.ItemList.add('Bezier( )');
Completion.ItemList.add('Cercle( )');
end;
Desplegar TSynCompletion en la posición actual
procedure TForm1.Button1Click(Sender: TObject);
var p:TPoint;
begin
with SynEdit1 do
begin
P := Point(CaretXPix,CaretYPix + LineHeight);
P.X:=Max(0,Min(P.X,ClientWidth-Completion.Width));
P := ClientToScreen(p);
end;
Completion.Execute('',p.x,p.y);
end;
Documentación
El usuario bubulemaster ha realizado un documento sobre SynEdit disponible aquí
Está en francés, no se si más adelante lo traducirá al inglés.
Más desarrollos, discusiones
- RTL (de derecha a izquierda (Right-To-Left)): comenzado por Mazen
- Selección automática de fuente monoespacio: Por el momento SynEdit comienza con el tipo de fuente 'courier'. Pero sería mejor, si SynEdit comenzara con una tipografía monoespaciada (es decir: todos los caracteres tienen la misma anchura). Por ahora el LCL TFont no aporta tal propiedad y el usuario tiene que escoger la fuente correcta.
- Selección automática de fuente UTF-8: Igual que el caso anterior de monoespaciado, pero con una cadena UTF-8 de fuente, de modo que por ejemplo umlaute se muestra correctamente. Por ahora el usuario tiene que elegir la fuente correcta.
- Teclas muertas. La mayoría de los teclados soportan pulsar una o más teclas para crear un carácter especial (como en los caracteres acentuados (á,é,í,...) o con el umlaut).
- Rediseño del componente SynEdit. El objetivo principal es una presentación y un navegación por el texto más fiable. Un enfoque más modular para permitir una mejor integración de las extensiones, y por controles especializados, para su utilización fuera de Lazarus.