Форум — Ответы ( К темам )
? | job_andrey: Как сделать "ручку-хваталку" для окна? (27-02-2003 15:57:19) |
Можно ли каким-нить несложным билдеровским способом сотворить "ручку-хваталку" для окна. Т.е., допустим, что у меня в окне есть какой-нить простой элемент, например Image. Я хочу схватить мышой за него и dragить его вместе с окном. | |
Andrew (27-02-2003 19:38:00) | |
Вот не совсем билдеровским, но думать не надо :) void __fastcall TfrmMain::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { const int SC_DRAGMOVE = 0xF012;// if(WindowState!=wsMaximized) { //Проверка, чтобы не таскать распахнутое ReleaseCapture(); // Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0); } //if(WindowState!=wsMaximized) } А если хочется чисто билдеровским :))), то: bool bMove = false; //Признак операции перемещения TPoint StartPos; //Опорная точка void __fastcall TfrmMain::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { // if (Button == mbLeft) { //Если нажата левая кнопка, то StartPos = Point(X, Y); //Запоминаем позицию курсора bMove = true; //Взводим Признак режима перемещения } //if (Button == mbLeft) } // //--------------------------------------------------------------------------- void __fastcall TfrmMain::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { // if (bMove) { //Если в режиме перемещения, то Left += X — StartPos.x; //Сдвинуть по горизонтали Top += Y — StartPos.y; //Сдвинуть по вертикали StartPos = Point(X, Y); //Запомнить новую позицию } //if (bMove) //Чтобы уменьшить колич перемещений можно менять сразу все координату через //BoundsRect } // //--------------------------------------------------------------------------- void __fastcall TfrmMain::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { // if (bMove) // StartPos = Point(0, 0); //Отменить режим } // //--------------------------------------------------------------------------- | |
Andrew (27-02-2003 19:38:57) | |
Немного промахнулся ... void __fastcall TfrmMain::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { // if (bMove) // bMove = false; //Отменить режим } // //--------------------------------------------------------------------------- | |
Владимир (01-03-2003 16:36:21) | |
Как схватить окно за любой элемент и таскать его — это уже есть
в этом форуме
Вот нашел
// таскаем форму за форму (вместо формы поместите этот код например // в TLabel и будете таскать за TLabel и т.д.) void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { const int SC_DRAGMOVE = 0xF012; if(WindowState!=wsMaximized) { ReleaseCapture(); Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0); } } |