C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TImage, Перетаскивать и изменять размер TImage
kasyava
Отправлено: 27.07.2005, 08:01


Ученик-кочегар

Группа: Участник
Сообщений: 17



Люди добрые подмогните начинающему советом...
У меня на форме есть несколько Image-ей, как сделать так чтобы во время выполнения программы их можно было таскать и изменять их размеры, как при дизайне формы.
Konstantine
Отправлено: 27.07.2005, 09:02


Мастер участка

Группа: Модератор
Сообщений: 545



"таскать" — это так:
вот пример:
CODE
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if((Old_X!=-1)&&(Old_Y!=-1))
{if(Shift.Contains(ssLeft))
{Image1->Left=Image1->Left+X-Old_X;
Image1->Top=Image1->Top+Y-Old_Y;}
else {Old_X=-1;Old_Y=-1;}
}
else
if(Shift.Contains(ssLeft)) {Old_X=X;Old_Y=Y;}
}

Изменять размер — аналогично, если было-бы за что зацепиться smile.gif

Отредактировано Konstantine — 27/07/2005, 09:04
kasyava
Отправлено: 27.07.2005, 09:17


Ученик-кочегар

Группа: Участник
Сообщений: 17



ну с тем чтобы таскать проблем у меня вроде нет...
самая заморочка как изменить размер...
seg_r
Отправлено: 27.07.2005, 09:19


Дежурный стрелочник

Группа: Участник
Сообщений: 74



Вот так можно изменять размер...
ну и + предыдущий ответ — перемещать
CODE

bool ch=true;
int Old_X,Old_Y;

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
     int X, int Y)
{

if (ch==true)
{
if ((X>Form1->Image1->Width-10)&&(X<Form1->Image1->Width))
if ((Y>Form1->Image1->Height-10)&&(Y<Form1->Image1->Height))
 {
   if (Shift.Contains(ssLeft))
    {
     ch=false;

     Form1->Image1->Width=X;
     Form1->Image1->Height=Y;
    }
 }
}
else
{
   if (Shift.Contains(ssLeft))
    {
     ch=false;
     Form1->Image1->Width=X;
     Form1->Image1->Height=Y;
    }
   else
    {
     ch=true;
    }
}

/// /// /// /// /// /// /// /// ///

if ((X<Form1->Image1->Width-10)&&(X>=0))
if ((Y<Form1->Image1->Height-10)&&(Y>=0))
{
if((Old_X!=-1)&&(Old_Y!=-1))
 {if(Shift.Contains(ssLeft))
   {Image1->Left=Image1->Left+X-Old_X;
    Image1->Top=Image1->Top+Y-Old_Y;}
  else {Old_X=-1;Old_Y=-1;}
  }
else
  if(Shift.Contains(ssLeft)) {Old_X=X;Old_Y=Y;}
}
}
//---------------------------------------------------------------------------
seg_r
Отправлено: 27.07.2005, 09:21


Дежурный стрелочник

Группа: Участник
Сообщений: 74



Да еще

у Image1 свойства...

AutoSize = false
Stretch = true
kasyava
  Отправлено: 27.07.2005, 09:26


Ученик-кочегар

Группа: Участник
Сообщений: 17



Огромное спасибо!!!! biggrin.gif
esh
Отправлено: 27.07.2005, 14:51


Дежурный стрелочник

Группа: Участник
Сообщений: 71



А вот еще вариант. Правда редактор форм не открывается -- в упор не видит мой класс TGroupBoxExt.
Но работает. Только когда открываете проект нужно нажать Cancel.

Можно использовать и стандартный класс TGroupBox, но тогда уберите
WS_SYSMENU|WS_MAXIMIZEBOX|WS_MINIMIZEBOX

Иначе если закроете окно, то открыть его будет очень сложно smile.gif

В моем варианте перегружена функция окна, поэтому окно можно закрывать, все равно оно не закроется,
а только спрячется.

User Attached Image Скачать файл
sizable_image_api.rar_



Вернуться в Вопросы программирования в C++Builder