Programación General > C++ Builder

 un edit de floats?

(1/2) > >>

leotardo de bici:
soy el "NOVATO TOTAL" que os escribio hace un mes.  aproveche las navidades para estudiar builder a 4 manos, y ya hice algunas demos.

lo que quiero es pasar mis programas c borland de los 80' al entorno win.

1º tropiezo, necesito configuraciones, con su reset, su save y su load, en mis demos ya se hacerlo, solo que en los cuadros de dialogos capturo bien el nombre que quiero (confirmado por un edit) pero al hacer un openfile me dice que el CurrentName es un Ansistring (me entero ahora que existe eso) y que no es valido, probe con *, con &, con "", y no hay manera, por lo que falseo el openfile con el nombre "currentfile", y efectivamente aparece ese fichero, que es el que usa el save y el load ponga yo el que ponga.   ¿cual es la palabrita magica para conjurar el problema?.

2º esto ya esta bastante discutido por aqui, se trata de que tengo variables float, que pueden entrar por fichero.CFG, por reset, o por teclado.  el problema es el teclado, parece increible pero builder parece hecho por poetas para poetas, puedo cambiar el color, fuente, tamaño, estilo del texto, y seguro traducirlo al portuges,  pero no encuentro opcion para meter solo numeros float.
 lo ideal es que ni permitiese alfabeticas (quizas el E), y que pudiese variar con el raton, bien picando en un UpDow o por rueda como en SpinEdit.
el SpinEdit me gusta, pero no acepta floats,  (MaskEdit=kk)
 una solucion es currarme una rutina, que trage el edit, la digiera, vomite si tiene letras.  tendria que pasarle la direcion dela variable a comprobar. ,,, poco elegante.
 otra solucion es hacerse un componente visual para la paleta.  Como viene el fuente del spinedit lo altere cambiando los int por floats, pero a cada error de copilacion corregido aparecian dos nuevos, al final consegui joder la paleta de componentes.
 ¿que me recetais?.

TRod:
1.- A ver si entendi bien: El compilador no te deja usar char* porque quiere un AnsiString?   Usa  AnsiString(apuntadorChar).
2.- El evento OnKeyPress tiene el Parametro Key, ese se puede manipular a tu conveniencia. Ejem:

--- Código: Text --- if(!(Key>='0'&&Key<='9'))   //Ojo aqui con VK_BACK   Key = 0; //Anula la entrada   "Juega" con este evento e inspirate para hacer poesia  :P
Y una vez que tengas bien "pulido" tu componente ya puedes crear tu paquete para seguir jodiendo tu paleta de componentes (si en verdad esta afectada, sugiero que vuelvas a instalar el Builder)
Suerte.

leotardo de bici:
gracias contestar,

1º problemilla, creo que es al reves, parece que tengo un AnsiString pero le viene grande al openfile(), he estudiado muchos ejemplos y todos los que encontre es para load/save BMPs y RichEdits, en ellos parece muy facil, pero mi problema es que quiero guardar un monton de variables, los chexboxs, los radiobutones, version, etc, y no creo que sea tan facil, por eso uso el openfile que conozco de viejo y me funciona, solo me falta pasar el nombre que me entrega el cuadro de dialogos al openfile.

2º sobre el tema del edit numerico mira arriba, postee uno (dos, otro con flechas como spinedit) que encontre que funciona bastante aceptable.

TRod:

--- Cita de: "leotardo de bici" ---... creo que es al reves, parece que tengo un AnsiString pero le viene grande al openfile()...

...  solo me falta pasar el nombre que me entrega el cuadro de dialogos al openfile.


--- Fin de la cita ---
El objeto AnsiString tiene un metodo llamado c_str() el cual retorna un char* que puede ser mas manejable dentro del OpenFile.

leotardo de bici:
bueno, ya termine mi 1º programa medio serio en builder6.  es un simulador de espectrometros cuadrupolos, un rollo.

el fruto de vuestra ayuda esta en
3*w.cientificosaficionados.com/foros/viewtopic.php?f=2&t=6152&start=260
alrrededor del 10-2-09.
o bajar de 3*w.cientificosaficionados.com/baldo/4p/simula.rar

gracias a todos, a heli, jtbarbeito, y trod de solo codigo.
os puse en los creditos, si os parece un deshonor os borro.



tuve un problemilla gordo con el punto y la coma, el Edit me presenta la variable con coma, pero el mismo edit quiere un punto al input, se trabuca a si mismo, una solucion chapucera fue cambiar la configuracion regional y decirle punto para decimales.

estudie emplear la paleta aquella de SDL con edits numericos, pero desisti porque otro no la tendria y no seria muy compatible.

al final se puso:
   ,,,,,
   Edit1 ->Text=AnsiString().sprintf("%1.3e", variable1); //para exponencial, o "%2.3f" para decimal clasico    
   ,,,,,
y en OnKeyPress un filtro de teclas, floats o ints
//---------------------- TECLAS FILTRAR
void __fastcall TForm1::FiltrarTeclaFloat(TObject *Sender, char &Key){
   if(Key>='0'&&Key<='9'){return;}    //"Ojo aqui con VK_BACK" ? consejo de Trod
   if(     Key=='.'){return;}    //
   if(Key=='-'||Key=='+'){return;}    //pasa signo
   if(Key=='e'||Key=='E'){return;}    //para exponencial
   if(Key==8  ||Key==13 ){return;}    //teclas de borrado
//   if(Key==Key_Return   ){return;}    //teclas retur, no va
//   if(Key==Key_Enter    ){return;}    //teclas enter, ni idea como colarla para que trage numerito
   Key = 0;   //Anula la entrada si no es ninguna.
   }
void __fastcall TForm1::FiltrarTeclaInt(TObject *Sender, char &Key){
   if(Key>='0'&&Key<='9'){return;}    //"Ojo aqui con VK_BACK" ? consejo de Trod
   Key = 0;   //Anula la entrada si no es ninguna.
   }

aun con estas el usuario puede meter la pata si escribe Es o signos sin ton ni son.

------------
leotardo --

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa