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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Помогите решить проблему с удалением фигур, Работа с фигурами
сообщение
Сообщение #1





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

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


Добрый день или вечер.
Подскажите пожалуйста как правильно создать функцию удаления фигур с формы.
Моих навыков программирования хватило только на написания функции Off которая изменяет параметр Visible, однако мне надо чтобы фигура совсем стиралась с Формы.

И ещё. Деструктор можно использовать для удаления элементов из массива (У меня под каждую фигуру выделен массив). В нем можно реализовать это удаление?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2





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

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


Фрагменты кода


constructor TFigure.create (x1,y1,r1 : integer; Color1 : TColor; TekForm1 : TForm);
begin
x:= x1;
y:= y1;
r:= r1;
Color:= Color1;
TekForm:= TekForm1;
Width:=5;
Visible:=True;
Draw;
end;

procedure TTreug.Draw; //Процедура рисования треугольника
var dx,dy : integer;
begin
TekForm.Canvas.Pen.Color:= Color;
TekForm.Canvas.Pen.Width:= Width;
dy:= round(r/2);
dx:= round(r*cos(pi/6));
TekForm.Canvas.MoveTo(x-dx,y+dy); //поместить карандаш в т1
TekForm.Canvas.LineTo(x,y-r); //линия 1-2
TekForm.Canvas.LineTo(x+dx,y+dy); //линия 2-3
TekForm.Canvas.LineTo(x-dx,y+dy); //линия 3-1
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Ru1:=round(sqrt(sqr(X-Xu1)+sqr(Y-Yu1)));
if (FlagFig1 = True) or (FlagFig2= True) or (FlagFig3= True) or (FlagFig4=True) then
begin
ColorDialog1.Execute; // вызов цветовой палитры
ColorFig:= ColorDialog1.Color; // присвоение цвета из цветовой палитры в переменную ColorFig
if FlagFig1 = True then // Cоздание треугольника
begin
CountFigura:=CountFigura+1;
nTekFigura:=CountFigura-1;
CountTreug:= CountTreug+1;
nTekTreug:= CountTreug-1;
setlength(MTreug,CountTreug); // Увеличить массив МTreug на значение CountTreug
MTreug[nTekTreug]:= TTreug.create(Xu1,Yu1,Ru1,ColorFig,Form1);
FlagFig1:=False;
ListBox1.Items.Add(IntToStr(nTekTreug)+'-Треугольник');
ListBox1.ItemIndex:=nTekTreug;
ListBox1.Selected[nTekTreug];
if (CountTreug>1) then MTreug[nTekTreug-1].pWidth:=1; // Предыдущий треугольник становятся простой(не выделенный)

if CountKrug>0 then lst1.Selected[nTekKrug]:=False;
if CountPrUg>0 then lst2.Selected[nTekPrUg]:=False;
if CountTrap>0 then lst3.Selected[nTekTrap]:=False;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Большевик–концептуал
**

Группа: Пользователи
Сообщений: 133
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

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


Цитата(SkyEdge @ 13.12.2017 1:17) *
Добрый день или вечер.
Подскажите пожалуйста как правильно создать функцию удаления фигур с формы.


Насколько я понимаю, если не делать по совсем нормальному пути (безоконным компонентом вроде стандартных TLabel или TShape), то хотя бы на форму поставить TPaintBox, и в его OnDraw рисовать все фигуры. А в конструкторе и деструкторе фигур только делать Invalidate.

Цитата(SkyEdge @ 13.12.2017 1:17) *
И ещё. Деструктор можно использовать для удаления элементов из массива (У меня под каждую фигуру выделен массив). В нем можно реализовать это удаление?


Да. Компоненты внутри TComponentList ведут себя так.


Цитата(SkyEdge @ 13.12.2017 2:07) *
                setlength(MTreug,CountTreug);    // Увеличить массив МTreug на значение CountTreug
MTreug[nTekTreug]:= TTreug.create(Xu1,Yu1,Ru1,ColorFig,Form1);
Вот тут бы двигать элементы ещё надо.

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


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




- Текстовая версия 20.01.2018 5:52
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"