![]() |
|
#1
|
||||
|
||||
![]() хочу создать треугольник на форме и чтобы он крутился благодаря скрол бару....пока создал ток треугольник и то он не работает...
Цитата:
но почему то треугольник не чертиться =( подскажите в чем ошибка я записываю код в Form1.... Последний раз редактировалось Mp3, 02.04.2012 в 23:01. |
#2
|
||||
|
||||
![]() Попробуй записать по событию onPaint.
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
||||
|
||||
![]() не получается,мне кажется что где-то надо указать значение этих параметров который в скобках
Цитата:
|
#4
|
||||
|
||||
![]() Удивился. Только что проверил.
Код:
procedure TForm4.FormPaint(Sender:TObject); begin Canvas.MoveTo(50,0); Canvas.LineTo(0,50); Canvas.LineTo(100,50); Canvas.LineTo(50,0); end; Цитата:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 02.04.2012 в 23:27. |
#5
|
||||
|
||||
![]() а как его привязать к ScrollBar' у чтобы когда поварачиваю в разные стороны треугольник крутился
|
#6
|
||||
|
||||
![]() У TScrollBar'а есть свойство Position. Можно поставить Min в 0, Max в 360 и считывать Position, считая его углом, после чего пересчитывать координаты вершин в зависимости от этого угла.
jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Mp3 (02.04.2012)
|
#8
|
||||
|
||||
![]() не очень помогло=(
ушел спать...может завтра до чего нить додумаюсь |
#10
|
||||
|
||||
![]() чуть подправил код который мне дали
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; ScrollBar1: TScrollBar; procedure Scrollbar1Change(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } procedure DrawRect; public { Public declarations } end; var Form1: TForm1; x0, y0,z0 : Integer; cosa, sina : Double; RectCooOrg, RectCooLast : array[0..2] of TPoint; const pi2 = 2 * pi; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin x0 := Image1.Width div 2; y0 := Image1.Height div 2; z0 := Image1.Height div 2; RectCooOrg[0].X := -150; RectCooOrg[0].Y := - 75; RectCooOrg[1].X := -150; RectCooOrg[1].Y := 75; RectCooOrg[2].X := 150; RectCooOrg[2].Y := -75; RectCooOrg[2].Z := 150; RectCooOrg[2].z := -75; RectCooLast := RectCooOrg; cosa := cos(pi2 * Scrollbar1.Position / 360); sina := sin(pi2 * scrollbar1.Position / 360); DrawRect; end; procedure TForm1.Scrollbar1Change(Sender: TObject); begin cosa := cos(pi2 * Scrollbar1.Position / 360); sina := sin(pi2 * Scrollbar1.Position / 360); DrawRect; end; procedure TForm1.DrawRect; var I : Integer; begin Image1.Canvas.Pen.Color := clLime; for I := 0 to 4 do begin RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0); RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0); end; Image1.Canvas.Polyline(RectCooLast); end; end. я хоть в правильно направление иду? Последний раз редактировалось Admin, 05.04.2012 в 09:58. |
#11
|
|||
|
|||
![]() как минимум ошибка в
Код:
for I := 0 to 4 do begin RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0); RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0); end; работоспособность в целом не проверял. z0 нигде не используется. Последний раз редактировалось nixel, 03.04.2012 в 22:26. |
#12
|
||||
|
||||
![]() ТС забыл исправить с прямоугольника на треугольник:
Код:
var RectCooOrg, RectCooLast : array[0..3] of TPoint; ... RectCooOrg[0].X := -150; RectCooOrg[0].Y := - 75; RectCooOrg[1].X := -150; RectCooOrg[1].Y := 75; RectCooOrg[2].X := 150; RectCooOrg[2].Y := -75; RectCooOrg[3].X := -150; RectCooOrg[3].Y := -75; ... for I := 0 to 3 do begin RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0); RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0); end; Image1.Canvas.Polyline(RectCooLast); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#13
|
||||
|
||||
![]() Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; ScrollBar1: TScrollBar; procedure Scrollbar1Change(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } procedure DrawRect; public { Public declarations } end; var Form1: TForm1; x0, y0 : Integer; cosa, sina : Double; RectCooOrg, RectCooLast : array[0..3] of TPoint; const pi2 = 2 * pi; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin x0 := Image1.Width div 2; y0 := Image1.Height div 2; RectCooOrg[0].X := -120; RectCooOrg[0].Y := 65; RectCooOrg[1].X := 120; RectCooOrg[1].Y := 65; RectCooOrg[2].X := 10; RectCooOrg[2].Y := -120; RectCooOrg[3].X := -120; RectCooOrg[3].Y := 65; RectCooLast := RectCooOrg; cosa := cos(pi2 * Scrollbar1.Position / 360); sina := sin(pi2 * scrollbar1.Position / 360); DrawRect; end; procedure TForm1.Scrollbar1Change(Sender: TObject); begin cosa := cos(pi2 * Scrollbar1.Position / 360); sina := sin(pi2 * Scrollbar1.Position / 360); DrawRect; end; procedure TForm1.DrawRect; var I : Integer; begin Image1.Canvas.Pen.Color := clblack; for I := 0 to 3 do begin RectCooLast[i].X := Round(RectCooOrg[i].X * cosa - RectCooOrg[i].Y * sina + x0); RectCooLast[i].Y := Round(RectCooOrg[i].Y * cosa + RectCooOrg[i].X * sina + y0); end; Image1.Canvas.Polyline(RectCooLast); end; end. все работает но как всегда чет не до конца,когда запускаю программу треугольник вращается...но назад как вращается не видно...потому что он уже закрашен.....не подскажите что делать??? вот как это выглядит ![]() линии накладываются друг на друга%) как можно это исправить? Последний раз редактировалось Admin, 05.04.2012 в 09:58. |
#14
|
||||
|
||||
![]() Пропустил команду
имеется: Код:
procedure TForm1.Scrollbar1Change(Sender: TObject); begin cosa := cos(pi2 * Scrollbar1.Position / 360); sina := sin(pi2 * Scrollbar1.Position / 360); DrawRect; end; должно: Код:
procedure TForm1.Scrollbar1Change(Sender: TObject); begin Image1.Canvas.FillRect(Rect(0, 0, Width, Height)); cosa := cos(pi2 * Scrollbar1.Position / 360); sina := sin(pi2 * Scrollbar1.Position / 360); DrawRect; end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Mp3 (04.04.2012)
|
#15
|
||||
|
||||
![]() все работает=)
спасибо большое)) |