Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Mover una imagen con el ratón

Aunque el título (y la intención original) del truco trata de cómo mover una imagen con el ratón, al estilo de la herramienta "Hand" del Acrobat Reader, este truco es aplicable a cualquier control con barras de desplazamiento.

Como ejemplo supongamos que tenemos una imagen (TImage) dentro de un Form de tal manera que la imagen es más grande que el área del Form, por lo tanto, éste tiene barras de desplazamiento:

Para conseguir esto, hay que jugar con los eventos OnMouseDown, OnMouseMove y OnMouseUp del siguiente modo:

En primer lugar, necesitamos una variable global para almacenar el punto sobre el que se encuentra el cursor en cada momento.

Código Delphi [-]
  private
    {Variables globales -------------------------------------------------------}
    FPunto: TPoint;

// Ahora, los eventos:

{OnMouseDown ------------------------------------------------------------------}
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

  {Tomamos la posición del cursor EN LA PANTALLA para evitar que se produzca un
   salto en el primer desplazamiento.}
  GetCursorPos(FPunto);

  {Ponemos un cursor que indique que se va a mover la imagen.}
  Screen.Cursor := crSizeAll;

end;{OnMouseDown}

{OnMouseMove ------------------------------------------------------------------}
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  NuevoPunto: TPoint;
begin

  if ssLeft in Shift then begin {Movemos la imagen al pinchar sobre la misma.}

    {Tomamos las coordenadas de cada nuevo punto al que se mueve el cursor.}
    GetCursorPos(NuevoPunto);

    {Provocamos el movimiento utilizando las barras de desplazamiento del form.}
    HorzScrollBar.Position := HorzScrollBar.Position + (FPunto.X - NuevoPunto.X);
    VertScrollBar.Position := VertScrollBar.Position + (FPunto.Y - NuevoPunto.Y);

    {Recordamos la nueva posición del cursor.}
    FPunto := NuevoPunto;

  end;{if ssLeft in Shift}

end;{OnMouseMove}

{OnMouseUp --------------------------------------------------------------------}
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

  {Dejamos el cursor como estaba}
  Screen.Cursor := crDefault;

end;{OnMouseUp}

Si p.ej. la imagen (o lo que queremos desplazar) está en un ScrollBox en lugar de directamente sobre el form, en el OnMouseMove tendremos que referirnos a las barras de desplazamiento del ScrollBox en lugar de a las del form.

NOTA:

Es importante el matiz de que tomamos las coordenadas absolutas del cursor en la pantalla (GetCursorPos) y no las coordenadas del evento OnMouseMove (parámetros X e Y). Si no lo hacemos así, el movimiento se produce de forma irregular y poco "suave". Haced la prueba y vereis.
Responder Con Cita
  #2  
Antiguo 18-01-2023
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.494
Poder: 21
MAXIUM Va camino a la fama
Hola DEC, como siempre, magnífico aportes.

La consulta es, ¿se pueden esconder los scrollbar?
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


La franja horaria es GMT +2. Ahora son las 02:19:45.


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