Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   ¿Cómo mover Scrollbar durante un DragOver? (https://www.clubdelphi.com/foros/showthread.php?t=25567)

roedecker 27-09-2005 10:48:41

¿Cómo mover Scrollbar durante un DragOver?
 
Hola.

No estoy muy seguro de que éste sea el subforo adecuado para esta pregunta, pero allá voy:

Estoy haciendo un formulario con un TFrame que a su vez tiene un TImage en ocasiones mayor que el propio frame, con lo que aparecen las consiguientes Scrollbars.

Ahora bien, necesito hacer un Drag&Drop de un elemento del frame a otro punto del mismo, y me gustaría saber cómo podría mover las scrollbars mientras estoy realizando el DragOver, como, por ejemplo, hace el Explorador de Windows. Es decir, que arrastrando un elemento hacia los extremos del frame, se vaya desplazando la parte "visible" del mismo. Espero haberme explicado bien :p

Gracias.

Edito para añadir que programo en Delphi 7.

Lepe 27-09-2005 12:50:27

Mas o menos puedes enfocarlos así:
Código Delphi [-]
 if RealizandoDragDrop then
 if (Y > frmppal.clientHeight -10) and // si estamos en el borde inferior
 (frmppal.VertScrollBar.Position >=10) then //si la barra no está al principio

    frmppal.VertScrollBar.Position:=frmppal.VertScrollBar.Position-10;
        // movemos la barra

Quizás tengas que poner un timer para que no corra mucho la barra.

EDITO: Esto lo pones en el FrameMouseMove

Un saludo

roedecker 28-09-2005 11:02:32

Gracias
 
No era exactamente eso lo que precisaba, pero ya lo he adaptado y lo he hecho funcionar. Gracias por encaminarme en la dirección correcta. :)

dec 30-09-2005 09:48:08

Hola,

Cita:

Empezado por roedecker
No era exactamente eso lo que precisaba, pero ya lo he adaptado y lo he hecho funcionar. (...)

¡Pues ya podías exponer cómo lo hiciste! ¿Quién sabe si la solución le vendrá bien a alguien? ;)

roedecker 30-09-2005 12:07:45

Ok, ok, aquí va...
 
En el evento DragOver del TImage, siendo FrameMapa el TFrame:

Código Delphi [-]
//movimiento hacia la izquierda
  if (X < FrameMapa.HorzScrollBar.Position + 10) then
      FrameMapa.HorzScrollBar.Position := FrameMapa.HorzScrollBar.Position - FrameMapa.HorzScrollBar.Increment;

//movimiento hacia la derecha
  if (X > FrameMapa.clientWidth + FrameMapa.HorzScrollBar.Position - 10) then
      FrameMapa.HorzScrollBar.Position := FrameMapa.HorzScrollBar.Position + FrameMapa.HorzScrollBar.Increment;

//movimiento hacia arriba
  if (Y < FrameMapa.VertScrollBar.Position + 10) then
      FrameMapa.VertScrollBar.Position := FrameMapa.VertScrollBar.Position - FrameMapa.VertScrollBar.Increment;

//movimiento hacia abajo
  if (Y > FrameMapa.clientHeight + FrameMapa.VertScrollBar.Position - 10) then
      FrameMapa.VertScrollBar.Position := FrameMapa.VertScrollBar.Position + FrameMapa.VertScrollBar.Increment;
Los ifs dependen de la posición del correspondiente ScrollBar ya que las X e Y del TImage van cambiando según cambia la parte visible del mismo.

Lo curioso es que lo he implementado en otro formulario parecido (usan incluso los mismos TFrame y TImage), y mientras que en uno el movimiento tiene una velocidad razonable, en el otro va muy rápido. :confused:


La franja horaria es GMT +2. Ahora son las 07:20:09.

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