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

Как правильно переносить картинку мышкой внутри формы

26.06.2014, 11:29. Показов 1075. Ответов 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
43
44
45
46
47
48
49
void __fastcall TForm1::Image3MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    this->x = X;
    this->y = Y;
    Image2->BeginDrag(false);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image3DragOver(TObject *Sender, TObject *Source, int X, int Y,
          TDragState State, bool &Accept)
{
    this->Image2->Left += X-this->x;
    this->Image2->Top += Y-this->y;
 
    this->Image3->Left += X-this->x;
    this->Image3->Top += Y-this->y;
 
    this->login_edit->Left += X-this->x;
    this->login_edit->Top += Y-this->y;
 
    this->pass_edit->Left += X-this->x;
    this->pass_edit->Top += Y-this->y;
   //   Accept = true;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Image3DragDrop(TObject *Sender, TObject *Source, int X, int Y)
{
    if (this->Image2->Top < 0)
    {
        this->Image2->Top = 1;
        this->Image3->Top = 1;
 
        this->login_edit->Top = this->Image3->Top+46;
        this->pass_edit->Top = this->login_edit->Top+41;
    }
 
    if (this->Image2->Top > this->ClientHeight-this->Image2->Height)
    {
        this->Image2->Top = this->ClientHeight-this->Image2->Height-1;
        this->Image3->Top = this->ClientHeight-this->Image2->Height-1;
 
        this->login_edit->Top = this->Image3->Top+46;
        this->pass_edit->Top = this->login_edit->Top+41;
    }
}
//---------------------------------------------------------------------------
Форма Image2 прямоугольная, в верхней области у нее Image3, за который и тянется вся картинка, внутри картинки 2 поля ввода, при медленном перемещение все работает, но если перемещать быстро, то вся форма зависает, а за мышкой тянется только шлейф от полей ввода... Ну и в момент перемещения процессор нагружает так, словно приложение застряло в бесконечном цикле.
Как исправить ?

Добавлено через 33 минуты
А нет, ложная тревога, на ПК где я работал был просто слабый процессор, пересел на Core i5 и больше 4% не кушает в момент перемещения.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.06.2014, 11:29
Ответы с готовыми решениями:

Как правильно переносить БД вместе с приложением?
Здравствуйте,нашел схожие темы,но ответа нет.Как правильно переносить бд вместе с релизом. 1)Нужно ли просто переносить ехе и бд на...

Как правильно переносить код в сборку?
Как можно в сборку кинуть события, компоненты, контролы? Понятно если я из формы перенесу код подобно этому: for (int i = 0; i &lt;...

Как обращаться к объектам на subform-е внутри формы, внутри еще одной формы?
У меня есть форма (Form1), в нее вложена подформа (SubForm1), а в неё еще одна (SubForm2). Как обратиться к ComboBox1 на SubForm2 ??? ...

8
 Аватар для Gelo123321
22 / 22 / 8
Регистрация: 05.01.2012
Сообщений: 282
26.06.2014, 13:29
Путин, может
C++
1
DoubleBuffered = true;
поможет?
0
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623
26.06.2014, 14:05  [ТС]
Gelo123321, уже стоит, но увы не помогло
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
26.06.2014, 16:04
Цитата Сообщение от Путин Посмотреть сообщение
просто слабый процессор, пересел на Core i5
Неее. Так дела не делаются.
Надо было отрисовывать сначала в битмап, и его уж выводить. Рукопашный DoubleBuffer.
0
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623
26.06.2014, 22:50  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Неее. Так дела не делаются.
Надо было отрисовывать сначала в битмап, и его уж выводить. Рукопашный DoubleBuffer.
Как же мне отрисовать в битмапе, если я просто меняю позицию картинки, а 2 Edit'a не картинки ...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.06.2014, 22:53
Пробуй отрисовывать TBitmap внутри TImage в место того что таскать TImage.
0
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623
27.06.2014, 13:56  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Пробуй отрисовывать TBitmap внутри TImage в место того что таскать TImage.
Не хочет рисовать:
C++
1
2
3
4
5
6
7
8
9
TBitmap *buff = new TBitmap;
    
int img2_x = this->Image2->Left+X-this->x;
int img2_y = this->Image2->Top+Y-this->y;
    
int img3_x = this->Image3->Left+X-this->x;
int img3_y = this->Image3->Top+Y-this->y;
    
buff->Canvas->Draw(img2_x,img2_y,this->Image2);
[bcc32 Error] Unit1.cpp(627): E2285 Could not find a match for 'TCanvas::Draw(int,int,TImage *)
[bcc32 Warning] Unit1.cpp(642): W8004 'img3_y' is assigned a value that is never used
[bcc32 Warning] Unit1.cpp(642): W8004 'img3_x' is assigned a value that is never used
[bcc32 Warning] Unit1.cpp(642): W8004 'img2_y' is assigned a value that is never used
[bcc32 Warning] Unit1.cpp(642): W8004 'img2_x' is assigned a value that is never used
[bcc32 Warning] Unit1.cpp(642): W8004 'buff' is assigned a value that is never used
И почему он пишет, что я нигде не юзаю эти значения когда строкой ниже я пытаюсь по ним нарисовать....
И как я смогу отрисовать поля Edit, если он требует от меня TImage
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.06.2014, 14:27
Наоборот

Добавлено через 54 секунды
C++
1
Image2->Canvas->Draw(x,y,Bitmap);
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
27.06.2014, 14:41
Путин, может пригодиться (особенно пункт 6): Краткое руководство по работе с классом TCanvas для начинающих
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.06.2014, 14:41
Помогаю со студенческими работами здесь

Как обращаться к объектам на subform-е внутри формы, внутри еще одной формы?
У меня есть форма (Form1), в нее вложена подформа (SubForm1), а в неё еще одна (SubForm2). Как обратиться к ComboBox1 на SubForm2 ??? ...

Как по нажатии на картинку, которая находится на панели, перетаскивать её мышкой
Вопросы такие: 1) как по нажатии на картинку которая находится на панели перетаскивать её мышкой и при отпускании что бы она оставалась...

Как сделать возможность двигать карту мышкой внутри Viewbox?
Сейчас просто окно с Grid, на фоне которого карта с дорогами, а поверх этой карты на нужных участках дороги буду располагать объекты....

Как выровнять картинку внутри Image?
WPF: Здравствуйте. у меня такая проблема. мне нужно когда картинка попадает в Image, она выровнялась по краям,но не просто так... на...

Передвигаем картинку мышкой
Передвижение картинки при помощи мыши. Затея такая сделать при нажатие мыши возможность передвигать картинку за мышкой (курсором) ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru