проблема с TImage
У меня на форме есть несколько Image-ей, как сделать так чтобы во время выполнения программы их можно было таскать и изменять их размеры, как при дизайне формы.
Image->Height=New_Height;
Image->Width=New_Width;
Image->SetBounds(Image->Left+X-X0,Image->Top+Y-Y0,Image->Width,Image->Height);
P.S.:Почитай буксировку.
самая заморочка как изменить размер...
Извинтеляюсь за не совсем правильный вопрос
Мне нужно чтобы размер изменялся при помощи мыши
Цитата:
Originally posted by kasyava
ну с тем чтобы таскать проблем у меня вроде нет...
самая заморочка как изменить размер...
Извинтеляюсь за не совсем правильный вопрос
Мне нужно чтобы размер изменялся при помощи мыши
ну с тем чтобы таскать проблем у меня вроде нет...
самая заморочка как изменить размер...
Извинтеляюсь за не совсем правильный вопрос
Мне нужно чтобы размер изменялся при помощи мыши
Обрабатывай событие на Image MouseDown
и MouseMove.
Создай глобалки int X и Y, которые будут являться приращением размеров картинки.
А размер меняй в событии клика.
Image->Height+=Y;
Image->Width+=X;
Цитата:
Originally posted by kasyava
Люди добрые подмогните начинающему советом...
Люди добрые подмогните начинающему советом...
1. В описание формы добавь строчку
Код:
int m_DwnX, m_DwnY;
2. Опиши события OnMouseDown и OnMouseMove
Код:
//------------------------------------------------
void __fastcall TfMain::ImageMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
m_DwnX = X;
m_DwnY = Y;
}
//------------------------------------------------
void __fastcall TfMain::ImageMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
const int DwnArea = 10;
TImage *Im = (TImage *)Sender;
int W = Im->Width,
H = Im->Height,
xC = Im->Width / 2,
yC = Im->Height / 2;
if(Shift.Contains(ssLeft)) { // If LeftMousDown, change position or size
if(Im->Cursor == crSizeAll) {
Im->Left += X - m_DwnX;
Im->Top += Y - m_DwnY;
}else {
if(Im->Cursor != crSizeNS) {
if(X < xC) {
Im->Left += X - m_DwnX;
Im->Width -= X - m_DwnX;
}else Im->Width = X ;
}
if(Im->Cursor != crSizeWE) {
if(Y < yC) {
Im->Top += Y - m_DwnY;
Im->Height -= Y - m_DwnY;
}else Im->Height = Y;
}
}
}else {
if( (abs(Y - yC) < DwnArea ) && ((X < DwnArea)||(X > W-DwnArea)) ) Im->Cursor = crSizeWE;
else if( (abs(X - xC) < DwnArea ) && ((Y < DwnArea)||(Y > H-DwnArea)) ) Im->Cursor = crSizeNS;
else if( ((X<DwnArea)&&(Y<DwnArea)) || ((X>W-DwnArea)&&(Y>H-DwnArea)) ) Im->Cursor = crSizeNWSE;
else if( ((X<DwnArea)&&(Y>H-DwnArea)) || ((X>W-DwnArea)&&(Y<DwnArea)) ) Im->Cursor = crSizeNESW;
else Im->Cursor = crSizeAll;
}
}
//------------------------------------------------
void __fastcall TfMain::ImageMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
m_DwnX = X;
m_DwnY = Y;
}
//------------------------------------------------
void __fastcall TfMain::ImageMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
const int DwnArea = 10;
TImage *Im = (TImage *)Sender;
int W = Im->Width,
H = Im->Height,
xC = Im->Width / 2,
yC = Im->Height / 2;
if(Shift.Contains(ssLeft)) { // If LeftMousDown, change position or size
if(Im->Cursor == crSizeAll) {
Im->Left += X - m_DwnX;
Im->Top += Y - m_DwnY;
}else {
if(Im->Cursor != crSizeNS) {
if(X < xC) {
Im->Left += X - m_DwnX;
Im->Width -= X - m_DwnX;
}else Im->Width = X ;
}
if(Im->Cursor != crSizeWE) {
if(Y < yC) {
Im->Top += Y - m_DwnY;
Im->Height -= Y - m_DwnY;
}else Im->Height = Y;
}
}
}else {
if( (abs(Y - yC) < DwnArea ) && ((X < DwnArea)||(X > W-DwnArea)) ) Im->Cursor = crSizeWE;
else if( (abs(X - xC) < DwnArea ) && ((Y < DwnArea)||(Y > H-DwnArea)) ) Im->Cursor = crSizeNS;
else if( ((X<DwnArea)&&(Y<DwnArea)) || ((X>W-DwnArea)&&(Y>H-DwnArea)) ) Im->Cursor = crSizeNWSE;
else if( ((X<DwnArea)&&(Y>H-DwnArea)) || ((X>W-DwnArea)&&(Y<DwnArea)) ) Im->Cursor = crSizeNESW;
else Im->Cursor = crSizeAll;
}
}
//------------------------------------------------
Прорисовка сильно глючит... Разберись с алгоритмом изменения положения и размеров, а потом заюзай OnMouseUp и все изменения делай только по этому событию