Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Tecnicas para resaltar sintaxis (https://www.clubdelphi.com/foros/showthread.php?t=23975)

Mauro.NET 04-08-2005 01:57:01

Tecnicas para resaltar sintaxis
 
Hola gente, estoy haciendo una aplicacion que permite hacer consultas SQL a una bases de datos, en donde la pantalla se divide en 2 partes. La superior es para escribir la consulta (con sintaxis resaltada), y la de abajo te muestra los resultados en una grilla con posibilidad de exportar a pdf, excel, html, etc.
Aunque les parezca tonto, esto es muy pobre en algunos motores de DB. Por ejemplo en una empresa donde trabajo, usan Sybase Anywere 5 y tiene una aplicacion similar pero no te resalta la sintaxis y eso es espantoso a la hora de trabajar con consultas tan extensas como estoy acostumbrado.

En el proyecto estoy usando el componente RichEdit, ya que me permite buscar palaras y aplicar formato (color, fuente,etc) . Estuve usando codigo que encotre por aqui en el foro pero no era del todo bueno, yo quiero hacer que resalte la sintaxis a medida que vas escribiendo como el Delphi y que sea eficiente.

Yo lo que hago por ahora es esto:

Código:

 
  procedure ResaltaPalabraEnRE(RichEdit: TCustomRichEdit; Palabra: string);
  {Resalta palabra en RichEdit}
  var
          Texto: string;
          Posicion, position, EndPos: integer;
  begin
          texto := richedit.Lines.Text;
          Posicion := 0;
          with RichEdit do
          begin
                  Endpos := Length(RichEdit.Text);
                  Lines.BeginUpdate;
                  while Position <> -1 do
                  begin
                          Endpos := Length(RichEdit.Text) - posicion;
                      Position := FindText(Palabra, posicion, Endpos, [stWholeWord]);
                          Inc(Posicion, Length(Palabra));
                          SelStart := Position;
                          SelLength := Length(Palabra);
                          richedit.SelAttributes.Color := clred;
                  end;
                  Lines.EndUpdate;
          end;
  end;
 
  procedure TForm1.Button1Click(Sender: TObject);
  var i:integer;
  begin
        // Por cada palabra que se encuentra en el ListBox, la resalta
          for i:= 0 to lista.Count-1 do
                  ResaltaPalabraEnRE(RichEdit, ListBox.Items.Strings[i]);
  end;

Mientras tanto para ganar tiempo, si alguien conoce un programita similar al que estoy haciendo y que sea independiente de la base de datos, pasenme la direccion para bajarlo.

Gacias...... :cool:

dec 04-08-2005 02:30:44

Hola,

De entrada diré que la tarea me parece ardua: no sabría ni por donde empezar. Puede que te resultara útil echar un vistazo al libro Dissecting a C# Application que trata sobre el desarrollo de la aplicación SharpDevelop. Uno de los temas con los que tuvieron que lidiar fue con el que te ocupa y esto se trata en el libro mencionado.

Por otro lado tal vez podrías utilizar los componentes SynEdit los cuales cuentan con un montón de sintaxis de lenguajes de programación soportados, y, cuando no te sean suficientes, puedes definir los que te sean menester más o menos sencillamanete. Con uno de los Add-On que hay publicado para los componentes se incluyen cientos de lenguajes de programación.

Si los pruebas, digo los componentes SynEdit, a no ser que se te halla metido en la cabeza, como suele decirse, hacer algo por tu propia cuenta, estoy seguro de que te quedarás con ellos, pues son muy buenos, de código abierto, gratuitos y muy usados por no pocas aplicaciones, que fían de su potencialidad.

roman 04-08-2005 02:31:05

Hacer tu propio resaltador de sintaxis puede ser una tarea muy compleja. Pienso que lo meor es que uses algo ya hecho. Por ejemplo, el SynEdit es una componente gratuita que maneja varias sintaxis, entre ellas SQL.

// Saludos

dec 04-08-2005 03:42:56

Hola,

roman 0 - dec 1

;) ;) ;) ;) ;) ;)

Mauro.NET 04-08-2005 06:59:19

Gracias....... estoy instalando el componente, por lo que cuentan ya ni tengo ganas de ponerme a programar algo asi jejejejejeje :D

Saludos...


La franja horaria es GMT +2. Ahora son las 11:13:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi