Ver Mensaje Individual
  #1  
Antiguo 20-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Reputación: 2
navbuoy Va por buen camino
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();

}

Última edición por navbuoy fecha: 20-10-2024 a las 01:26:16.
Responder Con Cita