Форум — Ответы ( К темам )
? | Артём: Как двигать несколько форм сразу (01-04-2003 13:02:00) |
Как двигать несколько форм сразу | |
Petro (01-04-2003 14:50:49) | |
Точно также, как и одну — задавая координаты. :)
| |
Георгий (01-04-2003 18:38:03) | |
Petro: я тоже хотел так ответить — но как узнать на сколько передвинул пользователь форму? | |
Petro (02-04-2003 06:47:08) | |
2 Георгий: Запоминать предыдущие координаты можно в обработчике события... А может это и не нужно — смотря какая постановка задачи. 2 Артем: В чем, собственно говоря, трабла? 8) | |
Георгий (02-04-2003 23:42:51) | |
"Запоминать предыдущие координаты можно в обработчике события... " какого события? | |
Артём (04-04-2003 12:17:03) | |
хочу сделать как в винампе
| |
Fred (06-04-2003 05:20:42) | |
Передо мной тоже стояла аналогичная проблема. Могу предложить следующий пример совместного перемещения и именеия размеров трех форм. 1. Создай три формы так чтобы высота первой формы приблизительно была равна сумме высот 2-й и 3-й форм. 2. Вставь в главный файл проекта: #include "frm_1.h" // Это нужно вставить. #include "frm_2.h" // Это нужно вставить. #include "frm_3.h" // Это нужно вставить. WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->CreateForm(__classid(TForm2), &Form2); Application->CreateForm(__classid(TForm3), &Form3); Form1->WindowProc = Form1->MyWindowProc; // Это нужно вставить. Form2->WindowProc = Form2->MyWindowProc; // Это нужно вставить. Form3->WindowProc = Form3->MyWindowProc; // Это нужно вставить. Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } 3. Создай для каждой формы процедуры: ФОРМА 1: void __fastcall TForm1::MyWindowProc(TMessage &msg) { WndProc(msg); //--- if( Tag ) return; Tag = 1; if( msg.Msg==WM_MOVE || msg.Msg==WM_SIZE ) { if( Form2->Tag == 0 ) Form2->SetBounds( Left+Width, Top, Form2->Width, Form2->Height ); if( Form3->Tag == 0 ) Form3->SetBounds( Left+Width, Top+Form2->Height, Form2->Width, Height-Form2->Height ); } Tag = 0; }//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ФОРМА 2: void __fastcall TForm2::MyWindowProc(TMessage &msg) { WndProc(msg); //--- if( Tag ) return; Tag = 1; if( msg.Msg==WM_MOVE || msg.Msg==WM_SIZE ) { if( Form1->Tag == 0 ) Form1->SetBounds( Left-Form1->Width, Top, Form1->Width, Form1->Height ); if( Form3->Tag == 0 ) Form3->SetBounds( Left, Top+Height, Width, Form1->Height — Height ); } Tag = 0; }//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ФОРМА 3: void __fastcall TForm3::MyWindowProc(TMessage &msg) { WndProc(msg); //--- if( Tag ) return; Tag = 1; if( msg.Msg==WM_MOVE || msg.Msg==WM_SIZE ) { if( Form1->Tag == 0 ) Form1->SetBounds( Left-Form1->Width, Top-Form2->Height, Form1->Width, Form1->Height ); } Tag = 0; }//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Проверь как работает. У меня замечательно получилось. Программа работает не только на совместное перемещение форм, но и на изменение размеров одной из форм. | |
Fred (06-04-2003 05:23:27) | |
Почему-то в комментарии к фунции WndProc(msg) всякая ахинея вставилась :)
|