Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-06-2013
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Guauuuuu, tio no se que haria yo mal, quizas es que activas alguna propiedad o algo pero tu proyecto va muy bien y solo le hice un par de cambios para que funcione mas o menos como quiero porque por ejemplo en el tuyo cuando mueves automaticamente el puntero se va a la posicion x=0, y=0 de la imagen y le quité lo de que tenga que pulsar la tecla de Ctrol y va genia pero me falta un detalle:

Código:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TPoint *TheSpot = new TPoint;

__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}

bool Moving = false;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Image1->Picture->LoadFromFile(ExtractFilePath(Application->ExeName)+
    "LogoRad.bmp");
}

void __fastcall TForm1::ControlMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  //Moving = Shift.Contains(ssCtrl);
  Moving = true;
  TheSpot->x = X;
  TheSpot->y = Y;
}


void __fastcall TForm1::ControlMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
  TControl *Ctrl = static_cast<TControl*>(Sender);

  if (Moving) {
    Screen->Cursor = crCross;
    Ctrl->Left = X + Ctrl->Left - TheSpot->x;
    Ctrl->Top  = Y + Ctrl->Top - TheSpot->y;
  }
}

void __fastcall TForm1::ControlMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  Moving = false;
  Screen->Cursor = crDefault;
}
Quiero que cuando arrastres la imagen y llegues al final de la imagen por cualquiera de sus lados ya no pueda desplazarse mas, o sea, que puedas arrastrar hasta que por ejemplo la parte superior de la imagen llegue a la parte superior del scrollbox y lo mismo por cualquiera de sus lados, no se si me explico. Tiene que ser super facil pero no veo la forma.
Responder Con Cita
  #2  
Antiguo 03-06-2013
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
He probado esto:
Código:
if((Ctrl->Left + X + Ctrl->Left - TheSpot->x < 0) || (Ctrl->Left < 0 && Ctrl->Width + Ctrl->Left - ScrollBox1->Width >= 0))
{
       Ctrl->Left = X + Ctrl->Left - TheSpot->x;
}
Pero no funciona bien, solo para impedir pasarnos por la izquierda pero por la derecha no. ¿como puede ser? Tengo un mareo ya con tanto left, width, x, ... jajaja.
Responder Con Cita
  #3  
Antiguo 03-06-2013
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Al final lo he conseguido con esto:

Código:
void __fastcall TForm1::ControlMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
        TControl *Ctrl = static_cast<TControl*>(Sender);

        if (Moving)
        {
                if((Ctrl->Left + X + Ctrl->Left - TheSpot->x <= 0) &&
                   (Ctrl->Width + Ctrl->Left + X + Ctrl->Left -  TheSpot->x - ScrollBox1->Width >= 0) &&
                   (Ctrl->Top + Y + Ctrl->Top - TheSpot->y <= 0) &&
                   (Ctrl->Height + Ctrl->Top + Y + Ctrl->Top - TheSpot->y - ScrollBox1->Height >= 0))
                {
                        Ctrl->Left = X + Ctrl->Left - TheSpot->x;
                        Ctrl->Top  = Y + Ctrl->Top - TheSpot->y;
                }
                else if((Ctrl->Left + X + Ctrl->Left - TheSpot->x <= 0) &&
                   (Ctrl->Width + Ctrl->Left + X + Ctrl->Left - TheSpot->x - ScrollBox1->Width >= 0))
                {
                        Ctrl->Left = X + Ctrl->Left - TheSpot->x;
                }
                else if((Ctrl->Top + Y + Ctrl->Top - TheSpot->y <= 0) &&
                   (Ctrl->Height + Ctrl->Top + Y + Ctrl->Top - TheSpot->y - ScrollBox1->Height >= 0))
                {
                        Ctrl->Top  = Y + Ctrl->Top - TheSpot->y;
                }
        }
}
Solo veo un problema y es que cuando lo empiezo a arrastrar sin soltar y arrastro mucho empieza como a quedarse congelado el programa y no se actualiza la ventana. No se si es cosa de mi código o es cosa del ordenador que últimamente con las calores no va muy bien. ¿Alguien puede analizarlo y decirme si ve algo raro? Si se puede simplificar mas mejor pero yo no he visto otra manera.
Responder Con Cita
  #4  
Antiguo 03-06-2013
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Me di cuenta de que algo raro pasaba y que hacia la derecha y hacia abajo no mostraba toda la imagen y al final queda así:

Código:
void __fastcall TForm1::ImageMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
        //Aqui hacemos que cuando arrastremos la imagen esta se vaya moviendo por el ScrollBox
        //y le asignamos el cursor deseado
        TControl *Ctrl = static_cast<TControl*>(Sender);

        if (Moving)
        {
                if((Ctrl->Left + X + Ctrl->Left - TheSpot->x <= 0) &&
                   (Ctrl->Width - ScrollBox->Width + Ctrl->Left + X - TheSpot->x >= -3) &&
                   (Ctrl->Top + Y + Ctrl->Top - TheSpot->y <= 0) &&
                   (Ctrl->Height - ScrollBox->Height + Ctrl->Top + Y - TheSpot->y >= -3))
                {
                        Ctrl->Left = X + Ctrl->Left - TheSpot->x;
                        Ctrl->Top  = Y + Ctrl->Top - TheSpot->y;
                }
                else if((Ctrl->Left + X + Ctrl->Left - TheSpot->x <= 0) &&
                   (Ctrl->Width - ScrollBox->Width + Ctrl->Left + X - TheSpot->x >= -3))
                {
                        Ctrl->Left = X + Ctrl->Left - TheSpot->x;
                }
                else if((Ctrl->Top + Y + Ctrl->Top - TheSpot->y <= 0) &&
                   (Ctrl->Height - ScrollBox->Height + Ctrl->Top + Y - TheSpot->y >= -3))
                {
                        Ctrl->Top  = Y + Ctrl->Top - TheSpot->y;
                }
        }
}
Funciona bien pero no se porque cuando llego al final de la imagen le falta un pelin para llegar al final de ella y tengo que soltar, hacer clic de nuevo y volver a arrastrar. El -3 es porque el borde del ScrollBox me tapa un pelin la imagen por alli y con ese -3 se ve entera.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar estructura Type de delphi a Builder.. Novatin C++ Builder 4 31-05-2013 19:00:35
pasar codigo de delphi a c++ Builder rxaxx9 C++ Builder 2 13-05-2012 06:27:17
codigo en delphi a c++ builder zidfrid C++ Builder 4 09-07-2008 14:34:29
Convertir codigo Delphi a Builder _Willa C++ Builder 3 15-02-2008 11:37:10
Cambiando el codigo de delphi a builder... paco_galo C++ Builder 5 03-12-2007 22:14:54


La franja horaria es GMT +2. Ahora son las 23:04:43.


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