|
빌더테스트 님이 쓰신 글 :
: 폼 위에 버튼을 몇개 두구서 사용자가 원하는 위치에 배치해서 사용하도록
:
: 드래그로 옮기게 하구 싶은데 .. 잘 않되는군요
:
: 참고할만한 소스 같은거 없을 까요~~
:
: 그럼
두가지 예제입니다.
한가지는 조금 다른 예제이겠지만..
우선은 이게 더 재미있을꺼 같아서요..
예전에 빌더 Q&A뒤지다가 나온 소스구요..
void __fastcall TForm1::Button1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if (Shift.Contains(ssLeft)){
TControl *TempControl = dynamic_cast<TControl *>(Sender);
TPoint pt;
pt.x = TempControl->BoundsRect.Left;
pt.y = TempControl->BoundsRect.Top;
ImageList1->DragMove( pt.x + X - DownPos.x, pt.y + Y - DownPos.y );
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TRect R;
Graphics::TBitmap *Bmp = new Graphics::TBitmap;
R = dynamic_cast<TControl *>(Sender)->BoundsRect;
Bmp->Width = R.Right - R.Left;
Bmp->Height = R.Bottom - R.Top;
BitBlt( Bmp->Canvas->Handle, 0, 0, Bmp->Width, Bmp->Height,
GetDC(dynamic_cast<TControl *>(Sender)->Parent->Handle), R.Left, R.Top, SRCCOPY );
ImageList1->Clear();
ImageList1->Width = Bmp->Width;
ImageList1->Height= Bmp->Height;
ImageList1->Add( Bmp, NULL );
ImageList1->BeginDrag(dynamic_cast<TControl *>(Sender)->Parent->Handle, R.Left, R.Top );
DownPos = Point( X, Y );
delete Bmp;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
ImageList1->EndDrag();
TControl *TempControl = dynamic_cast<TControl *>(Sender);
X += TempControl->Left;
Y += TempControl->Top;
TempControl->SetBounds( X - DownPos.x, Y - DownPos.y,
TempControl->Width, TempControl->Height);
TempControl->Invalidate();
Invalidate();
}
두번째꺼는 소스를 좀 고쳐서 사용하시면 될꺼에요..
그럼 좋은 하루 되시길~~
/////////////// 두번째
void __fastcall TForm1::Button1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if ( !bClickFlag )
bClickFlag = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if ( bClickFlag ) {
Button1->Left += X;
Button1->Top += Y;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if ( bClickFlag )
bClickFlag = false;
}
//---------------------------------------------------------------------------
|