![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перемещение фигуры на TCanvas [D7, WinXP]
Виталька2005 © (2005-09-28 18:38:00)Здравствуйте, мастера.
Я хочу мышкой перетаскивать некоторую фигуру (напр окружность) по канвасу. На пейнтбоксе
всё работает приемлемо, но когда беру TImage - начинаются жуткие тормоза.
А без TImage обойтись не могу, т.к. мне нужна прозрачность
(под ним в качестве фона другая картинка лежит)
Подскажите как тормоза убрать?
Dereks (2005-10-06 13:44:00) [1]Попробуй фоновую картинку загрузить в переменную типа TBitmap, и засунуть в обработчик OnMouseMove пейнтбокса текст:
...
var {глобальные}
b: TBitmap;//содержит фоновые рисунок
bool: boolean;//лог. перем. показывает был ли произведён щелчок на канве
...
{при создании}
begin
b:=TBitmap.create;
b.loadfromfile('....');
end;
{OnMouseDown}
...
begin
bool:=true;
....
end;
{OnMouseMove}
begin
if not bool=true then exit;
PaintBox1.canvas.assign(b);
{алгоритм перетаскивания фигуры}
end;
{OnMouseUp}
..
begin
bool:=false;
end;
Виталька2005 (2005-10-01 23:45:00) [2]Получилось только сделать, как ЮЮ в (29.09.05 08:30) [4] сказал.
А если под пейнтбокс имадж положить, то окружность
при перетаскивании за собой след оставляет.
Т.е. вот это
Brush.Style:=bsClear;
FillRect(ClipRect);
эффекта не имеет получается.
Вот код целиком:
with PaintBox1.Canvas do
begin
Brush.Style:=bsClear;
FillRect(ClipRect);
Pen.Width:=2;
Pen.Color:=Circles[i].color;
Arc(x0-r,y0-r,x0+r,y0+r,x0+r,y0,x0+r,y0);
end;
меня конешно и просто пейнтбокс устраивает, но теперь просто интересно, почему не работает как Antonn предложил.
Antonn (2005-09-29 09:33:00) [3]ЮЮ © (29.09.05 8:30) [4]
думаю, как всегда - если в TImage неизвестно что, JPEG или BMP.
ЮЮ (2005-09-29 08:30:00) [4]А что мещает на пейнтбоксе сначала вывести картинку, а потом рисовать круг?
Antonn (2005-09-29 03:53:00) [5]ну это не сложно:
with paintbox1.Canvas do begin
brush.Style:=bsclear;
fillrect(paintbox1.ClientRect);
brush.Style:=bsSolid;
//рисуем свое, например эллипс
end;
Виталька2005 (2005-09-28 23:31:00) [6]Antonn, не могу сделать пейнтбокс прозрачным:(
Antonn (2005-09-28 19:09:00) [7]над image ложить paintbox, и перетаскивать по нему некоторую фигуру(напр окружность).