![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TCanvas [D6, XP]
alll_23 © (2007-11-13 16:46:00)Здравствуйте, я делаю программу по графическому построению графа(в качестве вершин графа у меня применяется компонент TShape(создаётся динамически по действию), в качесве рёбер просто ресую линию на ТImage методами MoveTo и LineTo при этом параллельно в матрицу инцендентности(извените если не правильно) заносится еденичка для тех вершин от которой до которой прорисовывается линия(марица нулевая динамическая кол-во вершин на кол-во вершин ) и всё
у меня нормально работает(соеденяю вершины разрываю всё это отображается в матрице и в графическом представлении связей на экране), разрывая связи в матрицу присваевается ноль а линия прорисовывалась белым цветом так как я не знаю каким методом правильно ее стереть. Но вопрос в следующем: я хочу премещать
Вершину при этом должны прорисовываться все ёё связи тоже это получается но не совсем, не пойму как стереть статые координаты и даже если я их "сотру" таким способом как присваевания просто белого цвета на белом фоне тогда у меня сотрётся какая то часть какой то линии которая ёё может пересекать.
Ой вот это я накрутил, вобщем подскажите как при перемещении вершины ёё связи-линии не стирали другие.
alll_23 (2007-11-15 13:20:00) [21]А что такое Z-order, и что такое недействительная область? Что это и где про это узнать можно?
Anatoly Podgoretsky (2007-11-13 19:05:00) [22]В TCanvas никаких линий нет, редакторы так не делают, редактор должен все перисовывать в соотвествии с Z-order, делая недействительной нужную область.
alll_23 (2007-11-13 17:08:00) [23]Да не нужен мне такой объект у меня всё в матрице ведь хранится!!!
Kolan (2007-11-13 17:06:00) [24]Предлогая тебе не пользовать массив. А завести объект
TУзел(можешь сделать его птомком TShape).
TУзел = class(TShape)
FСписокСвязаныхУзлов: TСписокСвязаныхУзлов;
end;
И работать с сетью объектов, а не с массивом.
Рамиль (2007-11-13 17:03:00) [25]
> А ребята пока я сдесь, скажите пожалуйста как избавиться
> от этого мерзкого мерцания на Timage
> Рамиль © (13.11.07 16:53) [2]
> И используй TPaintBox.
Ну еще DoubleBuffered можно выставить.
Рамиль (2007-11-13 17:02:00) [26]Других методов нет, и не может быть. Ну с натяжкой если XOR ом рисовать. На самом деле Image пихает все в битмап, и перерисовает при поступлении WM_PAINT. А это надо делать тебе самому.
> Дело в том что линий этих может быть много и надо хранить
> данный для методов рисования в массиве
Места жалко что ли?
alll_23 (2007-11-13 17:01:00) [27]Ну вот смотрите как полезен форум сам дал ответ на свой вопрос правда я думал можно как то пропроще.
А ребята пока я сдесь, скажите пожалуйста как избавиться от этого мерзкого мерцания на Timage, и всё таки скажите как правильно стереть линию может есть такой метод который сотрёт ее и не сотрёт пиксели пересекающих линий.
alll_23 (2007-11-13 16:56:00) [28]Дело в том что линий этих может быть много и надо хранить данный для методов рисования в массиве
alll_23 (2007-11-13 16:53:00) [29]Может какими то другими методами
Рамиль (2007-11-13 16:53:00) [30]Не пойму проблемы..
Перерисвывай в OnPaint всю видимую область (затирай все и рисуй все линии)
Если надо перерисовать принудительно, например после изменения координат, вызывай Invalidate.
И используй TPaintBox.
Kolan (2007-11-13 16:48:00) [31]Итого твой вопрос сводится к:
Как стереть линию, нарисованную наTCanvasметодамиMoveTo и LineTo.