|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.04.2008, 16:48 | #1 |
Регистрация: 21.04.2008
Сообщений: 5
|
Вращение 5-угольника на рабочем столе
Здравствуйте, помогите пожалуста. Нужно создать вращающийся 5-уголник на рабочем столе, выдает ошибку, что используеться не тот тип данных. Вот код, проверьте пожалуста.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; tpoint=record grad, radius, x, y: integer; radian: real; end; const dtr=0.0174; x0=220; y0=220; var Form1: TForm1; implementation {$R *.dfm} function GetRGB():Integer; begin Randomize; GetRGB:=RGB(Random(255),Random(255) ,Random(255)); end; procedure TForm1.Timer1Timer(Sender: TObject); var pol: array[1..5] of tpoint; ScreenDC: HDC; Canvas: TCanvas; i: Integer; buffer: tbitmap; begin Timer1.Interval:= 175; Timer1.Enabled:=True; Canvas:=TCanvas.Create; ScreenDC:=GetDC(0); Canvas.Handle:=ScreenDC; Canvas.Brush.Color:=GetRGB; for i:=1 to 5 do begin pol[i].radian:=pol[i].grad*dtr; pol[i].x:=x0+round(cos(pol[i].radian)*pol[i].radius); pol[i].y:=y0+round(sin(pol[i].radian)*pol[i].radius); end; with buffer.Canvas do begin Handle:=GetDC(0); Canvas.MoveTo(pol[1].x, pol[1].y); Canvas.LineTo(pol[1].x, pol[1].y); Canvas.MoveTo(pol[2].x, pol[2].y); Canvas.LineTo(pol[2].x, pol[2].y); Canvas.MoveTo(pol[3].x, pol[3].y); Canvas.LineTo(pol[3].x, pol[3].y); Canvas.MoveTo(pol[4].x, pol[4].y); Canvas.LineTo(pol[4].x, pol[4].y); Canvas.MoveTo(pol[5].x, pol[5].y); Canvas.LineTo(pol[5].x, pol[5].y); end; Canvas.Draw(0, 0, buffer); for i:=1 to 5 do begin inc(pol[i].grad); if pol[i].grad>360 then pol[i].grad:=0; end; SetLength(pol, 20); pol[1].grad := 400; pol[1].radius := 500; pol[2].grad := 200; pol[2].radius := 300; pol[3].grad := 300; pol[3].radius := 100; pol[4].grad := 500; pol[4].radius := 100; pol[5].grad := 600; pol[5].radius := 300; Canvas.Polygon(pol); ReleaseDC(0,ScreenDC ); Canvas.Free; end; end. |
21.04.2008, 17:04 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
В какой строке.
I'm learning to live...
|
21.04.2008, 17:12 | #3 |
Пользователь
Регистрация: 03.08.2007
Сообщений: 26
|
Ты используешь свой тип TPoint, а функции нужен стандартный
TPoint=record x : integer; y : integer; end; SetLength(pol, 20);- нельзя изменять размер не динамического массива, аообще не понимаю заче это здесь. вот так вот можно решить, только что то утебя считает не правельно. Код:
Последний раз редактировалось K@$K@; 21.04.2008 в 17:27. |
21.04.2008, 17:22 | #4 |
Регистрация: 21.04.2008
Сообщений: 5
|
SetLength(pol);(79 строка)
и Canvas.Polygon(pol);(90 строка) |
21.04.2008, 17:26 | #5 |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
Както всё сложно и запутанно...
Код:
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
21.04.2008, 18:27 | #6 |
Регистрация: 21.04.2008
Сообщений: 5
|
Вообщето ты просто вывел на изображение, последнее значение в цикле
pol2[i].x:=x0+round(cos(pol[i].radian)*pol[i].radius); pol2[i].y:=y0+round(sin(pol[i].radian)*pol[i].radius); т.к. дальше они ни где не фигурируют, а все операции, проходят с "pol[i]", вот его то мне и надо вывести на экран. |
21.04.2008, 18:39 | #7 |
Регистрация: 21.04.2008
Сообщений: 5
|
Есть еще у кого какие идеи???
|
21.04.2008, 18:41 | #8 |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вращение 5-угольника..? | Roberto | Помощь студентам | 4 | 17.04.2008 09:38 |
Значки на рабочем столе | Xardas | Свободное общение | 4 | 01.03.2008 20:21 |
Создать окно на рабочем столе | AidarBik | Win Api | 19 | 09.02.2008 17:47 |
SpeedButton на рабочем столе | ERASERROR | Общие вопросы Delphi | 10 | 22.01.2008 16:58 |
html на рабочем столе | >AdepT< | Win Api | 4 | 28.02.2007 20:06 |