![]() |
|
|
#1
|
||||
|
||||
|
хочу создать треугольник на форме и чтобы он крутился благодаря скрол бару....пока создал ток треугольник и то он не работает...
Цитата:
но почему то треугольник не чертиться =( подскажите в чем ошибка я записываю код в Form1.... Последний раз редактировалось Mp3, 02.04.2012 в 23:01. |
|
#2
|
||||
|
||||
|
Попробуй записать по событию onPaint.
|
|
#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; Цитата:
Последний раз редактировалось Bargest, 02.04.2012 в 23:27. |
|
#5
|
||||
|
||||
|
а как его привязать к ScrollBar' у чтобы когда поварачиваю в разные стороны треугольник крутился
|
|
#6
|
||||
|
||||
|
У TScrollBar'а есть свойство Position. Можно поставить Min в 0, Max в 360 и считывать Position, считая его углом, после чего пересчитывать координаты вершин в зависимости от этого угла.
|
| Этот пользователь сказал Спасибо 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); |
|
#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; |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Mp3 (04.04.2012)
| ||
|
#15
|
||||
|
||||
|
все работает=)
спасибо большое)) |