Ver Mensaje Individual
  #4  
Antiguo 20-12-2005
jjfgg jjfgg is offline
Registrado
 
Registrado: dic 2005
Posts: 2
Reputación: 0
jjfgg Va por buen camino
Una mejor forma y más sencilla es:

Código Delphi [-]
uses
  StrUtils;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Edit1.SelStart = 0)   // primera posición
    or (Edit1.Text[ Edit1.SelStart ] in WordDelimiters) then // posición anterior es un separador de palabras
    Key := UpCase(Key);
end;

WordDelimiters es una constante definida en StrUtils y contiene no sólo espacios sino otros caracteres que funcionan como separadores de palabras. De esta forma el código también funcionará al ingresar comas, puntos, etc. y no sólo espacios.

Otra versión más completa del código anterior, que revisa si se insertó un espacio en el texto y cambia la siguiente a mayúsculas es:
Código Delphi [-]
uses
  StrUtils;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  S: string;
  ss: Integer;
begin
  if (Edit1.SelStart = 0)   // primera posición
    or (Edit1.Text[ Edit1.SelStart ] in WordDelimiters) then // posición anterior es un separador de palabras
    Key := UpCase(Key);

  if ((Length(Edit1.Text)>Edit1.SelStart) // revisa si se inserta
      and (Key in WordDelimiters)) then // un delimitador de palabras
  begin
    S := Edit1.Text; // copia el contenido del edit para modificarlo
    S[ Edit1.SelStart + 1] := UpCase(S[ Edit1.SelStart + 1 ]); // convierte el siguiente caracter en mayuscula
    ss := Edit1.SelStart; // Guarda la posición del cursor
    Edit1.Text := S;  // Cambia el texto
    Edit1.SelStart := ss // Coloca el cursor de regreso en su posición
                         // esto es porque al sustituir la cadena
                         // el cursor se mueve a la primera posición
  end
end;
Responder Con Cita