Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Движения мышью


Автор: Salatovec 14.12.2008, 23:52
Доброго времени суток всем, подскажите пожалуйста как можно реализовать условие изменения координат курсора в большую сторону и в меньшую, поясняю вопрос: например есть image с картинкой мы на него кликаем мышкой и начинаем перемещать курсор мышки вверх и вниз и вот если курсор перемещается вверх - image увеличивается в размерах, а если вуниз - уменьшается. Подскажите пожалуйста!?

Автор: PochtiCoder 15.12.2008, 00:13
я понял что тебе обычный зум надо реализовать.
Ну так и определи обработчики

MouseDown, MouseMove и MouseUp

в MouseDown запомни координаты клика
в MouseMove вычитай из текущего Y начальный Y и соответственно меняй маштаб

На счет масштаба:
у Image установи свойство Stretch = true
и просто изменяй размеры самого компонента TImage - картинка растянется под него 
 


Автор: Salatovec 15.12.2008, 00:19
Да ты прав надо реализовать зум, но именно по зажатой кнопке мыши, как к примеру в 3д играх зажимают кнопку мыши и крутят камеру по нааправлению мыши. А не мог бы ты описать пару функций берущих координаты курсора  и запоминающих их, а то я в билдере в 1 раз мышь затрагиваю =\ Буду признателен! 

Автор: PochtiCoder 15.12.2008, 00:45
ну примерно так:

Код

int BeginY=0;
int BeginW,BeginH=0;
bool Press = false;
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  Press = true;
  BeginY = Y;
  BeginW = Image1->Width;
  BeginH = Image1->Height;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
  if( Press )
  {
    double k = 0.01*(Y - BeginY);
    if( k > 0 )
    {
      Image1->Width = BeginW * k;
      Image1->Height = BeginH * k;
    }
    else
    {
      k = -k;
      Image1->Width = BeginW * (1-k);
      Image1->Height = BeginH * (1-k);
    }
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  Press = false;
}
//---------------------------------------------------------------------------

 

только с математикой не слишком гладко smile, так что с коэффициентом k сам разберешся

Автор: Salatovec 15.12.2008, 00:54
PochtiCoder,  Спасибо)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)