Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > При BorderStyle=dsNone можно было двигать форму


Автор: MAXIQ 8.1.2007, 00:19
Здравствуйте! У меня интерфейс приложения не должен иметь верхней части формы, предлагаемой по умолчанию в Borland C++ Builder, то есть имени формы, кнопок минимизации, максимизации, и закрытия. А предлагать пользователю свой интерфейс с теми же кнопками, но нарисованными уже мной, фоном формы то же служит рисунок.  Однако если BorderStyle=dsNone то форма теряет подвижность, а в конкретном моем случае это не есть хорошо. Большая просьба подсказать как с этим бороться, желатьельно в примерах листинга и иллюстрациях)). Данная тема проскакивала на форуме, однако я там ничего не понял, ибо являюсь еще тем ламмером. Заранее признателен за сотрудничество.

Автор: anwe 8.1.2007, 00:55
Тебе надо следить за сообщениями типа WM_NCHITTEST, которое посылается при перемещении указателя мыши по нерабочей части окна (заголовок, рамки и т.д.). Тебе надо реализовать нестандартную обработку этого сообщения (без его стандартной обработки). Вся суть здесь лежит в том, чтобы результату сообщения WM_NCHITTEST присвоить значение HTCAPTION, чтот будет означать, что, якобы, курсор находится над заголовком.
Такая теория. Как это сделать безо всяких хуков в 3 строки знаю, но на делфях. Если надо и сможешь разобраться могу показать.

Автор: Grom 8.1.2007, 01:26
MAXIQ, в хедере пиши

Код
private:
        void __fastcall OnMove(TWMNCHitTest &Message);
public:        // User declarations
        BEGIN_MESSAGE_MAP
           MESSAGE_HANDLER (WM_NCHITTEST,TWMNCHitTest,OnMove)
        END_MESSAGE_MAP (TComponent)


а в срр

Код

void __fastcall TForm1::OnMove(TWMNCHitTest &Message)
{
   Message.Result = HTCAPTION;
}

Автор: Link90 8.1.2007, 10:08
На OnMouseDown нужного тебе элемента (за который будешь такскать форму) напиши:
Код

long SC_DRAGMOVE = 0xF012;
if(Button == mbLeft)
{
ReleaseCapture();
SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
}

Автор: MAXIQ 8.1.2007, 16:34
Спасибо всем участникам, код предложенный Grom абсолютно работоспособен! Если не трудно, то для полного раскрытия темы я бы попросил anwe написать подобную операцию на делфи, уже не ради решения конкретной проблемы, а для благодарных потомков, дабы не искали и не переспрашивали.  После чего вопрос можно считать полностью исчерпанным. Так же спасибо Link90 за внесенное разнообразие в методах решения поднятого вопроса.

Автор: MAXIQ 9.1.2007, 20:07
Хотел еще добавить: код от  Grom глушит все кнопки на форме, видно он перехватил все сообщения). Нормально работает код Link90.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)