[C con Clase] [ANSI C + NCURSES + FORM] Extracción de las cadenas almacenadas en los fields de un formulario
bameda
bameda en gmail.com
Mar Jun 3 04:03:59 CEST 2008
Hola listeros,
Estoy programando un juego (mastermind) en C y para diseñar la
interfaz gráfica he utilizado ncurses + form (para los formularios).
Mi problema viene a la hora de leer desde los formularios: al hacer
field_buffer(...) y, por ejemplo, imprimirla por pantalla no me
muestra lo que "teoricamente" contenía el campo del formulario.
¿Alguien sabe como puedo solucionar mi problema?. A continuación os
adjunto el código de la función que maneja mi formulario.
Gracias de antemano.
SALUDOS
====== CODIGO =====
char * obtener_fichero_guardar(WINDOW * main){
WINDOW *wformulario;
FIELD *campo[2];
FORM *formulario;
char * texto;
int caracter, ro, co;
int icol = 2 , ilin = total_lineas/2 - 3, lar = total_columnas - 4, anch = 7;
werase(main);
curs_set(1);
// Dibyjar ventana
wformulario = subwin(main, anch, lar, ilin, icol);
wbkgd(wformulario, COLOR_PAIR(COLORES_SECUNDARIOS));
box(wformulario, 0 , 0);
// Rellenar ventana
mvwprintw(wformulario, 0 , (lar - 22)/2 ,"| GUARDAR PARTIDA |");
wattron(wformulario, COLOR_PAIR(COLORES_ACEPTAR));
mvwprintw(wformulario, 4 , lar - 38," GUARDAR (ENTER) ");
wattroff(wformulario, COLOR_PAIR(COLORES_ACEPTAR));
wattron(wformulario, COLOR_PAIR(COLORES_CANCELAR));
mvwprintw(wformulario, 4 , lar - 18," CANCELAR (ESC) ");
wattroff(wformulario, COLOR_PAIR(COLORES_CANCELAR));
// Crear formulario
campo[1] = NULL;
campo[0] = new_field(1, lar - 24, 1, 21, 0, 0);
set_field_fore(campo[0], COLOR_PAIR(COLORES_CAMPO_FORMULARIO));
set_field_back(campo[0], COLOR_PAIR(COLORES_CAMPO_FORMULARIO));
field_opts_off(campo[0], O_AUTOSKIP);
field_opts_off(campo[0], O_STATIC);
field_opts_on(campo[0], O_EDIT);
formulario = new_form(campo);
scale_form(formulario, &ro, &co);
set_form_win(formulario, wformulario);
set_form_sub(formulario, derwin(wformulario, ro, co, 1, 1));
post_form(formulario);
form_opts_on(formulario, O_BS_OVERLOAD);
set_current_field(formulario, campo[0]);
mvwprintw(wformulario, 2 , 2 ,"Ruta de la partida");
wrefresh(wformulario);
do {
caracter = getch();
if(caracter == TECLA_ACEPTAR){
form_driver(formulario, REQ_VALIDATION);
texto = field_buffer(campo[0], 0);
}
if(caracter == TECLA_CANCELAR){
texto = NULL;
}
else if (caracter == TECLA_BORRAR){
form_driver(formulario, REQ_DEL_PREV);
}
else{
form_driver(formulario, caracter);
}
}while (caracter != TECLA_ACEPTAR && caracter != TECLA_CANCELAR);
unpost_form(formulario);
free_form(formulario);
free_field(campo[0]);
delwin(wformulario);
werase(main);
curs_set(0);
return texto;
}
===================
--
____________________________________________
|
| David Barragán Merino
| E-mail: bameda en ARROBA@gmail.com
| Ingeniería Informática
| Universidad Carlos III Madrid
|____________________________________________
Más información sobre la lista de distribución Cconclase