Я пишу программу - иллюстратор алгоритма по дискретной математике (Дерево связного графа), в чем суть проги- не так уж и важно.
Есть форма, на ней прога через Канвас рисует сам граф.
Граф вот таким вот образом записывается в прогу
- Код: Выделить всё
Type Toch=record
name:string[1];
x:0..400;
y:0..400;
end;
Type Lin=record
ves:string[3];
lbegin:string[1];
lend:string[1];
end;
......
Tochki: array of toch;
Lines: array of Lin;
Затем, когда я нажимаю в менюшке выполнить сам алгоритм , котрывается другая форма, и там уже отображается измененный граф.
Свои массивы я не трогаю, я переливаю их в идентичные по тайпу, но другие!
- Код: Выделить всё
AlgTochki: array of toch;
AlgLines : array of Lin;
После этого- что весьма интересно, не СРАЖУ же, а спустя 10-20 секунд, на основной форме СЛЕТАЕТ график! либо отображается какойто бред, либо не отображается ничего вообще. Затем когда я пытаюсь создать новый график или же загрузить сохраненный ( при этом существующие массивы записей полностью стираются), прога всё равно не хочет их отображать! Вообще парадокс, по крайней мере для меня.
И для основной формы, и для второй, где отображается алгоритм- массивы записей обьявлены в основном юните. В юните со второй формой я сделал лишь свой OnPaint, второй, чтобы он отображал измененный график. И отображает, абсолютно не глючит.
При переливании с одного массива на другой- я абсолютно не изменяю основной! я с него просто читаю, не в коем случае не редактирую.
Как он может вообще слетать, и почему?
Вот мой OnPaint, если это чемто поможет:
- Код: Выделить всё
procedure TForm1.FormPaint(Sender: TObject);
var i1,iii1:byte;
x1,x2,y1,y2:integer;
begin
Canvas.Pen.Width:=2;
Canvas.Pen.Color :=
RGB(255,1,1);
for iii1:=0 to Length(Lines)-1 do begin
for i1:=0 to Length(Tochki)-1 do begin
if Lines[iii1].lbegin=Tochki[i1].name then begin
x1:=Tochki[i1].x;
y1:=Tochki[i1].y;
end;
if Lines[iii1].lend=Tochki[i1].name then begin
x2:=Tochki[i1].x;
y2:=Tochki[i1].y;
end;
end;
Canvas.MoveTo(x1+8, y1+8);
Canvas.LineTo(x2+8, y2+8);
end;
Canvas.Pen.Width:=2;
Canvas.Brush.Color :=
RGB(1,1,255);
Canvas.Pen.Color :=
RGB(1,1,255);
for i1:=0 to Length(Tochki)-1 do begin
Canvas.Ellipse((Tochki[i1].x+4),(Tochki[i1].y+4),(Tochki[i1].x+12),(Tochki[i1].y+12));
SetBkMode(Canvas.Handle, TRANSPARENT);
Canvas.textout((Tochki[i1].x-4), (Tochki[i1].y-4), (Tochki[i1].name));
end;
end;
во второй форме он идентичен, только названия массивов сменил.
Я заранее очень благодарен за любую вашу помощь!