Ver Mensaje Individual
  #5  
Antiguo 05-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
Oki doki.

Al Edit le pones MaxLength a 1 y listo, solo permites una letra. Tambien le pones Charcase := ecUppercase y solo escribe en mayúsculas. Ya puedes usar el StrScan como te comenté.

El no responder a Resp.Clear, es precisamente porque lo haces dentro del evento KeyPress. Ten en cuenta que en ese evento puedes modificar por código la tecla pulsada, por tanto, aún no ha sido procesada, y por tanto no está en Resp.Text, solo cuando termine el evento, es cuando el carácter estará en Resp.Text (el carácter que pulsó el usuario, o el que tú has modificado por código).

La solución es bien fácil, en lugar de usar Resp.Text, usamos el parámetro Key.
Código Delphi [-]
procedure TEvaRes.RespKeyPress(Sender: TObject; var Key: Char);
var
  res : string;
begin
  aux := inttostr(i);
  if (i < 10) then Result.Text := concat('00',aux);
  if (i >= 10) and (i < 100) then Result.Text := concat('0',aux)
  else Result.text := aux;
  Resp.SetFocus;
  if strScan('ABCDEFGHV',key) <> nil    begin
      TTemporal.Append;
      TTemporal.FieldByName('Pregunta').AsString := inttostr(i);
      res := key; // <<<<<<<<<<<<<<<< guardamos la tecla
      TTemporal.FieldByName('Respuesta').AsString := res;//ahora si se guarda
      TTemporal.Post;
      i := i + 1;
    end
  else Key := #0; // esto si debe funcionar de lujo.

  if i > 159 then
    begin
      tcp := 0;
      tda := 0;
      tcu := 0;
      TRelacion.First;
      TTemporal.First;
      for j := 1 to (i - 1) do
        begin
          if TRelacion.FieldByName('Resultado').AsString = TTemporal.FieldByName('Respuesta').AsString then
            begin
              if TRelacion.FieldByName('Grupo').AsString = 'C' then tcp := tcp + 1;
              if TRelacion.FieldByName('Grupo').AsString = 'A' then tda := tda + 1;
              if TRelacion.FieldByName('Grupo').AsString = 'D' then tcu := tcu + 1;
            end;
          TRelacion.Next;
          TTemporal.Next;
        end;
      tot := tcp + tda + tcu;
      Resp.Enabled := False;
    end;
end;
Obviamente queda hacer un Resp.Clear, pero como dije, no puede hacerse en este evento. Podría añadir Key := #0 despues de hacer el i:=i+1, pero el usuario no vería la tecla en el edit, daría la impresión de que no la acepta. Es mejor buscar otro lugar donde Hacer el Resp.Clear.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 05-04-2006 a las 18:24:56.
Responder Con Cita