Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Resta Hexadecimal ??? (https://www.clubdelphi.com/foros/showthread.php?t=62528)

Ðαяισš 30-12-2008 19:34:07

Resta Hexadecimal ???
 
Hola.. Estoy creando una aplicacion que haga una Resta "Hexadecimal"
pero no logro hacerla.. funciona como una calculadora pero solo tendra una funcion "-" osea solo hara esa funcion "restar" pero los numeros siempre seran Hexadecimales ejemplo:

15AD89 - 26AB

pero.. el primer valor a restar (sera siempre el mayor obviamente) estara en un Tedit y el otro valor si estara en el codigo del form ejemplo

TEdit1.text - 26AB

algo asi, no se como va espero me ayuden...

tambien necesito que el TEdit1.Text Solo admita numeros Hexadecimales
0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F
si tiene algun otro valor que no sea hexadecimal que un mensaje salga diciendo "un valor es incorrecto, Solo se permiten numeros hexadecimales"

Tambien que el mismo TEdit solo admita Mayusculas.. y si se llegan a escribir letras en minuscula inmediatamente los ponga en mayuscula

no se si sea mucho pedir.. pero eran muchos mas errores y ya los arregle.. solo me falta ello para culminarlo :) si alguien me ayuda se los agradeceria

rgstuamigo 30-12-2008 20:40:51

Hola Ðαяισš veo que estas muy interesado en hacer tu tarea, eso es bueno;)de a poco uno va aprendiendo.
Sobre tu asunto fijate es solo hacerte una Function que reste numeros hexadecimales, yo te recomendaria usar un poco de assembrer que ya tiene todo en bandeja(Listo).;)
Cita:

tambien necesito que el TEdit1.Text Solo admita numeros Hexadecimales
0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F
si tiene algun otro valor que no sea hexadecimal que un mensaje salga diciendo "un valor es incorrecto, Solo se permiten numeros hexadecimales"

Tambien que el mismo TEdit solo admita Mayusculas.. y si se llegan a escribir letras en minuscula inmediatamente los ponga en mayuscula
Puedes hacer esto en el evento OnKeyPress del Edit:
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if  not(Key in Hexa) then
     begin
       Beep;   //aqui sale un pitido por que el dato es incorrecto
       Key:=#0; //aqui pone el dato en null es decir lo anula
     end
  else
    if Key in minusculas then
      UpCase(Key);   //aqui te convierte a mayusculas en el caso de ser minuscula
end;
Espero que te sirva , tambien podrias poner la propiedad CharCase de Edit en ecUpperCase para que sea un edit de solo mayusculas claro que se veria afectado por este evento que te estoy posteando.;)
Saludos....:cool:

DarkMan 30-12-2008 20:49:38

Para permitir solo números hexadecimales, dentro del evento onkeypress del edit puedes añadir un código tal que:
Código Delphi [-]
 
 If (Key in ['a'..'f']) then Key:=UpperCase(Key)[1];
 If Not((Key in ['0'..'9'])
        or (Key in ['A'..'F'])
        or (Key= CHR(VK_BACK))) then
        raise exception.Create(''''+Key+'''' + ' es incorrecto, solo se permiten numeros hexadecimales');

y para realizar la operacion de restar puedes usar por ejemplo:
Código Delphi [-]
Label1.caption:= IntToHex(StrToInt('$'+Edit1.Text) - $A42C, 4);

Espero que te sirva para tus propósitos ;)

Edito: alguien se me adelantó ya :P.

rgstuamigo 30-12-2008 20:51:42

Se me estaba olvidando de poner que es "Hexa" y "minusculas" son contantes que puedes definirlas despues de los uses; mas o menos asi:
Código Delphi [-]
unit Unit1;
 interface
 uses
 ..
 ..
 . 
 const Hexa=['0'..'9','A'..'F','a'..'f',#8];// el caracter ascii 8 es para que te  permita borrar       
  minusculas=['a'..'f']; type . . . //resto del codigo
Saludos;)

Ðαяισš 30-12-2008 20:58:18

Gracias Perfecto!!
 
Ve...!
Gracias ha sido de total ayuda..

Saludos. :)

gonza_619 15-09-2010 06:26:15

hola me pasa q en mi caso necesito restar dos valores Money con signo$
se q se puede qitar el signo y pasar a string y a flotante, pero hago muchas conversiones, los datos money estan 2 dbedits.text y tendria q restarlos
tuve q hacer lo sig
Código Delphi [-]
x:= StringReplace(dbedit4.Text, '$', '', [rfReplaceAll]);
          z:= StringReplace(dbedit8.Text, '$', '', [rfReplaceAll]);
          dbedit5.text:= FloatToStr(StrToFloat(z) - StrToFloat(x));
el problema es cuando se presenta un valor por ej:$7,6 y al pasarlo a float nose si lo toma como valido
tambien hice un consulta q sume un campo money un SUM, y lo guarde en un edit. habra manera de no hacer las conversiones y realizar operaciones de suma con money?
grax ud

DarkMan 15-09-2010 11:34:17

gonza_619 te recomiendo que leas la guía de estilo del foro.

Tu duda es totalmente diferente de restar números hexadecimales, deberías abrir un nuevo tema y no revivir un tema de hace 2 años.


Tu pretendes restar cantidades decimales que están almacenadas en un string, y que contienen un caracter (en este caso '$'). De haber alguna función para realizar tal operación, ten por seguro que realizará prácticamente las mismas operaciones para la resta.

Espero haberte sido de ayuda.

Un saludo,
Iván.


La franja horaria es GMT +2. Ahora son las 13:41:00.

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