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

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

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

Author24 — интернет-сервис помощи студентам
Подскажите, как сделать чтобы 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-ов. И их нужно перемещать по форме,...

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

25
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
22.09.2008, 14:08 2
Цитата Сообщение от vitals Посмотреть сообщение
Подскажите, как сделать чтобы PaintBox в C++ Builder можно было перемещать с помощью мыши?
Код
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 3
а чтобы изображение в нем тоже двигалось?
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
23.09.2008, 11:50 4
Необходимо обработать события для нажатия, передвижения и отпускания кнопки мыши и все будет в порядке
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 15:44 5
Подниму тему... Тоже интересует вопрос как прокручивать картинку в PaintBox, таская мышку по нему?
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
29.04.2009, 15:47 6
Цитата Сообщение от vladko Посмотреть сообщение
Подниму тему... Тоже интересует вопрос как прокручивать картинку в PaintBox, таская мышку по нему?
кидаешь картинку на TPanel, делаешь картинке Enabled = false и на MouseDown панели ставишь вышеуказанный код
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 17:37 7
Что-то не получается так... Кнопка на панели так таскается запросто, а вот ни PaintBox ни Image никак...

Добавлено через 21 минуту 15 секунд
А если усложнить задачу... У меня в проекте 2 скрола. Как привязать таскание мышкой к событиям скролов?
0
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
29.04.2009, 17:41 8
Если хочется чтобы картинка прорисовывалась внутри Паинт бокса и ее можно было прокручивать мышью, надо делать так:
Где-то объявить переменные 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 9
Че-то не понял... у меня нет загруженных рисунков, рисую линии, прямоугольники на Пбоксе...
0
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
29.04.2009, 18:18 10
Аааааа....
Ну, тогда рисуй их всех со смещением ImX, ImY. Всего-то делов.
А если еще и умножать их на какой-то показатель, тогда можно будет еще и масштабировать(но это из другой оперы).
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 18:25 11
Блин, а если их очень много?.. У меня на простом скролле иногда видно как они прорисовываются...
0
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
29.04.2009, 18:27 12
А двойную буфферизацию делать не пробовал? Говорят помогает
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
29.04.2009, 18:33 13
неа, я в этом не силен... есть просто готовый проект, который я хотел доработать напильником... добавить прокрутку мышью, убрать мигание при рисовании... Может кто поможет...
0
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
29.04.2009, 19:37 14
убрать мигание при рисовании
Так а я тебе о чем толкую. Берешь, где нибудь прописываешь 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 15
Че-то не выходит... Может глянешь мой проект...
0
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
30.04.2009, 15:07 16
давай, кидай. мож и помогу
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
30.04.2009, 15:23 17
куды кидать?
0
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
30.04.2009, 15:27 18
Да хоть сюда. Прикрепи его в аттаче к сообщению(расширенный режим). Тока кстати, билдер какой?
0
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 48
30.04.2009, 15:43 19
6 билдер
Вложения
Тип файла: zip projekt.zip (717.8 Кб, 43 просмотров)
0
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
30.04.2009, 16:23 20
Короче смотри. Если сделать так, то будет тебе прокрутка мышью.
Создай переменные 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
30.04.2009, 16:23
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2009, 16:23
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru