![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Возник простой вопрос! Я пишу прогуи там должна быть кнопка бегающая по кругу. Как это сделать??? То есть:
есть таймер, мне нужен кусок кода оттуда, плиз это ж нетрудно... |
|
#2
|
|||
|
|||
|
|
|
#3
|
|||
|
|||
|
Спасибо конечно, но он мне пишет, что узел не найден. Не мог бы ты сюда выложить код? =)
|
|
#4
|
||||
|
||||
|
проще простого:
Код:
const centerx=200; //координаты центра
centery=200; //окружности
rad=50; //радиус
var angle:real; //угол
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button1.Left:=centerx+Round(rad*cos(angle));
Button1.Top:=centery+Round(rad*sin(angle));
angle:=angle+pi/18; //изменение угла. чем меньше, тем точнее
//здесь угол 10*
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
angle:=0; //начальный угол
end;![]() следует учитывать, что координаты кнопки отсчитываются относительно ее левого верхнего угла |
|
#5
|
|||
|
|||
|
Спасибо огромное!!! Ща состряпал некую "приколку". Изначальный смысл проги был в украшении курсора летающим вокруг него пикселем. Но из за какой то ошибки он теперь обладает интересным свойством, он как будта чернила размазывает цвета по экрану... Вот код:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ScreenDC: hDC;
xc,yc,c,x,y : Integer;
a : real;
mp : TPoint;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
GetCursorPos(mp);
xc := mp.X;
yc := mp.Y;
ScreenDC := GetDC(0);
c := GetPixel(ScreenDc,xc+Round(25*cos(a)),yc+Round(25*sin(a)));
SetPixel(ScreenDc,x,y,c);
SetPixel(ScreenDc,xc+Round(25*cos(a)),yc+Round(25*sin(a)),clRed);
x := xc+Round(25*cos(a));
y := yc+Round(25*sin(a));
a := a + 0.1;
ReleaseDC(0,ScreenDC); {îñâîáîäèòü êîíòåêñò}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
a := 0;
end;
end. |
|
#6
|
||||
|
||||
|
да тут и форма-то не нужна... создать динамически таймер и все
тока еще горячую клавишу надо для выхода назначитьи еще...угол лучше все-таки в радиах отмерять |
|
#7
|
|||
|
|||
|
Ну то что без формы можно эо я понимаю... А вот почему прога все размывает???
|
|
#8
|
||||
|
||||
|
вот так не размывает...но все равно остаются следы, когда окна перетаскиваешь и т.п.
Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin GetCursorPos(mp); xc := mp.X; yc := mp.Y; ScreenDC := GetDC(0); SetPixel(ScreenDc,x,y,c); c := GetPixel(ScreenDc,xc+Round(25*cos(a)),yc+Round(25*sin(a))); SetPixel(ScreenDc,xc+Round(25*cos(a)),yc+Round(25*sin(a)),clRed); x := xc+Round(25*cos(a)); y := yc+Round(25*sin(a)); a := a + pi/36; ReleaseDC(0,ScreenDC); end; |
|
#9
|
|||
|
|||
|
Проблемка появилась... (http://www.delphisources.ru/forum/sh...28559post28559) Если можешь выложи код так...
Под фразой... Цитата:
|
|
#10
|
||||
|
||||
|
чтобы мерцания не было видно, надо сдвиг подбирать. вот код:
Код:
...
var cur : TPoint;
r1 : integer; //можно и дробным сделать
a1, r2, n:real;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
GetCursorPos(cur);
r2:=r1*(cos(n*a1)); //функция в полярных координатах
Form1.Width:=5;
Form1.Height:=5;
Form1.Left:=cur.X+Round(r2*cos(a1))+5;
Form1.Top:=cur.Y+Round(r2*sin(a1))-5; //чтобы мышке не мешалось
a1:=a1+pi/180;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(application.Handle, GWL_EXSTYLE) Or WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW);
Form1.Height:=5;
Form1.Width:=5;
Form1.Top:=-5;
Form1.Left:=-5;
a1:=0;
r1:=100;
n:=3;
end; |