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

Создание фигур

16.12.2018, 13:06. Показов 4506. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Вопрос таков: нужно в Image с помощью mousemove, mousedown, mouseup создавать растягиванием несколько кругов и квадратов.
Получается нарисовать квадрат из верхнего левого угла, обратный ход дает шлейф. Как исправить и сделать, чтоб можно было рисовать несколько фигур из любой точки имэйджа?
код:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "pm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
bool f;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Image1->Canvas->Brush->Color=clWhite;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
       if (f) {
if (Shift.Contains(ssLeft)) {
 
    Image1->Canvas->Rectangle(X-4000000,Y-4000000, X, Y);
 
 
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
f=true;
 Image1->Canvas->Rectangle(X-500000,Y-5000000, X, Y);
 
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
f=false;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2018, 13:06
Ответы с готовыми решениями:

Создание изображений в виде мелких фигур, изменение размера мелких фигур
Здравствуйте!Как создать изображение в виде кружков или других фигур? Как изменить размер мелких фигур не меняя размера картинке?

Создание фигур
Коллеги , всем привет . У меня к вам вопрос ! Мне одна компания прислала задание . А именно . Вычислить площадь фигуры ,без знания типы...

создание фигур
создать фигуры треугольник, квадрат и прямоугольник, используя класс точка, фигуры вывести на экран mfc, помогите пожалуйсто с классом...

1
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
17.12.2018, 22:40
Можно использовать один вспомогательный Shape (его соответствующие характеристики должны совпадать с теми, которые используются для рисования на канве) для рисования "в динамике" ("как в пейнте").
Если изменить стиль кисти Shape-а и (канвы) Image-а на bsClear, то фигуры не будут "затирать" друг друга.
Ниже код для рисования прямоугольников и квадратов (для овалов и кругов доделать будет, думаю, не сложно).
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
TForm1 *Form1;
TPoint point;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  Image1->Canvas->Brush->Color = clWhite;
 
  // Shape1 - вспомогательная фигура (TShape)
  Shape1->Brush->Color = clWhite;
  Shape1->Visible = 0;
 
  //  незаполненные (пустые) фигуры
  //  Image1->Canvas->Brush->Style = bsClear;
  //  Shape1->Brush->Style = bsClear;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  if (Button == mbLeft)
  {
    Tag = 1;
    point = TPoint(X, Y);
 
    Shape1->Left = Image1->Left + X;
    Shape1->Top = Image1->Top + Y;
    Shape1->Width = 0;
    Shape1->Height = 0;
    Shape1->Visible = 1;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
  if (Tag)
  {
    // прямоугольники
//  Shape1->Width = X - int(point.x);
//  Shape1->Height = Y - int(point.y);
    //
 
//  ...................
//  #include <Math.hpp>   // для Min и Max
//  ...................
 
    // квадраты
    int temp = Min(abs(X - int(point.x)), abs(Y - int(point.y)));   // или Max вместо Min (будет рисоваться по-другому)
    Shape1->Width = temp * Sign(X - int(point.x));
    Shape1->Height = temp * Sign(Y - int(point.y));
    //
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  if (Tag)
  {
    Tag = 0;
 
    // прямоугольники
//  Image1->Canvas->Rectangle(point.x, point.y, X, Y);
    //
 
    // квадраты
    Image1->Canvas->Rectangle(point.x, point.y, Shape1->Width + point.x, Shape1->Height + point.y);
    //
 
    Shape1->Visible = 0;
  }
}
Миниатюры
Создание фигур   Создание фигур  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2018, 22:40
Помогаю со студенческими работами здесь

Создание фигур по таблице
Доброе утро, дорогие друзья. Помогите решить сложный вопрос. Вопрос касается того - как создать фигуры на листе. В таблице...

Создание фоновый фигур
Здравствуйте, подскажите пожалуйста, как можно создать такой эффект?

Тетрис. Создание фигур
Привет, пишу тетрис (да, я сама оригинальность..) Имею пока 1 фигуру (квадрат) public class Block { public Block(int...

QGraphicsScene создание фигур
Добрый день! Возможно тема уже заезжена, но все равно спрошу. :) Нашел похожие темы... Что-то получилось. mainwindow.cpp ...

Создание фигур в dll
Есть задание: 1) Функция y=x*x, х берем из edit1 2) В dll библиотеке написать код &quot;если y&gt;20, то на форме рисуется красный...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru