Delphi - Problema con el evento OnMuoseDown en un TImage

 
Vista:
sin imagen de perfil
Val: 16
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Problema con el evento OnMuoseDown en un TImage

Publicado por Fran (4 intervenciones) el 12/02/2021 16:02:57
Hola a todos. Acabo de descubrir este foro y 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 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!
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
sin imagen de perfil
Val: 62
Oro
Ha aumentado 1 puesto en Delphi (en relación al último mes)
Gráfica de Delphi

Problema con el evento OnMuoseDown en un TImage

Publicado por Ezequiel (1228 intervenciones) el 12/02/2021 17:55:09
Si pudieras compartir la parte de código que no te funciona para intentar replicar, sólo el código referente al TImage, o sube un proyecto con el ejemplo, no importa que no pongas todo el código, solo un proyecto que compile y genere tu problema.
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
sin imagen de perfil
Val: 16
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Problema con el evento OnMuoseDown en un TImage

Publicado por Fran (4 intervenciones) el 13/02/2021 12:04:10
¡Gracias por contestar! Estoy preparando un pequeño proyecto que reproduce el problema. En Delphi 10.3. Lo subiré en un rato.
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
sin imagen de perfil
Val: 16
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Problema con el evento OnMuoseDown en un TImage

Publicado por Fran (4 intervenciones) el 13/02/2021 13:18:34
He hecho un pequeño proyecto que reproduce el problema, va adjunto y la carpeta "Muestra para foro" hay que copiarla en C:/.
El programita, dibuja una rejilla simple con indicación de los píxeles en la parte superior, que se desplaza igual que en el proyecto original, arrastrándola con el ratón, aunque también le he puesto una ScrollBar abajo para poder desplazarla más rápidamente hasta llegar más allá del pixel 32767.
Es curioso, porque tampoco se puede desplazar la imagen con la ScrollBar más a la izquierda de 32767 pixeles. Me da la impresión que es una limitación de alguno de los componentes empleados, supongo que del Tpanel o incluso de cualquier componente VCL.
Me pregunto si se podría saltar esta posible limitación de alguna forma.
Si alguien sabe algo sobre el tema, le agradecería un poco de información. ¡Gracias!
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
sin imagen de perfil
Val: 16
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Problema con el evento OnMuoseDown en un TImage

Publicado por Fran (4 intervenciones) el 13/02/2021 20:42:24
Gracias por tu respuesta Ezequiel. Me ha aclarado bastante y veo que va a ser imposible que funcione el evento OnMouseDown más allá del pixel 32767 de la imagen. Lo que no entiendo es porque sí funciona el evento OnContextPopup, que, aparentemente, también obtiene las coordenadas del cursor de la misma forma que el evento OnMouseDown.
En fin, tendré que inventarme algo para poder prolongar la longitud de la línea de tiempos, y poder seguir desplazándola con el ratón quizás dividiéndola en dos paneles con dos imágenes, uno a continuación del otro.
¡Un saludo y Gracias de nuevo!
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
sin imagen de perfil
Val: 62
Oro
Ha aumentado 1 puesto en Delphi (en relación al último mes)
Gráfica de Delphi

Problema con el evento OnMuoseDown en un TImage

Publicado por Ezequiel (1228 intervenciones) el 16/02/2021 01:24:07
O como en la misma pregunta que te puse, si x es menor a cero, súmale 65000, creo, checa la pregunta a ver si se puede así.
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