Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2007
Avatar de Black_Ocean
Black_Ocean Black_Ocean is offline
Miembro
 
Registrado: nov 2006
Posts: 128
Poder: 18
Black_Ocean Va por buen camino
Exclamation AYUDA! no puedo terminar un algoritmo de resalto de texto en un RichEdit!

Hola amigos!

he recurrido a ustedes porque realmente no he podido terminar un algoritmo que trata lo siguiente:

En un componente RichEdit quiero resaltar en colores las palabras reservadas del lenguaje SQL cuando el usuario escriba una consulta. El método lo tengo puesto en OnChange del RichEdit. Las palabras reservadas las metí en un arreglo de strings.

El procedimiento funciona bien mientras el usuario escribe sin retroceder con Backspace, sin poner pegar texto y sin modificar una palabra de mas atrás. Justamente aquí necesito ayuda. Que cuando el usuario retoceda o ponga pegar texto o modifique una palabra que se encuentre mas atrás en el RichEdit también me resalte en colores las palabras reservadas, y no que se vuelvan a negras :S ya que me falla :S no he podido solucionarlo

Aquí dejo mi actual código por si me pueden echar una manito se los agradecería enormemente =)
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    RichEditSQLConsulta: TRichEdit;
    Button1: TButton;
    procedure RichEditSQLConsultaChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

const
  //Arreglo de algunas palabras reservadas del lenguaje SQL
  SQLPalabrasReservadas: array [0..15] of string = ('SELECT',
                                                   'DISTINC',
                                                   'TOP',
                                                   'PERCENT',
                                                   'AS',
                                                   'FROM',
                                                   'WHERE',
                                                   'LIKE',
                                                   'BETWEEN',
                                                   'AND',
                                                   'OR',
                                                   'LEFT',
                                                   'RIGHT',
                                                   'ORDER',
                                                   'GROUP',
                                                   'BY');

{$R *.dfm}

procedure TForm1.RichEditSQLConsultaChange(Sender: TObject);
var
  i, j, k: integer;
  Encontrada: boolean;
  SubCadena: string;
  ActualPosicionCursor: integer;
begin
  if RichEditSQLConsulta.Text = '' then
  begin
    RichEditSQLConsulta.SelAttributes.Color := clWindowText;
    RichEditSQLConsulta.SelAttributes.Style := [];
  end;
  for i := 0 to RichEditSQLConsulta.SelStart - 1 do
    for j := i + 1 to Length(RichEditSQLConsulta.Text) do
    begin
      for k := Low(SQLPalabrasReservadas) to High(SQLPalabrasReservadas) do
      begin
        SubCadena := Copy(RichEditSQLConsulta.Text, i, j);
        if UpperCase(SubCadena) = SQLPalabrasReservadas[k] then
        begin
          Encontrada := true;
          Break;
        end
        else
          Encontrada := false;
      end;
      if Encontrada = true then
      begin
        ActualPosicionCursor := RichEditSQLConsulta.SelStart;
        RichEditSQLConsulta.SelStart := i - 1;
        RichEditSQLConsulta.SelLength := Length(SubCadena);
        RichEditSQLConsulta.SelAttributes.Color := clBlue;
        RichEditSQLConsulta.SelAttributes.Style := [fsBold];
        RichEditSQLConsulta.SelStart := ActualPosicionCursor;
        RichEditSQLConsulta.SelAttributes.Color := clWIndowText;
        RichEditSQLConsulta.SelAttributes.Style := [];
        break;
      end;
    end;
end;

end.

Realmente necesito una ayudita estoy trancado en esto

De antemano gracias

Saludos.

Última edición por Black_Ocean fecha: 05-06-2007 a las 03:25:40.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
necesito ayuda para terminar un detalle vixente Conexión con bases de datos 0 01-06-2006 11:36:50
añadir texto a un RichEdit aranel OOP 1 12-11-2005 20:15:18
Guardar texto de un RichEdit aranel Varios 4 11-11-2005 18:36:49
Limitar texto en RichEdit dim OOP 1 15-09-2005 13:21:50
Editor Texto Richedit cesar_picazo Varios 1 27-04-2004 18:34:59


La franja horaria es GMT +2. Ahora son las 12:09:37.


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
Copyright 1996-2007 Club Delphi