Добрый день или вечер. Подскажите пожалуйста как правильно создать функцию удаления фигур с формы. Моих навыков программирования хватило только на написания функции Off которая изменяет параметр Visible, однако мне надо чтобы фигура совсем стиралась с Формы.
И ещё. Деструктор можно использовать для удаления элементов из массива (У меня под каждую фигуру выделен массив). В нем можно реализовать это удаление?
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;
Добрый день или вечер. Подскажите пожалуйста как правильно создать функцию удаления фигур с формы.
Насколько я понимаю, если не делать по совсем нормальному пути (безоконным компонентом вроде стандартных 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