| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Lun 06 Sep, 2004 5:29 pm Asunto: Cursor en forma de cruz atravesando todo un TImage |
|
|
Hola, tengo un TImage y un TPaintBox. La cuestion es que quiero cambiar el cursor por otro en forma de cruz que vaya de lado a lado atravesando todo el componente (como en el autocad), ¿alguien sabe como hacerlo o me puede orientar?
Tengo TImage con la imagen de un mapa y segun donde tenga colocado el cursor me debe dar las coordenadas. Con los cursores por defecto queda feo, y quedaria mejor con este cursor en forma de cruz.
Gracias y un saludo. |
|
| Volver arriba |
|
 |
Fernando Diaz Master


Registrado: 18 Jul 2004Mensajes: 273Ubicación: Talavera de la Reina (Toledo)
|
Publicado: Lun 06 Sep, 2004 7:57 pm Asunto: |
|
|
No te entiendo pero si lo que quieres es hacer que al pasar por encima de la imagen cambie de cursor prueba en la propiedad Cursor del TImage
y ara las coordenadas luego lo miro cd tenga mas tiempo pero creo que tb hay una propiedad OnMouseMove o algo asi que tiene de parametros la x y la y pero luego te lo miro _________________ Los problemas mas dificiles tienen las soluciones mas sencillas
 |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Lun 06 Sep, 2004 8:40 pm Asunto: |
|
|
| Hola, no es eso. Lo que quiero hacer es dentro de un Image (evento OnMouseMove), el cursor convencional desaparezca y en su lugar tenga dos lineas (una horizontal y la otra vertical) que vayan de lado a lado de este Image. |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Lun 06 Sep, 2004 10:59 pm Asunto: |
|
|
He probado con esto:
| Código: |
void __fastcall Tv_main::PaintBox1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
PaintBox1->Canvas->MoveTo(X,0);
PaintBox1->Canvas->LineTo(X,PaintBox1->Height);
PaintBox1->Canvas->MoveTo(0,Y);
PaintBox1->Canvas->LineTo(PaintBox1->Width,Y);
}
|
Y me dibuja las lineas como quiero, ahora el problema esta en que conforme dibuja las lineas y muevo el cursor se me emborrona porque no limpia las anteriores. Es decir, debo borrar antes de dibujar, pero no se como
Ademas si pruebo este mismo codigo pero para un Image, me da un error diciendo: "Can only modify an image if it contains a bitmap", que no entiendo porque si que hay una imagen (es un jpeg puesto en la fase de diseño).
Seguire probando. |
|
| Volver arriba |
|
 |
Fernando Diaz Master


Registrado: 18 Jul 2004Mensajes: 273Ubicación: Talavera de la Reina (Toledo)
|
Publicado: Mar 07 Sep, 2004 1:19 am Asunto: |
|
|
bien e estado iinvestigando y... solucion:
| Código: |
void __fastcall Tv_main::PaintBox1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
PaintBox1->Repaint(); //NUEVA LINEA
PaintBox1->Canvas->MoveTo(X,0);
PaintBox1->Canvas->LineTo(X,PaintBox1->Height);
PaintBox1->Canvas->MoveTo(0,Y);
PaintBox1->Canvas->LineTo(PaintBox1->Width,Y);
} |
aora el problema es controlar el refresco de pantalla _________________ Los problemas mas dificiles tienen las soluciones mas sencillas
 |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Mie 08 Sep, 2004 10:39 pm Asunto: |
|
|
| Gracias, funciona. Pero ahora debo ocultar el cursor original ¿alguien sabe como? |
|
| Volver arriba |
|
 |
Fernando Diaz Master


Registrado: 18 Jul 2004Mensajes: 273Ubicación: Talavera de la Reina (Toledo)
|
Publicado: Jue 09 Sep, 2004 2:19 pm Asunto: |
|
|
pues puedes hacerlo asi...
| Código: |
void __fastcall Tv_main::PaintBox1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
PaintBox1->Cursor=crNone; //NUEVA LINEA
PaintBox1->Repaint();
PaintBox1->Canvas->MoveTo(X,0);
PaintBox1->Canvas->LineTo(X,PaintBox1->Height);
PaintBox1->Canvas->MoveTo(0,Y);
PaintBox1->Canvas->LineTo(PaintBox1->Width,Y);
}
|
_________________ Los problemas mas dificiles tienen las soluciones mas sencillas
 |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Jue 09 Sep, 2004 10:51 pm Asunto: |
|
|
| Gracias. |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Jue 09 Sep, 2004 11:17 pm Asunto: |
|
|
Tengo ahora un problema con el Repaint(), y es que se ve un parpadeo muy molesto, porque tiene que volver a colocar la imagen.
Lo tengo puesto de la siguiente manera: Tengo un TImagen donde tengo colocada una imagen en formato jpg. Encima de este tengo un TPaintBox que es donde dibujo el cursor. Y en el evento OnMouseMove es donde se realiza este dibujo del cursor y su actualizacion con la orden repaint, es decir esta orden solo deberia afectar al PaintBox, sin embargo se ve como vuelve a cargar la imagen de fondo.
¿alguna idea sobre alguna tecnica para solucionar este parpadeo?
Gracias nuevamente. |
|
| Volver arriba |
|
 |
Eaco Lt JG

Registrado: 04 Nov 2004Mensajes: 58Ubicación: Las Palmas de Gran Canaria-Islas Canarias
|
Publicado: Sab 18 Dic, 2004 11:14 pm Asunto: |
|
|
| me gustaria saber si al final se encontro la solucion. estoy en la misma situacion q tu y no se me refresca bien la pantalla. me parpadea. |
|
| Volver arriba |
|
 |
Eaco Lt JG

Registrado: 04 Nov 2004Mensajes: 58Ubicación: Las Palmas de Gran Canaria-Islas Canarias
|
Publicado: Dom 19 Dic, 2004 1:46 am Asunto: |
|
|
bueno, he evitado el parpadeo poniendo
DoubleBuffered = true;
pero el consumo de memoria se nota... a alguien se le ocurre algun otro metodo? |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Dom 19 Dic, 2004 7:38 pm Asunto: |
|
|
Hola.
Siento decirte que al final no pude solucionarlo.
Aunque puse la solucion que das (DoubleBuffered) me seguia parpadeando, supongo que la pondria mal (la coloque en el form Form1->DoubleBuffered=true). |
|
| Volver arriba |
|
 |
Eaco Lt JG

Registrado: 04 Nov 2004Mensajes: 58Ubicación: Las Palmas de Gran Canaria-Islas Canarias
|
Publicado: Dom 19 Dic, 2004 9:42 pm Asunto: |
|
|
yo lo he puesto igual q tu. el consumo de memoria (por ahora) se me ha visto ampliado en 2 megas. Aunq me gustaria saber exactamente q es lo q hace el doublebuffered para ver hasta q punto me va a afectar en el resto de mi aplicacion _________________ Jey U! I'm a Telecoman |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Dom 19 Dic, 2004 11:36 pm Asunto: |
|
|
Retomando la PRIMERA solucion de Fernando:
Me parece que estan llendo por el lado mas dificil.
Simplemente hice un form, al cual le cambie en su propiedad Cursor a
"crArrow" en lugar de Default y "pegue" un TImage y le cambie su atributo
Cursor a "crCross".
Todo esto con el mouse con 0 lineas de codigo
Sera esto lo que necesitan?
Porfavor contesten si les sirvio
Saludos _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
Eaco Lt JG

Registrado: 04 Nov 2004Mensajes: 58Ubicación: Las Palmas de Gran Canaria-Islas Canarias
|
Publicado: Lun 20 Dic, 2004 2:11 am Asunto: |
|
|
saludos:
con esa solucion el cursor pasa a ser una cruz pero nosotros pretendemos q el cursor sea el punto de corte de dos rectas perpendiculares q ocupan toda la imagen a modo de eje de coordenadas (para crear una especie de parale de los q se usan en dibujo tecnico). Y cuando mueves el cursor se mueven dichas rectas
Me da q no me he explicado muy bien... _________________ Jey U! I'm a Telecoman |
|
| Volver arriba |
|
 |
|