Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемещение фигуры на 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, и перетаскивать по нему некоторую фигуру(напр окружность).


Наверх

Титульная страница Поиск, карта сайта Написать письмо