Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/48: Рейтинг темы: голосов - 48, средняя оценка - 4.56
38 / 24 / 4
Регистрация: 21.02.2009
Сообщений: 249
1

Перемещение формы при BorderStyle=bsNone

07.05.2009, 00:45. Показов 9674. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ув.программисты,возникла проблемма с перемещением формы при BorderStyle=bsNone.Как можно сделать чтобы при нажатии мышкой в любое место формы она перещалась так как будто мы перемещаем ее с BorderStyle=bsSizeable.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2009, 00:45
Ответы с готовыми решениями:

Перетаскивание формы со свойством BorderStyle равным bsNone
Не поскажите обработчики событий для перетаскивания формы со свойством BorderStyle=bsNone, очень...

RAD XE :: TEdit :: if (BorderStyle == bsNone) {AutoSize не работает}
Всем желаю здравствовать:) Embarcadero® C++Builder® XE Version 15.0.3890.34076 AutoSize...

Изменение размеров формы без рамки (bsnone)
как правельно изменить размер формы ? вобщем код: bool hit = false; void __fastcall...

Задать Icon при BorderStyle = bsToolWindow
Есть ли возможность при BorderStyle = bsToolWindow к форме прикрутить иконку? Если да, то каким...

9
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
07.05.2009, 00:59 2
Когда кнопка нажата, запоминаем координаты, когда mouse move, соответственно, отсчитываем смещение от запомненных координат и смещаем главную форму на такое же расстояние.
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
07.05.2009, 01:06 3
на билдере даже не знаю как...на Дельфи выглядело примерно так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
type
  TForm1 = class(TForm)
  private
  { Private Declaration }
  procedure WMNCHitTest(var M: TWMNCHitTest); message WM_NCHitTest;
  public
  { Public Declaration}
  end;
 
{ . . . }
 
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest)
begin
inherited;
if M.Result = htClient then M.Result := htCaption;
end;
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
07.05.2009, 01:16 4
Monte-Cristo, это самый простой вариант и некрасивый, так как, теперь любое взаимодействие с формой будет как с кэпшном. Щелкни-ка на ней два раза. Развернулась? Ну вот...а я только перетаскивание хотел...
0
38 / 24 / 4
Регистрация: 21.02.2009
Сообщений: 249
07.05.2009, 06:45  [ТС] 5
Цитата Сообщение от Vourhey Посмотреть сообщение
Когда кнопка нажата, запоминаем координаты, когда mouse move, соответственно, отсчитываем смещение от запомненных координат и смещаем главную форму на такое же расстояние.
я с мышкой раньше не работал.если что то не привильно подскажите пожалуйста.получил вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void __fastcall TClock::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
Clock->Left=X;
Clock->Top=Y;
stop=1;
}
//---------------------------------------------------------------------------
 
void __fastcall TClock::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if (stop==1){
Clock->Left=X;
Clock->Top=Y;
}
}
//---------------------------------------------------------------------------
 
void __fastcall TClock::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
stop=0;
}
//---------------------------------------------------------------------------
Clock- это имя формы,stop использую для остановки перемещения.
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
07.05.2009, 09:58 6
Vourhey, я знаю.... я лишь показал вариант. в своих же проектах я реализовывал так, как посоветовали вы.
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
07.05.2009, 11:08 7
Как таскать форму не за заголовок?

В событие OnMouseDown формы и компонентов, которыми мы собираемся таскать, помещаем код:

Код
if(Button == mbLeft)
        {
        long SC_DRAGMOVE = 0xF012;
        ReleaseCapture();
        SendMessage(Form1->Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
        }
2
38 / 24 / 4
Регистрация: 21.02.2009
Сообщений: 249
08.05.2009, 07:51  [ТС] 8
я нашел такой код.все работает.выкладываю если кому нибудь понадобиться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
void __fastcall TClock::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
GetCursorPos(&MousePnt);
dragging = true;
SetCapture(hWnd);
 
}
//---------------------------------------------------------------------------
 
void __fastcall TClock::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if (dragging==true) // Если нажата кнопка, то...
        {
            // Получить текущую позицию курсора
            GetCursorPos(&point);
            // Откорректировать положение окна
            Clock->Left = Clock->Left+(point.x - MousePnt.x);
            Clock->Top  = Clock->Top +(point.y - MousePnt.y);
 
            // Установить новые размеры окна
            //SetWindowPos(hWnd, NULL, wndrect.left, wndrect.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
            
            // Запоминаем текущую позицию курсора
            MousePnt=point;
        }
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TClock::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if (dragging==true)
        {
            dragging=false;
            ReleaseCapture();
        }
 
}
еще нужно инициализировать переменные
C++
1
2
3
4
5
6
//перемещение формы
bool dragging = false;
POINT MousePnt;
POINT point;
HWND hWnd;
RECT wndrect;
0
Программист TH
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
08.05.2009, 14:53 9
более рационально использовать тот метод, как показал
AntonChik. Просто в FAQ почаще надо заглядывать, где двадцатью способами это реализовано....
0
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
08.05.2009, 22:42 10
Лучший ответ Сообщение было отмечено как решение

Решение

не ломай голову вот самый простой способ: в событие OnMouseDown прописываешь
C++
1
2
ReleaseCapture();
SendMessage(Form1->Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
6
08.05.2009, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2009, 22:42
Помогаю со студенческими работами здесь

Прокрутка формы при BorderStyle = bsNone?
Как сделать прокрутку формы при BorderStyle = bsNone? Сама форма за счет динамически созданных...

Как перетаскивать Form, если BorderStyle = bsNone
как перетаскивать Form, если BorderStyle:=bsNone... создал прог, с условиями...

Ресайз формы при BorderStyle:none
Здравствуйте, то что удалось найти: Point sizePoint = Point.Empty; SizeMode sizeMode =...

Перемещение окна, когда BorderStyle=none
Как осуществить перемещение окна обычным перетягиванием если параметр BorderStyle=none?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru