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();
}