Ver Mensaje Individual
  #16  
Antiguo 09-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 22
andres1569 Va por buen camino
Hola de nuevo:

Cris, me alegro de que lo veas de esa manera.

Muchas de las cosas que te dije son recomendaciones que me hago a mí mismo a diario, y no siempre puedo cumplir. Por ejemplo, lo de sólo copiar y pegar código, sin tatar de entenderlo, es algo que no podemos evitar muchas veces, por falta de tiempo o porque es demasiado complicado para detenernos a examinarlo. La programación actual, cada vez más sofisticada nos empuja muchas veces a ello; a veces andas desesperado en busca de esa fórmula, rutina o componente que te saque de un apuro y cuando lo encuentras y ves que funciona, no tienes tiempo de pararte a ver cómo lo hace, simplemente quieres que funcione, lo colocas y punto. Lo de los porcentajes, en cambio, es algo que te saldrá en más ocasiones, cuando tengas tiempo trata de hincarle el diente.

Y volviendo al origen de este hilo, voy a ponerte un código para hacer más agradable la introducción de los porcentajes. Se trata de que cuando el usuario vaya escribiendo en los Edits, pueda visualizar simultaneamente el resultado. Estas pijadillas suelen agradecerlas los usuarios:
Código:
procedure TForm1.CalculaPorcentajes;
var
  Importe, Descuento, Total : Currency;
begin
  if Edit1.Text = '' then Importe := 0
  else Importe := StrToFloat(Label1.Caption) * StrToFloat(Edit1.Text) / 100;
  if Edit2.Text = '' then Descuento := 0
  else Descuento := Importe * StrToFloat(Edit2.Text) / 100;
  Total := Importe - Descuento;
  Label2.Caption := FormatFloat(',0.00', Total);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if NOT (Key in ['0' .. '9']) AND (Key <> #12) AND (Key <> #8) then Key := #0;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  with TEdit(Sender) do
    if (Text <> '') AND (StrToInt(Text) > 100) then
    begin
      Text := Copy(Text, 0, 2);
      SelStart := 2;
    end
  else CalculaPorcentajes;
end;
En primer lugar, desde diseño, deja en blanco la propiedad Text de los Edits, y fija su propiedad MaxLength a 3 (puesto que el mayor número que pueden almacenar es el 100). Luego enlaza los eventos OnKeyPress y OnChange de ambos Edits al código que te pongo arriba. En el OnKeyPress controlamos que sólo se puedan introducir cifras o pulsar las teclas de suprimir y retroceso. En el OnChange hacemos una pequeña verficación de que el número introducido no sea mayor que 100, y si es correcto llamamos al procedimiento CalculaPorcentajes, de manera que a cada cambio, se verá la cantidad calculada en el Label2.

El procedimiento CalculaPorcentajes lo debes declarar también dentro de la declaración del TForm1, por ejemplo en la sección private; realiza lo mismo que el que te puse en un mensaje anterior, pero además comprueba que los Edits tengan escrito algún número, si no es así, interpreta que es 0.

Éxitos con tu programa y con los que vengan detrás,

Un saludo
__________________
Guía de Estilo
Responder Con Cita