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

Создание линий между Image

30.03.2016, 13:53. Показов 1166. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Проблема в следующем: как, по нажатию кнопки нарисовать линию между изображениями, которые создаются следующим образом
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#pragma hdrstop
 
#include <jpeg.hpp>
#include <graphics.hpp>
 
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
    int cnt=0;
    TImage *img, *lin;
    TComponentList *img_list=new TComponentList;
    int mx, my ;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    img_list->OwnsObjects = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::CreateImage ()
{
    img=new TImage(this);
    img->Name="Image"+IntToStr(cnt++);
    img->OnMouseDown=Image1MouseDown;
    img->OnMouseMove=Image1MouseMove;
    img->OnDblClick=Image1DblClick;
    img->Height=64;
    img->Width=64;
    img->Top=100;
    img->Left=100;
    ImageList1->GetBitmap(0,img->Picture->Bitmap);
    img->Parent=Form1;
    img_list->Add(img);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    CreateImage();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image1MouseDown (TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    mx=X; my=Y;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image1MouseMove (TObject *Sender, TShiftState Shift, int X, int Y)
{
    for (int i=0; i<img_list->Count; i++) {
        if (((TImage*)img_list->Items[i])->Name==((TImage*)Sender)->Name) {
            if (Shift.Contains(ssLeft)) {
                ((TImage*)img_list->Items[i])->Top+=Y-my;
                ((TImage*)img_list->Items[i])->Left+=X-mx;
            }
        }
    }
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2016, 13:53
Ответы с готовыми решениями:

Создание нового Image
Люди, знаю, что вам это слово надоело, но ПОМОГИТЕ(а еще лутше, подскажите, чего бы почитать)! У меня не получается программно создать...

Image создание поля
Для реализации игрового поля необходимо создать массив объектов класса «ТImage», который состоит из 100 элементов. Во время запуска...

Создание подсветки для обьекта Image в Builder C++
Здравствуйте уважаемые форумчане! Прошу вас о помощи! Столкнулся с проблемой создания подсветки объекта Image с помощью Canvas и никак не...

6
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014
30.03.2016, 21:05
Проблема в собственно рисовании линии или алгоритме?
Если первое, то
Code
1
2
Image->Canvas->MoveTo(x1, y1);  // перемещает "перо" в точку (x1, y1), где будет, например, начало линии
Image->Canvas->LineTo(x2, y2);  // рисует линию то точки (x2-1, y2-1) из точки, где находится перо, перемещая перо в точку (x2, y2), если ничего не перепутал
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 27
30.03.2016, 21:14  [ТС]
gunslinger, наверное, все-таки в алгоритме. Я просто не могу понять как связать изображения, которые по идее еще не созданы. И опять же, как они будут себя вести при перемещении этих Image'й
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
30.03.2016, 21:32
Цитата Сообщение от Cryocadet Посмотреть сообщение
не могу понять как связать изображения
Пока нет ясности относительно деталей (а вы это не обнародовали), говорить можно только об общих принципах. Итак, у вас список картинок, которые можно произвольно перемещать по форме или панели, и некоторые пары из которых должны быть обозначены связью - прямой линией. Линия рисуется - как вам уже подсказали - на канве панели или формы ("родителя" для картинок) в событии FormPaint, потому что на другом событии она будет слишком недолговечной (другими словами - стёрта напрочь при "переезде" другой формой). Естественно, видна будет только та часть линии, которую не закроет поле картинки, если не предпринять дополнительных построений. А организовать такие соединения можно при помощи свойства Tag объекта (картинки из списка). Скажем, если Tag не нулевой, то его номер означает порядковый номер картинки "пары". Таким образом, проверяя в цикле в событии FormPaint значения Tag объектов списка, можно в этом же цикле проводить линии, связывающие центры "помеченных" рисунков. Ну, а уж по какому признаку вы их будете помечать при нажатии на кнопку - это уж вам решать.
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 27
30.03.2016, 22:04  [ТС]
nick42, честно говоря, немного руки неоттуда растут (у меня), словами понимаю, а на деле немного нет понятия, что и как делать. То есть, по нажатию на кнопку необходимо прописать, свойство, которое и будет отвечать за создание линии, а при отпускании и повторном нажатии на форму, ее продолжение создаваться не будет, я правильно понимаю?
Заранее извиняюсь, если спрашиваю очевидное
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
30.03.2016, 22:53
Цитата Сообщение от Cryocadet Посмотреть сообщение
необходимо прописать, свойство, которое и будет отвечать за создание линии, а при отпускании и повторном нажатии на форму, ее продолжение создаваться не будет
Я, вроде, русскую речь разумею, но... -?! ... своими словами можно объяснить, для чего и между чем и чем линии проводятся?... вообще - смысл проекта?
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 27
30.03.2016, 23:08  [ТС]
nick42, вообще, изначально, программа должна представлять собой мини-аналог cisco packet tracer, но с урезанным функционалом (компьютеры, марщрутизаторы, соединительные линии). Таким образом линии - есть провода между компьютерами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2016, 23:08
Помогаю со студенческими работами здесь

Создание dll с изображениями .PNG и вывод их в Image на форме
Всем привет. Эта тема как я уже заметил не первая. Бывал тут. Вроде всё понятно да во только у меня как и у petruchodd аналогичная...

Создание куба и его вращение в компоненте Image или Shape
Кто нить может подсказать как связать грани куба так чтобы его можно было вращать по вертикали и горизонтали? Я создал 8 точек с...

Создание куба и его вращение в компоненте Image или Shape
Кто нить может подсказать как связать грани куба так чтобы его можно было вращать по вертикали и горизонтали? Я создал 8 точек с...

Python v2.7. PyGame. Разница в пикселях между image.load и image.fill
Здравствуйте. Учусь пайтону, пишу небольшой шутер. Возникла проблема в, очевидно, этой части кода. Если просто заполнить цветом...

Рисование линий между фигурами
Здравствуйте, все. У меня имеется макрос - который рисует линии следующим образом: Надо на вкладке &quot;Paint&quot; включить режим...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru