C/Visual C - Campo de Texto

 
Vista:

Campo de Texto

Publicado por Esteban Andrade (3 intervenciones) el 07/11/2008 17:42:22
Espero que por favor puedan ayudarme.

Lo que necesito es hacer alguna función para un campo de texto que me permita seleccionar lo que el usuario ingrese.

Por ejemplo, yo implementé una función a la que llamé

char *Leer(int X, int Y, int space, int c1, int c2).

En donde X y Y son las coordenadas cartesianas en donde se colocará el cuadro de texto. space corresponde a la cantidad de caracteres que aceptara y c1, c2, corresponden a los colores que tendrá el valor ingresado después de salir del campo de texto.

Ahora bien, el problema es que si el usuario quiere seleccionar (Shift+Izq) un área de la cadena ingresada, no lo puede hacer.

Esta es mi rutina:

char *Leer(int x, int y, int space, int cf, int cb) {
char buffer[80];
char *valor;

buffer[0] = space+1;
gotoxy(x,y);
textcolor(15);
textbackground(3);
for(int i = x; i < x+space+2; i++) { cprintf("%c", ' '); }
gotoxy(x+1, y);
valor = cgets(buffer);
gotoxy(x,y);
textcolor(cf);
textbackground(cb);
for(i = x; i < x+space+2; i++) { cprintf("%c", ' '); }
gotoxy(x+1, y);
cprintf("%s", valor);
return valor;
}

Espero que me puedan ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Campo de Texto

Publicado por Armando Nava  (127 intervenciones) el 16/11/2008 01:27:37
Tienes que pensar en como decirle al programa lo que tiene que hacer cuando se encuentre esa combinación de teclas.

No tengo el codigo para saber cuales teclas estan presionadas, pero tienes que leer ese evento y decirle que seleccione, cambi de color, fono, etc lo que se esta seleccionando, y depues esto a nivel visual y despues a nivel datos. T e envio un ejemplo mediante lectura directa del teclado, no lo he probado en combinación de teclas t=inport(0x60);


#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

char retrazo(void);

int main(void)
{

char sysdat[10],borra[1],verifica;
int i;

/* request auto detection */
int gdriver = DETECT, gmode, errorcode;

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s ", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}

setfillstyle(SOLID_FILL, 6);
bar(40,40,150,70);
setcolor(15);
rectangle(39,39,151,71);
setcolor(15);

moveto(50,50);
borra[1]=NULL;
i=0;

while( i<6 && (verifica= retrazo()) != 28 ){

sysdat[i]=getch();

if(sysdat[i]==13){
sysdat[i]=NULL;
}

if(sysdat[i]==8) { //backspace
sysdat[i-1]=NULL;
i-=2;
if(i<0) {
setfillstyle(SOLID_FILL, 6);
bar(40,40,150,70);
setcolor(15);
rectangle(39,39,151,71);
setcolor(15);
moveto(50,50);
i=0; sysdat[0]=NULL;
}
else{
setfillstyle(SOLID_FILL, 6);
bar(40,40,150,70);
setcolor(15);
rectangle(39,39,151,71);
setcolor(15);
moveto(50,50);
outtext(sysdat);
i++;
}

}
else {
borra[0]=sysdat[i];
outtext(borra);
i++;
}

}



sysdat[i]=NULL;
moveto(100,100);
outtext(sysdat);
/* clean up */
getch();
closegraph();
return 0;
}


char retrazo(void) {
char t;
t=inport(0x60);
return(t);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Campo de Texto

Publicado por armando Nava (127 intervenciones) el 16/11/2008 01:38:43
Esto te puede ayudar

_bios_keybrd, bioskey

http://www.digitalmars.com/rtl/bios.html#_bios_keybrd
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar