Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2021
Fran Moreno Fran Moreno is offline
Registrado
 
Registrado: feb 2021
Posts: 6
Poder: 0
Fran Moreno Va por buen camino
Problemas con el evento OnMouseDown de TImage

Hola a todos. Quisiera hacer una pregunta a ver si alguien me puede contestar. Antes que nada decir que solo soy un programador aficionado.
Me ocurre lo siguiente: estoy haciendo un programa en el que dibujo una línea de tiempos, similar a la de los programas de edición de vídeo y/o sonido, que sirve para introducir una serie de datos en el programa en forma gráfica, es decir, el usuario marca diversos puntos en la línea de tiempos que pasan al programa los parámetros de tiempo y nivel, algo como lo que se hace en los programas de edición de sonidos para determinar el volumen del sonido a lo largo del tiempo. Las marcas de nivel entran usando el evento OnMouseDown, que me da los parámetros de posición del puntero.
Dicha línea de tiempos debe poder extenderse hasta una hora de duración, que corresponde a 36000 pixeles de la imagen, ya que cada pixel corresponde a una décima de segundo en la línea de tiempos. También debo desplazar la línea de tiempos en horizontal, dentro de la ventana para poder verla en su totalidad y lo hago también, capturando la imagen en el punto donde se pulsa el botón izquierdo del ratón, dentro del evento OnMouseDown, y arrastrándola con el ratón junto con un panel contenedor.
Todo esto funciona sin problemas siempre que la imagen tenga menos de 32768 pixeles, pues, por alguna razón que desconozco, el evento OnMouseDown del TImage, no se produce si se pulsa más allá del pixel 32767 de la imagen. Esto se traduce en que solo puedo arrastrar la imagen, o introducir marcas en ella, si hago la operación pulsando con el botón izquierdo del ratón, antes del pixel 32768. No es un problema de código, sino que el evento no se genera (Lo he comprobado). En cambio el evento OnContextPopUp del TImage, que también lo utilizo para abrir un menú contextual, si se produce sin problemas, hasta el último pixel de la imagen.
¿Alguien sabe porque pasa esto? 32767 es el valor máximo de una variable de tipo SmallInt, pero yo no uso ninguna variable de este tipo en mi programa. Sospecho que el evento OnMouseDown del TImage, debe utilizar internamente, alguna variable de este tipo. ¿Alguien sabe algo de esto?, ¿Se podría corregir para que el evento OnMouseDown se produzca también a partir del pixel indicado, tal como lo hace el evento OnContextPopUp?
¡Gracias de antemano!
Responder Con Cita
  #2  
Antiguo 19-02-2021
Jair Garza Jair Garza is offline
Registrado
 
Registrado: ago 2007
Posts: 5
Poder: 0
Jair Garza Va por buen camino
En Delphi 10.2 si funciona el evento OnMouseDown de un TImage con un ancho de 36000 haciendo click en los pixeles finales, así que asumo que si puede ser un bug en la version que usas.
Usas el TImage para cargar una imagen de fondo sobre la cual pintar o solo lo usas como area de dibujo ?

Mi sugerencia como alternativa seria que en lugar de un TImage uses un TPaintBox (en conjunto con un scrollbox para facilitar el desplazamiento horizontal), en el paintbox puedes dibujar la imagen de fondo o mejor aun dibujar por tu cuenta toda la linea de tiempo y sus marcas, esas marcas supongo serán una lista de coordenadas que debes mantener en algún arreglo o estructura.

Tal ves el único inconveniente (u oportunidad) seria que de ti depende hacer todo el dibujado y aprender a utilizar el objeto Canvas del Paintbox con mas detalle.
Responder Con Cita
  #3  
Antiguo 19-02-2021
Fran Moreno Fran Moreno is offline
Registrado
 
Registrado: feb 2021
Posts: 6
Poder: 0
Fran Moreno Va por buen camino
Gracias por contestar. Lo cierto es que no cargo imagen en el TImage, sino que dibujo toda la línea de tiempos en el canvas del TImage. Probaré con el TPaintBox y comentaré el resultado
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Invocar OnMouseDown Angel.Matilla C++ Builder 2 12-05-2020 10:48:38
Evento onChange en TImage MAXIUM Gráficos 3 08-03-2010 03:02:11
codigo onmousedown Cosgaya Varios 5 25-11-2005 17:15:47
Detectar OnMousedown en un form Jan_polero OOP 4 07-02-2005 12:39:02


La franja horaria es GMT +2. Ahora son las 08:53:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi