Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Scroll en Stardust para el tema del Terreno Colonias (https://www.clubdelphi.com/foros/showthread.php?t=96907)

navbuoy 20-10-2024 01:14:15

Scroll en Stardust para el tema del Terreno Colonias
 
Bueno, esto es una chorradita pero os lo comparto por si os veis en la situacion:

Resulta que para el tema de colonias de Stardust tengo un terreno de mas dimension que la propia pantalla, asi que hice una funcion para controlar el deltax y deltay del scroll de pantalla y la forma en que lo hice para que lo haga cuando esta en las zonas "Hot" (extremos del TImage donde pinta el terreno) es asi:

en el Evento OnMouseDown de ese TImage donde pinto el terreno (que es la pantalla principal de esa parte de lo de las Colonias) pongo esto para el scroll con el boton derecho del raton:

Código:

if (Button == mbRight)
  {
        // Obtener dimensiones del formulario

        int formHeight = this->ClientHeight;
        int formWidth = this->ClientWidth;

        // Definir el área del borde (por ejemplo, 30 píxeles desde cada borde)

        int borderThreshold = 30;

        // Verificar si el mouse está en la parte superior

        if (Y <= borderThreshold) {
                Scroll2(0, -20);
        }

        // Verificar si el mouse está en la parte inferior

        else if (Y >= formHeight - borderThreshold) {
                Scroll2(0, 20);
        }

        // Verificar si el mouse está en la parte izquierda

        else if (X <= borderThreshold) {
                Scroll2(-20, 0);
        }

        // Verificar si el mouse está en la parte derecha

        else if (X >= formWidth - borderThreshold) {
                Scroll2(20, 0);
        }
  }


de esta forma si situamos el Ratón en uno de los extremos de la pantalla del TImage, y cliqueamos boton derecho, hace el scroll, lo cual es mas comodo que darle a los 4 botones de UP DOWN LEFT y RIGHT que tenia puestos.

y aqui la funcion SCROLL2 (Tened en cuenta que es cosa propia de Stardust, tendriais que adaptarla a vuestro sistema o app eh?)

TABLERO = el TImage donde pinta todo el terreno, construcciones etc... Image3 es digamos un buffer intermedio donde pinto primero el terreno antes de hacer el volcado a TABLERO con todo

Código:

void Scroll2(int deltaX, int deltaY) {
       
    // Actualiza el desplazamiento
        offsetX += deltaX;
        offsetY += deltaY;
       
    // Limita el desplazamiento para no salir de la imagen
        if (offsetX < 0) offsetX = 0;
        if (offsetY < 0) offsetY = 0;
       
    // Asegúrate de no salir de los límites de la imagen
        if (offsetX > Form7->Image3->Picture->Width - Form7->TABLERO->Width)
                offsetX = Form7->Image3->Picture->Width - Form7->TABLERO->Width;
        if (offsetY > Form7->Image3->Picture->Height - Form7->TABLERO->Height)
                offsetY = Form7->Image3->Picture->Height - Form7->TABLERO->Height;
       
      // Redibuja la imagen en el TImage (esto seria para limpiar el TABLERO pero como copio todo encima me lo ahorro)
        //Form7->TABLERO->Canvas->Brush->Color = clWhite; // Fondo blanco (o el color que desees)
        //Form7->TABLERO->Canvas->FillRect(Form7->TABLERO->ClientRect); // Limpia el lienzo


      /// Dibujamos actualizamos la imagen conforme al desplazamiento en que se encuentre el Scroll
 
      // Define el rectángulo de origen
        TRect rectSource(offsetX, offsetY, offsetX + Form7->TABLERO->Width, offsetY + Form7->TABLERO->Height);
       
    // Asegúrate de que el rectángulo de origen no exceda los límites de la imagen
        if (rectSource.Right > Form7->Image3->Picture->Width) rectSource.Right = Form7->Image3->Picture->Width;
        if (rectSource.Bottom > Form7->Image3->Picture->Height) rectSource.Bottom = Form7->Image3->Picture->Height;
       
    // Dibuja la parte visible de la imagen en TABLERO
        Form7->TABLERO->Canvas->CopyRect(Form7->TABLERO->ClientRect, Form7->Image3->Canvas, rectSource);
       
    // Por ultimo Dibujamos la Colonia (construcciones en ella)

    Dibuja_Colonia();

}



La franja horaria es GMT +2. Ahora son las 11:24:02.

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