Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191

Передвижение формы

09.02.2011, 05:33. Показов 3150. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если убрать BorderStyle, то как тогда можно сделать, что бы зажимая ЛКМ в каком-то месте, форма двигалась?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.02.2011, 05:33
Ответы с готовыми решениями:

Передвижение формы
Всем привет) Помогите пожалуйста. На Delphi был код procedure TForm1.sPanel3MouseDown(Sender: TObject; Button: TMouseButton; ...

Передвижение
Есть такой вопрос. Как сделать чтобы при зажатой пускай клавише w, button1 передвигался вверх. Как сделать при нажатии или отпускании...

передвижение картинки
Доброе время суток. Подскажите, пожалуйста, как сделать так, чтоб пользователь мог передвигать картинки? Я пишу нечто подобное пазлам....

23
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 06:37
попробуй
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  long SC_DRAGMOVE = 0xF012;
  if(Button == mbLeft) {
    ReleaseCapture();
    SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
  }
}
Добавлено через 7 минут
Вы медленно, но уверенно двигаетесь к созданию нестандартной формы, я так понимаю , может, поможет : https://www.cyberforum.ru/cpp-... read237216
2
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
09.02.2011, 18:26  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
long SC_DRAGMOVE = 0xF012;
что этот кусок делает?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 18:35
пример не работает ?
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
09.02.2011, 18:55
Цитата Сообщение от ProstoMad Посмотреть сообщение
что этот кусок делает?
Объявляет ненужную переменную. Можешь ее вообще убрать.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 18:59
ProstoMad, такие ленивые , как правило, не выживают
1. long SC_DRAGMOVE = 0xF012; просто так обозначена константа в SDK Windows (Platform), можешь записать её по другому.
2. Условие, TMouseButton Button класс, где и передаются условия по статусу мышки в данный момент
3. ReleaseCapture(); Освобождает мышь от операций
4. SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0); Это функция API , которая говорит окну, что надо тащиться.
1
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
09.02.2011, 19:31
у меня работает код
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
09.02.2011, 19:45  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
ReleaseCapture(); Освобождает мышь от операций
от чего?

Добавлено через 3 минуты
и как сделать что бы можно было передвигать, нажимая только в определённой области?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 20:12
Цитата Сообщение от ProstoMad Посмотреть сообщение
1. от чего?
2. и как сделать что бы можно было передвигать, нажимая только в определённой области?
1. от обработки сообщений для мыши
2. Можно попробовать поставить на форму Panel в нужном месте (определенной области) , сделать ей BevelInner, BevelKind, BevelOuter bvNone - чтобы она не выделялясь на форме, и вставить код сюда:
C++
1
2
3
4
void __fastcall TForm1::Panel1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,    int X, int Y)
{
  // код
}
0
50 / 40 / 5
Регистрация: 30.06.2010
Сообщений: 1,191
09.02.2011, 20:31  [ТС]
а MouseDown разве не при отпускании кнопки работает?

Добавлено через 12 минут
и как с панелью сделать? не получается
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Panel1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 if(Button == mbLeft) {
    ReleaseCapture();
    SendMessage(Handle, WM_SYSCOMMAND, 0, 0);
  }
}
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
09.02.2011, 20:38
Цитата Сообщение от LK Посмотреть сообщение
Можно попробовать поставить на форму Panel в нужном месте (определенной области) , сделать ей BevelInner, BevelKind, BevelOuter bvNone - чтобы она не выделялясь на форме
Это всё выглядит довольно криво.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 20:50
Цитата Сообщение от ProstoMad Посмотреть сообщение
а MouseDown разве не при отпускании кнопки работает?[/CPP]
1. Может, при отпускании MouseUp?
2. все же попробуйте этот код :
C++
1
2
3
4
5
long SC_DRAGMOVE = 0xF012;
  if(Button == mbLeft) {
    ReleaseCapture();
    SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
  }
- только-что проверил - таскается только за панель, в остальных местах - не таскается. Если вы сделали все Bevel bvNone - и панель стала невидимой на форме, может, вы просто в панель не попадаете ? сделайте ей для эксперимента
C++
1
Panel1->Color = clRed;
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
09.02.2011, 20:52
Цитата Сообщение от ProstoMad Посмотреть сообщение
как сделать что бы можно было передвигать, нажимая только в определённой области?
Можно задать эту определенную область через TRect и добавить проверку результата функции PtInRect(). Всё. Основной код выглядел бы примерно так
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    if (Button == mbLeft && PtInRect(MyRect, Point(X, Y))) {
        ReleaseCapture();
        SendMessage(Handle, WM_SYSCOMMAND, 0xF012, 0);
    }
}
Кстати, тут можно было бы использовать и функцию Bounds().
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 20:54
Цитата Сообщение от Inadequate Посмотреть сообщение
Можно задать эту определенную область через TRect и добавить проверку результата функции PtInRect(). Всё.
- тут без примера кода - никак .
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
09.02.2011, 20:58
Цитата Сообщение от LK Посмотреть сообщение
тут без примера кода - никак
Дополнил
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 21:03
Цитата Сообщение от Inadequate Посмотреть сообщение
Можно задать эту определенную область через TRect и добавить проверку результата функции PtInRect(). Всё. Основной код выглядел бы примерно так
C++
1
2
3
4
5
6
7
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,int X, int Y)
{
  if (Button == mbLeft && PtInRect(MyRect, Point(X, Y))) {
  ReleaseCapture();
  SendMessage(Handle, WM_SYSCOMMAND, 0xF012, 0);
  }
}
Кстати, тут можно было бы использовать и функцию Bounds().
[BCC32 Error] Unit1.cpp(21): E2451 Undefined symbol 'MyRect'
- я в курсе, но народ может хотеть подробности .
После некоторой доработки ошибка исчезла, но ...
Где этот MyRect ? Щупал форму всюду - не нашел ...
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
09.02.2011, 21:09
Цитата Сообщение от LK Посмотреть сообщение
Где этот MyRect ?
Ну я думал, что будет понятно, что MyRect - это всего лишь условное обозначение. Можно поступить так
C++
1
2
3
4
5
TRect MyRect;
...
MyRect.Left = 100;
MyRect.Top = 100;
...
Можно воспользоваться функцией Bounds(), которая и вернет нам в итоге TRect. Код выглядел бы так
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    if (Button == mbLeft && PtInRect(Bounds(100, 100, 200, 200), Point(X, Y))) {
        ReleaseCapture();
        SendMessage(Handle, WM_SYSCOMMAND, 0xF012, 0);
    }
}
Советую тебе почитать про TRect.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 21:29
Цитата Сообщение от Inadequate Посмотреть сообщение
Советую тебе почитать про TRect.
- напрасный труд советовать , мы это проходили де-то в классе первом-втором , да и спрашивал не я.
Просто опыт общения на форумах подсказывает, чтобы не нагружать себя, любимого, дальнейшими распросами, лучше сразу давать полный рабочий код, если это возможно и не отнимает очень уж много времени.

Добавлено через 8 минут
2Inadequate Да, все работает .
2ProstoMad Мучает не столько вопрос, для чего это может быть необходимо, как вопрос - как заставить пользователя попадать в это прямоугольник .
Ну и вот - воткнул в это прямоугольник панель 100х100 - естественно, за панель не таскается. Смысл все этого? - Спрашиваю без ехидства , честно, может, оно мне всю жизнь надо было, а я не знал. - В каком случае вы намерены это применять ?
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
09.02.2011, 21:31
Цитата Сообщение от LK Посмотреть сообщение
напрасный труд советовать , мы это проходили де-то в классе первом-втором , да и спрашивал не я.
Исходя из
этого
Цитата Сообщение от LK Посмотреть сообщение
Где этот MyRect ? Щупал форму всюду - не нашел
, я решил, что спрашивал именно ты. Если я неправильно тебя понял, то просто забудь про этот совет.
Цитата Сообщение от LK Посмотреть сообщение
Просто опыт общения на форумах подсказывает
А мой опыт общения подсказывает, что если человек не может с такими глупостями разобраться самостоятельно, значит оно ему и не нужно. Я ведь довольно подробно написал, что надо сделать и как.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.02.2011, 21:37
Цитата Сообщение от Inadequate Посмотреть сообщение
1. Исходя из "этого", я решил, что спрашивал именно ты. Если я неправильно тебя понял, то просто забудь про этот совет.
2. А мой опыт общения подсказывает, что если человек не может с такими глупостями разобраться самостоятельно, значит оно ему и не нужно. Я ведь довольно подробно написал, что надо сделать и как.
1. Мелочи .
2. Вот с этим согласен на 100%.
3. Придумал - сделать прямоугольник 20х20 - и если юзверь случайно раз в год туда тюкнул - показывать "пасхальные яйца" .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2011, 21:37
Помогаю со студенческими работами здесь

Передвижение обьекта
Пытаюсь создать свою игру вот начальный код :) //--------------------------------------------------------------------------- ...

Передвижение мышки напрямую
Столкнулся с такой проблемой: Нужно сделать передвижение мыши в самой игре (3D FPS), но обычный SetCursorPos(X, Y); не работает...

SendInput передвижение мыши
Всем привет. Никак не могу разобраться с SendInput. Засунул на таймер такой код: TPoint pt; GetCursorPos(&pt); int rX, rY; ...

Системное передвижение мыши
Всем привет. Как возможно сделать передвижение курсора с полной эмуляцией настоящей мыши? Как я понимаю, драйвер ввода посылает куда-то...

Действие по кнопке. Передвижение картинки.
Вообщем мне нужно, что бы по нажатию стрелок/кнопок на клавиатуре происходило действие. В идеале это кнопки стрелок, по нажатию на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru