Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/39: Рейтинг темы: голосов - 39, средняя оценка - 4.51
vitals

Перемещение компонента PaintBox с помощью мыши

22.09.2008, 14:01. Показов 8259. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как сделать чтобы PaintBox в C++ Builder можно было перемещать с помощью мыши?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2008, 14:01
Ответы с готовыми решениями:

Перемещение Label с помощью мыши
1) Чтобы можно было тоскать по форме один лейбл 2) Чтобы когда я им касался других лейблов выводило что-то вроде ошибки, и желательно...

Плавное перемещение div с помощью мыши
Цель: реализовать нормальное перемещение div с помощью мыши (имитация перетаскивания обычного окна) Моя Реализация: ...

Перемещение нескольких PictureBox по форме с помощью мыши
Проблема с pictureBox. На форме имеется больше 30-ти pictureBox-ов. И их нужно перемещать по форме, используя события MouseMove и др.....

25
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
22.09.2008, 14:08
Цитата Сообщение от vitals Посмотреть сообщение
Подскажите, как сделать чтобы PaintBox в C++ Builder можно было перемещать с помощью мыши?
Code
1
2
3
4
5
6
void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
ReleaseCapture();
PaintBox1->Perform(WM_SYSCOMMAND,0xF012,0);
}
0
vitals
22.09.2008, 14:17
а чтобы изображение в нем тоже двигалось?
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
23.09.2008, 11:50
Необходимо обработать события для нажатия, передвижения и отпускания кнопки мыши и все будет в порядке
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 15:44
Подниму тему... Тоже интересует вопрос как прокручивать картинку в PaintBox, таская мышку по нему?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
29.04.2009, 15:47
Цитата Сообщение от vladko Посмотреть сообщение
Подниму тему... Тоже интересует вопрос как прокручивать картинку в PaintBox, таская мышку по нему?
кидаешь картинку на TPanel, делаешь картинке Enabled = false и на MouseDown панели ставишь вышеуказанный код
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 17:37
Что-то не получается так... Кнопка на панели так таскается запросто, а вот ни PaintBox ни Image никак...

Добавлено через 21 минуту 15 секунд
А если усложнить задачу... У меня в проекте 2 скрола. Как привязать таскание мышкой к событиям скролов?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
29.04.2009, 17:41
Если хочется чтобы картинка прорисовывалась внутри Паинт бокса и ее можно было прокручивать мышью, надо делать так:
Где-то объявить переменные int ImX, ImY, Dx, Dy, которые надо сразу же обнулить. И bool MouseD

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
void __fastcall TForm2::FormPaint(TObject *Sender)
{
PaintBox->Canvas->Draw(ImX,ImY,jpg);
}
 
void __fastcall TForm2::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
MouseD=false;        
}
 
void __fastcall TForm2::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
MouseD=true;
Dx=X-ImX;
Dy=Y-ImY;
}
 
void __fastcall TForm2::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if(MouseD==false)return;
int ty=Y-Dy;
if(ty>0)ty=0;
if(ty+jpg->Height>=PaintBox->ClientHeight)
{
ImY=ty;
PaintBox->Canvas->Draw(ImX,ImY,jpg);
}
}
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 18:15
Че-то не понял... у меня нет загруженных рисунков, рисую линии, прямоугольники на Пбоксе...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
29.04.2009, 18:18
Аааааа....
Ну, тогда рисуй их всех со смещением ImX, ImY. Всего-то делов.
А если еще и умножать их на какой-то показатель, тогда можно будет еще и масштабировать(но это из другой оперы).
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 18:25
Блин, а если их очень много?.. У меня на простом скролле иногда видно как они прорисовываются...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
29.04.2009, 18:27
А двойную буфферизацию делать не пробовал? Говорят помогает
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 18:33
неа, я в этом не силен... есть просто готовый проект, который я хотел доработать напильником... добавить прокрутку мышью, убрать мигание при рисовании... Может кто поможет...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
29.04.2009, 19:37
убрать мигание при рисовании
Так а я тебе о чем толкую. Берешь, где нибудь прописываешь Graphics::TBitmap*back;
потом в FormCreate
C++
1
2
3
back=new Graphics::TBitmap();
back->Width=PaintBox->Width;
back->Height=PaintBox->Height;
Все рисования делаешь на него, а потом PaintBox->Canvas->Draw(0,0,back); и все. Никаких тебе морганий и миганий нет.
Надо бы еще изменять размер битмапа, если изменяется размер PaintBox_a при изменении размеров формы.
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 22:36
Че-то не выходит... Может глянешь мой проект...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
30.04.2009, 15:07
давай, кидай. мож и помогу
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
30.04.2009, 15:23
куды кидать?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
30.04.2009, 15:27
Да хоть сюда. Прикрепи его в аттаче к сообщению(расширенный режим). Тока кстати, билдер какой?
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
30.04.2009, 15:43
6 билдер
Вложения
Тип файла: zip projekt.zip (717.8 Кб, 43 просмотров)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
30.04.2009, 16:23
Короче смотри. Если сделать так, то будет тебе прокрутка мышью.
Создай переменные int LastX,LastY;
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
void __fastcall TForm1::PBoxMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if(Shift.Contains(ssRight))
     {
     ScrollH->Position-=X-LastX;
     ScrollV->Position-=Y-LastY;
     }
LastX=X;
LastY=Y;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ScrollHChange(TObject *Sender)
{
     PBoxY->Repaint();
    PBoxY2->Repaint();
    PBox->Repaint();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollVChange(TObject *Sender)
{
     PBoxY->Repaint();
    PBoxY2->Repaint();
    PBox->Repaint();
}
А вот чтобы не моргало, нужна действительно двойная буфферизация, но с твоим Луа, я так и не понял, откуда скриптовый движок знает на какой DC ему рисовать?
И надо ему передать адрес созданного TBitmap;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2009, 16:23
Помогаю со студенческими работами здесь

Перемещение файлов с помощью мыши (Drag&Drop)
Позволяет ли JAVA перемещать файлы с помощью мыши (Drag&Drop)из "Проводника" (или других программ) в компонент, содержащийся в...

Перемещение объекта, используя клавиши курсора в paintbox
Добрый вечер. Прошу помощи, мне нужно сделать перемещение объекта с помощью клавиш курсора в paintbox, я сделал пока что только по щелчку...

Отловить события нажатия мыши на Paintbox
появилась необходимость отлавливать события OnMouseWheelDown, OnMouseWheelUp, OnKeyDown, OnKeyUp в Paintbox подскажите как это...

С помощью компонента SpinEdit организуйте управление количеством строк компонента Stringgrid
помогите решить) Поместите на форму компоненты Stringgrid и SpinEdit. С помощью компонента SpinEdit организуйте управление количеством...

Событие мыши: перемещение мыши при нажатой левой клавиши
Подскажите, пожалуйста как реализовать следующее: При перемещении мыши при нажатой левой клавише (выделение текста) выводится сообщение...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru