Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.01.2009, 12:45
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
По умолчанию Алгоритм движения по кругу

Возник простой вопрос! Я пишу прогуи там должна быть кнопка бегающая по кругу. Как это сделать??? То есть:
есть таймер, мне нужен кусок кода оттуда, плиз это ж нетрудно...
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #2  
Старый 11.01.2009, 13:54
Rat Rat вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 391
Репутация: 6078
По умолчанию

http://alglib.sources.ru/graphics/circle.php
Ответить с цитированием
  #3  
Старый 11.01.2009, 13:58
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
По умолчанию

Спасибо конечно, но он мне пишет, что узел не найден. Не мог бы ты сюда выложить код? =)
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #4  
Старый 11.01.2009, 16:15
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

проще простого:
Код:
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  
Старый 11.01.2009, 17:53
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
По умолчанию

Спасибо огромное!!! Ща состряпал некую "приколку". Изначальный смысл проги был в украшении курсора летающим вокруг него пикселем. Но из за какой то ошибки он теперь обладает интересным свойством, он как будта чернила размазывает цвета по экрану... Вот код:
Код:
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.
Киньте на форму таймер на 10мс вставьте код и уаля. Нечто ненужное и непонтное заполонит ваш экран. Незабудьте его потом "протереть" каким нить окошком! =)
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #6  
Старый 11.01.2009, 21:09
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

да тут и форма-то не нужна... создать динамически таймер и все тока еще горячую клавишу надо для выхода назначить
и еще...угол лучше все-таки в радиах отмерять
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
  #7  
Старый 13.01.2009, 11:27
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
Вопрос

Ну то что без формы можно эо я понимаю... А вот почему прога все размывает???
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #8  
Старый 13.01.2009, 19:59
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

вот так не размывает...но все равно остаются следы, когда окна перетаскиваешь и т.п.
Код:
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;
вообще такое удобнее формой делать. во вложении пример.
Вложения
Тип файла: rar cursor.rar (1.9 Кбайт, 24 просмотров)
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
  #9  
Старый 14.01.2009, 07:26
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
Радость

Проблемка появилась... (http://www.delphisources.ru/forum/sh...28559post28559) Если можешь выложи код так...
Под фразой...
Цитата:
...вообще такое удобнее формой делать...
я понимаю, что ты предлагаеш форму крутить вокруг курсора. Но ведь так неизбежно мерцание?
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #10  
Старый 14.01.2009, 09:38
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

чтобы мерцания не было видно, надо сдвиг подбирать. вот код:
Код:
...

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;
форма без границ, цвет по желанию, стиль - fsStayOnTop. можно еще ограничение по размеру поставить
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter