Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-12-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por jjfgg
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;
Como quisquilloso que pretendo ser... Si SelStart es cero y se intenta acceder a la segunda comprobación (Edit1.Text[ Edit1.SelStart ]... recordemos que el string empieza en el índice 1, y estamos accediendo al cero ==> Access violation

Esto dependerá tambien de si tenemos marcada la casilla "Complete Boolean Eval" (evaluación perezosa) del compilador. Si no la tenemos marcada, nunca nos dará error, ya que cuando el índice sea cero, ya es true, y no comprueba lo demás, y cuando sea distinto de cero, no tendremos problemas al evaluar la segunda condición.

ea, ya que he soltado mi rollo, me voy .

saludos

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #2  
Antiguo 20-12-2005
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muchas gracias jjfgg ya sabia que habia una mejor forma
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 04-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Se que llego un par de años tarde...
Cita:
Empezado por Lepe Ver Mensaje
Como quisquilloso que pretendo ser... Si SelStart es cero y se intenta acceder a la segunda comprobación (Edit1.Text[ Edit1.SelStart ]... recordemos que el string empieza en el índice 1, y estamos accediendo al cero ==> Access violation

Esto dependerá tambien de si tenemos marcada la casilla "Complete Boolean Eval"
Delphi, por defecto, está configurado para realizar el "short circuit" de las operaciones booleanas, por lo que hay poco por que preocuparse.
Supongo que si alguien ha cambiado el valor de dicha opción, sabe lo que hace.
No es que la aclaración de Lepe esté de mas... pero la gran mayoría ha vivido ignorando este hecho..

Finalmente, a "Complete Boolean Eval" yo le llamaría "evaluación no perezosa".

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 04-01-2008
Avatar de elcolo83
elcolo83 elcolo83 is offline
Miembro
 
Registrado: feb 2007
Ubicación: Argentina
Posts: 65
Poder: 18
elcolo83 Va por buen camino
añadiendo al codigo de jjfgg...
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;

POdriamos agregarle un if en caso que un caracter sea borrado corrija el texto, entonces agregamos este codigo en el evento OnKeyUp

Código Delphi [-]

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var ss: integer;
    k: char;
begin
if ((key = 8) or (key = 46)) then    //Si preciona la tecla back o sup
    begin
      edit1.SelLength:= 1;
      ss := Edit1.SelStart;
      caption:= edit1.SelText;
      edit1.SelText:= Lowercase(edit1.SelText);
      edit1.SelLength:= 1;
      edit1.SelStart:= ss;

      k:= char(key);
      if (Edit1.Text[ Edit1.SelStart ] = ' ') then
        begin
          k:= #0;
          Edit1KeyPress(Sender, K);
        end;
    end;
end;
Responder Con Cita
  #5  
Antiguo 04-01-2008
adfa adfa is offline
Miembro
 
Registrado: may 2003
Ubicación: Montevideo-Uruguay
Posts: 119
Poder: 22
adfa Va por buen camino
Cita:
Empezado por jachguate Ver Mensaje
Finalmente, a "Complete Boolean Eval" yo le llamaría "evaluación no perezosa".
Pues para mi esta bueno, no creo que sea perezosa si no un poco más optima; los basic no la tenía y te obligaban a anidar ifs, por suerte Delphi y Java si la tenían.

Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
pulsar una tecla ercrizeporta Varios 1 28-09-2006 17:31:52
Saber si una tecla esta pulsada? fefe13 Varios 9 02-02-2006 18:06:56
Saber cuando se pulsa la tecla Enter D@byt Varios 2 25-05-2005 17:21:52
Tecla PetSis y tecla Inter Tomás Windows 0 24-04-2004 14:20:19
TECLA F1 o F10 andrestsas Varios 2 03-08-2003 17:44:11


La franja horaria es GMT +2. Ahora son las 08:11:56.


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