IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Builder 6.0, Графический редактор
сообщение
Сообщение #21


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(мисс_граффити @ 4.09.2007 22:12) *

И MouseMove, и MouseUp, и MouseDown получают координаты курсора
Может, не самый красивый вариант, но я бы сделала так: ввела глобальную логическую переменную и в OnMouseMove смотерела, что мы делаем: перемещаем фигуру (тогда надо рисовать) или просто так двигаем мышкой.



Получилось так: нашли нужный прямоугольник и глобальной переменной flag приравняли 1.
Начинает работать OnMouseMove. И должен передвигаться прямоугольник.


void __fastcall TForm1::PaintBox1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if (flag==1)
{
int x1=rects.back().x1;
int y1=rects.back().y1;
Form1->PaintBox1->Canvas->Rectangle(x1+X,y1+Y,x1+X-30,y1+Y-30);
}
}



Но через несколько секунд выходит ошибка: Project1 raised exception class std::bad_alloc with message 'Exepption Object Address:0x28011005E'.
После чего можно продолжить Run и тогда прямоугольник двигаеться.
Что не так?

Какое событие даст понять что кнопка мышки отпушена? (Там необходимо flag=0).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


что такое rects? извини, по этому куску кода сложно что-то сказать.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(мисс_граффити @ 4.09.2007 23:40) *

что такое rects? извини, по этому куску кода сложно что-то сказать.


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



Прикрепленные файлы
Прикрепленный файл  Unit1.cpp ( 2.65 килобайт ) Кол-во скачиваний: 203
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


#include "rectangle.h"  
#include "triangle.h"

это что за звери?
ты хочешь, чтобы помогли? или хочешь скрыть максимальную часть проекта?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Гость






Fanat, можно вопрос? Вот ты пишешь программу на С++, да? Почему не написать ее с использованием наследования? Ну, скажем, набросок:

class
figure {
... // нечто общее для прямоугольника и треугольника
protected:
virtual bool isInside(TPoint &mouse) = 0;
...
};

class
triangle: public figure {
... // здесь - признаки, характерные для треугольника

virtual bool isInside(TPoint &mouse) {
... // проверяешь попадание mouse в треугольник
}
...
};

class
rectangle: public figure {
... // здесь - признаки, характерные для прямоугольника

virtual bool isInside(TPoint &mouse) {
... // проверяешь попадание mouse в прямоугольник
}
...
};

// Ну, а потом:

vector<figure> figures; // работаешь с любыми типами фигур


причем проверка, куда попала мышь, сокращается до одной строки: вызов метода isInside(TPoint(X, Y))... Во-первых, это более расширяемо, во вторых - гораздо проще (не надо работать с несколькими векторами, достаточно одного), ну и наконец, такой код будет больше соответствовать философии С++...

Я, к сожалению, пока не могу помочь тебе ничем, кроме теоретических замечаний, в связи со сгоревшей материнкой я поменял компьютер, и пока у меня установлена только Дельфи 6, в ближайшее время поставлю Builder 2006, тогда советы будут более детальными smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Мисс_граффити, извини забыл, там вот что:

struct rectangle
{
int x1,x2,y1,y2;
};


и 6 координат для треугольника.

volvo, потому, что не умею, но ты прав, постараюсь сегодня разобраться и сделать что-то похожее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


привет volvo, сделал так как ты сказал.Немного разобрался с наследованием. Теперь в векторе figures содержаться и треугольники и прямоугольники. Но не знаю как обратиться к треугольнику или прямоугольнику,то есть к координатам его вершин, если мы достаём последний элемент из вектора. Даже если описать функции которые выдают true при попадании в фигуру, то все равно необходимо узнать её координаты. Как это сделать?. virtual не особо понял.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Гость






Цитата
Даже если описать функции которые выдают true при попадании в фигуру, то все равно необходимо узнать её координаты. Как это сделать?

Фигура вообще-то сама хранит свои координаты... То есть, смотри:

// Это - абстрактный базовый класс, ты не можешь создавать экземпляры этого класса
class
figure {
protected:
virtual bool isInside(TPoint &mouse) = 0;
};

class
triangle: public figure {
// здесь - признаки, характерные для треугольника
// Собственно, тут и храним 3 точки, образующие треугольник:
TPoint a, b, c;

virtual bool isInside(TPoint &mouse) {
... // проверяем попадание mouse в треугольник (именно образованный точками a, b, c)
}
...
};

class
rectangle: public figure {
// здесь - признаки, характерные для прямоугольника
// Прямоугольник определяется двумя точками: верхний левый и правый нижний угол:
TPoint leftUp, rightDown;

virtual bool isInside(TPoint &mouse) {
... // проверяешь попадание mouse в прямоугольник (определяемый полями leftUp и rightDown)
}
...
};
Больше ничего пока сказать не могу, не видя, как именно ты реализовал работу с фигурами... Если хочешь - присоедини свой проект (можно в приват)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Всем большое спасибо, обьекты двигаються,
Как бы теперь научиться сохранять элементы в файл и загружать из него?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Гость






Проходом по вектору, и вызовом для каждого его элемента метода, который записывает данные о себе в файл...
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.01.2021 13:40
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name