PDA

Ver la Versión Completa : Problema con TEdit en imagen


fasthorse
14-05-2008, 20:16:55
hola, quiero hacer que el usuario pueda escribir en una imagen en tiempo de ejecución el texto que quiera y no uno definido. La imagen está abierta y contenida en un TImage, entonces mi idea era poner un Tedit y que el usuario escriba en él y luego recuperar el contenido del mismo para que a través de la propiedad Canvas->TextOut, lo escriba en la imagen.
Bien pues me lo escribe en la imagen pero a la segunda vez que pulso el botón y el control TEdit que lo pongo a no visible nunca desaparece, creo q es porque sigue teniendo el control... pero no se como quitárselo, os pongo el código de lo que tengo... resumiendo mi idea es q el usuario escriba en el Tedit y luego recuperar el contenido, escribirlo en la imagen y hacer desaparecer el TEdit.

void __fastcall TForm1::AadirTexto1Click(TObject *Sender)//texto en el menu
{
int c=0;
Edit1->Visible=true;
c=1;
String s=Edit1->Text;

if(c==1 ){
Imagen->Canvas->Font->Size = 40;
Imagen->Canvas->Font->Color = clWhite;
Imagen->Canvas->Brush->Style = bsClear;
Imagen->Canvas->TextOut(10, 10, s);
Edit1->Enabled=false;
Edit1->Visible=false;

}
}

Saludos y gracias.

coso
14-05-2008, 21:02:22
Con canvas->textout estas dibujando encima del TImage

fasthorse
15-05-2008, 11:42:02
Claro, es lo que quiero, y eso me sale, lo q no me sale es hacer desaparecer el Tedit de la imagen...

Lepe
15-05-2008, 14:14:21
Fíjate en estas líneas:

Edit1->Visible=true;
String s=Edit1->Text;

Haces visible el Edit e inmediatamente capturas el valor de Edit1->Text ... esto.... no estas dejando tiempo al usuario para que escriba algo ;).

Ahí está el quid de la cuestión, ¿Cuando quieres hacer desaparecer el TEdit?

- Cuando el usuario pulse la tecla Intro (usar el TEdit.OnkeyUp para pintar el texto y después ocultar el TEdit)
- Cuando el foco salga del TEdit (usar evento TEdit.OnExit).

fasthorse
15-05-2008, 22:40:39
Lo uso así como me dices, pero me sigue saliendo igual... a ver sería una cosa así no?

Edit1->Visible=true;
Edit1->OnEnter=OnPaint; //aquí habrá que indicarle algo no?
String s=Edit1->Text;
Edit1->OnExit;
Imagen->Canvas->TextOut(10, 10, s);

No es así?

Saludos.

Lepe
16-05-2008, 12:45:21
Yo C no tengo muy clara la sintaxis, intentaré explicarlo:

Releyendo tu mensaje, He visto que quieres hacerlo de otra forma y es pulsando el mismo botón "AadirTexto1" varias veces:
La primera vez que se pulse, mostraría el TEdit y la segunda vez que se pulse, oculta el TEdit y pinta en la imagen.

void __fastcall TForm1::AadirTexto1Click(TObject *Sender)//texto en el menu
{

Edit1->Visible= not Edit1-> Visible;

if(not Edit1->Visible ){
Imagen->Canvas->Font->Size = 40;
Imagen->Canvas->Font->Color = clWhite;
Imagen->Canvas->Brush->Style = bsClear;
Imagen->Canvas->TextOut(10, 10, Edit1->Text);
Edit1->Enabled=false;

}
}

Como ves el truco está en la primera línea, cambiamos su visibilidad y después preguntamos por ella (básicamente lo que haciás con c= 0 y c= 1) el problema que tenías es que "c" es una variable local y se pierde el valor entre 2 pulsaciones del boton.

Saludos

fasthorse
17-05-2008, 17:33:06
Hola, así no me hace nada... me sale el cuadro del Tedit, pero ya está, ni se me activa para escribir ni nada...

Lepe
18-05-2008, 20:24:05
Tienes razón, esta línea sobra:

Edit1->Enabled=false;

Perdón :o

Saludos