Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2011, 20:07   #1
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию движение кнопки по форме

помогите, пожалуйста, написать код, в котором кнопка будет перемещаться по форме по кругу, то есть доходя до края формы, будет спускаться вниз, затем налево и вверх и т.д.

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
button1.Left:=Button1.Left+10
end;

end.

Последний раз редактировалось Stilet; 21.08.2011 в 20:29.
Olya1985 вне форума Ответить с цитированием
Старый 21.08.2011, 20:12   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

И каой же практический смысл в таком баловстве ?)
mss вне форума Ответить с цитированием
Старый 21.08.2011, 20:49   #3
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

в целях обучения
Olya1985 вне форума Ответить с цитированием
Старый 21.08.2011, 20:52   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И каой же практический смысл в таком баловстве ?)
Человек учится. Или ты не способен понять интересы других? Религия не позволяет?
Цитата:
Olya1985
Начала верно:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var    ang:double;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 with button1 do begin
  if (Left>(Self.Width-Width)) then begin
   ang:=ang+pi/2; left:=left-10; end;
  if (top>(Self.Height-Height)) then begin
   ang:=ang+pi/2; top:=top-Height-10;end;
  if (Left<0) then begin
   ang:=ang+pi/2; left:=left+10;end;
  if (top<0) then begin
   ang:=ang+pi/2; top:=10;end;

  top:=top+round(sin(ang))*10;
  left:=left+round(cos(ang))*10;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ang:=0; 
end;

end.
Это к примеру старый школьный трюк

P.S. Не тот код запостил - вверху поправил на верный
I'm learning to live...

Последний раз редактировалось Stilet; 21.08.2011 в 21:00.
Stilet вне форума Ответить с цитированием
Старый 21.08.2011, 20:59   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
ты не способен понять интересы других? Вера не позволяет?
Я как-нибудь сам со своей "верой" и "способностями" разберусь, без твоих указок.

Всего лишь полюбопытствовал почему именно кнопка, а не любой иной графический контрол, коих немало.

И дурному, любезный, не надо учить начинающих, раз уж берешься учить.
Нет никакого резона месить в кучу использование полей объекта, раз уж речь идет об ООП, и обычных переменных.

Взялся показывать пример ? Так рассказывай, почему для хранения временных результатов выбраны именно стат.переменные, а не поля объекта-формы, что очевиднее и полезнее для постижения "таинств" дельфийского ООП)

Последний раз редактировалось mss; 21.08.2011 в 21:07.
mss вне форума Ответить с цитированием
Старый 21.08.2011, 21:03   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Всего лишь полюбопытствовал почему именно кнопка
Грубо полюбопытствовал. Ты потише будь, общайся с людьми без издевок.
Цитата:
почему для хранения временных результатов выбраны именно стат.переменные, а не поля объекта-формы, что очевиднее и полезнее для постижения "таинств" дельфийского ООП
У тебя все настолько запущено в идеологии что я даже спорить не хочу. Да и бесполезно тебе доказывать.
I'm learning to live...

Последний раз редактировалось Stilet; 22.08.2011 в 12:44.
Stilet вне форума Ответить с цитированием
Старый 22.08.2011, 12:09   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TDrive = (dUnknown, dUp, dRight, dDown, dLeft);

var
  Form1: TForm1;

  { Чертович Сергей Андреевич chertovich@bk.ru
    22 августа 2011 г }

  Drive: TDrive = dUnknown;  // Направление, куда перемещать кнопку
  D: Boolean = True;  // Направление, если True - по часовой стрелки, иначе - против

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Top := 0;
  Button1.Left := 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const
  Step = 10;  // Шаг, на который необходимо перемещать кнопку
begin

  with Button1 do
  begin
    // Установка позиции для первого раза
    if Drive = dUnknown then
    begin
      Left := 0;
      Top := 0;
    end;

    { Определение дальнейшего движения }

    // Верхний левый угол
    if (Left <= 0) and (Top <= 0) then
    begin
      // Определение, если D то по часовой стрелки, иначе - против
      if D then
        Drive := dRight
      else
        Drive := dDown;
    end;

    // Верхний правый угол
    if (Left >= Self.ClientWidth - Width) and (Top <= 0) then
    begin
      // Определение, если D то по часовой стрелки, иначе - против
      if D then
        Drive := dDown
      else
        Drive := dLeft;
    end;

    // Нижний правый угол
    if (Left >= Self.ClientWidth - Width) and (Top >= Self.ClientHeight - Height) then
    begin
      // Определение, если D то по часовой стрелки, иначе - против
      if D then
        Drive := dLeft
      else
        Drive := dUp;
    end;

    // Нижний левый угол
    if (Left <= 0) and (Top >= Self.ClientHeight - Height) then
    begin
      // Определение, если D то по часовой стрелки, иначе - против
      if D then
        Drive := dUp
      else
        Drive := dRight;
    end;


    { Выполение перемещния }
    case Drive of
      // Двигать вверх
      dUp:
      begin
        // Определение, если D то по часовой стрелки, иначе - против
        if D then
        begin
          Top := Top - Step;
          Left := 0;
        end
        else
        begin
          Top := Top - Step;
          Left := Self.ClientWidth - Width;
        end;
      end;

      // Двигать вправо
      dRight:
      begin
        // Определение, если D то по часовой стрелки, иначе - против
        if D then
        begin
          Left := Left + Step;
          Top := 0;
        end
        else
        begin
          Left := Left + Step;
          Top := Self.ClientHeight - Height;
        end;
      end;

      // Двигать вниз
      dDown:
      begin
        // Определение, если D то по часовой стрелки, иначе - против
        if D then
        begin
          Top := Top + Step;
          Left := Self.ClientWidth - Width;
        end
        else
        begin
          Top := Top + Step;
          Left := 0;
        end;
      end;

      // Двигать влево
      dLeft:
      begin
        // Определение, если D то по часовой стрелки, иначе - против
        if D then
        begin
          Left := Left - Step;
          Top := Self.ClientHeight - Height;
        end
        else
        begin
          Left := Left - Step;
          Top := 0;
        end;
      end;
    end;
  end;
end;

end.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 22.08.2011 в 12:12.
chertovich вне форума Ответить с цитированием
Старый 22.08.2011, 12:51   #8
DenNik2006
Пользователь
 
Аватар для DenNik2006
 
Регистрация: 27.07.2011
Сообщений: 71
По умолчанию

насколько я понял, человеку нужно, чтобы кнопка двигалась вдоль краев формы, а вы тут начали круги рисовать вот скелет кода:
Код:
var
  Form1: TForm1;
  Area: TPoint;
  Direction: byte = 0;
  { 0 - кнопка едет вправо или вниз, 1 - влево или вверх}

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Area.X:= ClientWidth;
  Area.Y:= ClientHeight;
  with Button1 do
  case Direction of
  0: begin
       // кнопка едет к правому краю
       if Left < Area.X - Width then Left:= Left + 5 else
       // если достигла правого края, едет вниз
       if Top < Area.Y - Height then Top:= Top + 5 else
       Direction:= 1;
     end;
  1: begin
       // кнопка едет к левому краю
       if Left > 0 then Left:= Left - 5 else
       // если достигла левого края, едет вверх
       if Top > 0 then Top:= Top - 5 else
       Direction:= 0;
     end;
  end;
end;
нужны некоторые доработки.
Техника несовершенна: компьютеру, чтобы прийти в себя, нужно три пальца, человеку - всего два!
DenNik2006 вне форума Ответить с цитированием
Старый 22.08.2011, 13:31   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а вы тут начали круги рисовать
У меня не по кругу
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2011, 14:04   #10
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
У тебя все настолько запущено в идеологии
Чушь ты несешь)
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение объекта на форме мышью _-Re@l-_ Общие вопросы Delphi 12 24.07.2010 02:12
Рисование на форме. Движение точки. JDRaveN Общие вопросы Delphi 9 15.06.2009 18:03
Движение картинки по форме SaiLight Свободное общение 1 04.06.2009 04:28
помогите сделать движение на нажатие кнопки shepelin Общие вопросы Delphi 1 11.12.2007 10:11
Движение кнопки по окружности Инна Помощь студентам 10 22.04.2007 19:32