Программа рисует граф, вершины которого представлены, как записи содержащие изображение круга и значение вершины. Все записи хранятся в динамическом массиве. При задании нового графа заливается канва всей формы, удаляется массив изображений.
Всё очищается, как и требуется, но если расположение вершины нового графа совпадает с расположением вершины старого, то получается, что накладывается часть старого изображения на новое. Как эффективно очистить форму после удаления массива вершин?
Кстати, линии рисуются через MoveTo, LineTo и удаляются бесследно после заливки формы.
Поискал немного советов, попробовал некоторые - не помогают.
C = record
graphical: TImage;
value: Integer;
...
Nodes: array of C;
Node: TImage;
...
procedure Cleaner; // Очистка формы от рисунков
var
r: trect;
begin
r.Height := WGraph.Height;
r.Width := WGraph.Width;
r.Top := 0;
r.Left := 0;
WGraph.Canvas.FillRect(r);
end;
...
Node.graphical.AutoSize := true;
Node.graphical.Picture.loadfromfile('white.bmp'); //Загрузка изображения
Node.graphical.Transparent := true; //Прозрачность
Node.graphical.Canvas.TextOut(14, 11, IntToStr(i + 1)); //Добавление текста
...
if NodesExists = 1 then //Проверка на существование массива с вершинами
begin
for i := 0 to length(Nodes) - 1 do
Nodes[i].graphical.Destroy;
setlength(Nodes, 0);
end;
WGraph.Refresh;
WGraph.Repaint;