Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Cursor en forma de cruz atravesando todo un TImage
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Cursor en forma de cruz atravesando todo un TImage Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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 Crying or Very sad

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Gracias, funciona. Pero ahora debo ocultar el cursor original ¿alguien sabe como?
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.