|
#1
|
|||
|
|||
Рисуем след
У меня вопрос
как сделать что бы за кружком следую рисовалась линия Код:
var t:real; Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin t:= t + Timer1.Interval/1000; Shape1.Top := round(50*sin(t))+300; Shape1.Left := round(50*cos(t))+300; end; end. |
#2
|
|||
|
|||
Все спят что ли (
Я вот мучаюсь нефига не получается |
#3
|
|||
|
|||
Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin t:= t + Timer1.Interval/1000; Shape1.Top := round(50*sin(t))+300; Shape1.Left := round(50*cos(t))+300; Canvas.LineTo((Shape1.Left shl 1 + Shape1.Width) shr 1, (Shape1.Top shl 1 + Shape1.Height) shr 1); end; |
#4
|
||||
|
||||
Nyctos Kasignete, я тож так подумал, но сам Shape своей прорисовкой перекрывает (стирает) Canvas. С Canvas никогда не приходилось работать, но че- то пост заинтересовал. Как сделать линию канвы постоянной?
|
#5
|
|||
|
|||
Чтобы линия не затиралась объектом Shape, можно поступать по-разному... Можно линию отрисовывать не на Canvas формы, а, например, на прозрачном TImage (со всеми последствиями). А можно (предпочтительнее) на отдельном Bitmap в памяти, который затем отрисовывать на Canvas'е. Вот как-то так, наверное:
Код:
var Form1: TForm1; t: real; Bmp: TBitmap; .................. procedure TForm1.Timer1Timer(Sender: TObject); begin t := t + Timer1.Interval/1000; Shape1.Top := round(50*sin(t))+300; Shape1.Left := round(50*cos(t))+300; Application.ProcessMessages; Bmp.Canvas.LineTo(Shape1.Left + Shape1.Width shr 1, Shape1.Top + Shape1.Height shr 1); Canvas.Draw(0, 0, Bmp); end; procedure TForm1.FormCreate(Sender: TObject); begin t := 0; Bmp := TBitmap.Create; Bmp.Width := ClientWidth; Bmp.Height := ClientHeight; Bmp.Transparent := True; Shape1.Top := round(50*sin(t))+300; Shape1.Left := round(50*cos(t))+300; Bmp.Canvas.MoveTo(Shape1.Left + Shape1.Width shr 1, Shape1.Top + Shape1.Height shr 1); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Bmp.Free; end; |
#6
|
|||
|
|||
Спасибо за пример
но он сильно проц грузит = ) |
#7
|
|||
|
|||
Оптимизируйте изображение. Если вам нужно от него только рисование линии, вообще сделайте его битовым, т.е. монохромным. После вызова конструктора напишите Bmp.Monochrome := True; можете уменьшить размеры, но тогда, возможно, придется внести небольшие поправки в код.
|