Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нажатие мышкой на форму и нахождение её координаты, Нажатие мышкой на форму  
V
    Опции темы
ihtiandr
Дата 8.2.2011, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.12.2010

Репутация: нет
Всего: нет



Уважаемые форумчане доброго всем время суток
Вот тут я написал простую программу для движения круга в форме: 

Код


var
  Form1: TForm1;
  x,y:integer;
  dx:integer;
implementation

{$R *.dfm}
procedure Ris;
begin
Form1.Canvas.Pen.Color:=Form1.Color;
Form1.Canvas.Ellipse(x,y,x+20,y+20);
x:=x+dx;
Form1.Canvas.Pen.Color:=ClBlack;
Form1.Canvas.Ellipse(x,y,x+20,y+20);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Ris;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
x:=0;
y:=200;
dx:=3;
timer1.interval:=50;
Form1.Canvas.Brush.Color:=Form1.Color;
end;

end.


У меня возникла трудность.
Помогите  разобраться пожалуйста.
Что надо написать, что бы  при нажатии на форму  круг начинал движение именно с  того места где где кликнули мышкой?


PM MAIL   Вверх
Snowy
Дата 8.2.2011, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Координаты места нажатия можешь узнать в событии OnMouseDown
PM MAIL   Вверх
ihtiandr
Дата 8.2.2011, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.12.2010

Репутация: нет
Всего: нет



Snowy я написал
Код

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
timer1.interval:=50;
end;


ничего не изменилось.

Это сообщение отредактировал(а) ihtiandr - 8.2.2011, 18:51
PM MAIL   Вверх
chip_and_dayl
Дата 8.2.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 1
Всего: 9



ihtiandr
И поняли что написали?

В MouseDown вы получаете координаты мышки, и эти координаты должны передать в свою процедуру рисования


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Snowy
Дата 8.2.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Цитата(ihtiandr @  8.2.2011,  17:08 Найти цитируемый пост)
Вот тут я написал простую программу для движения круга в форме
Это не программа движения круга по форме.
Как минимум, нет самого главного - алгоритма движения.
Есть только отрисовка круга.
А как он должен двигаться - линейно, по кругу, синусоиде, или еще как?
PM MAIL   Вверх
ihtiandr
Дата 8.2.2011, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.12.2010

Репутация: нет
Всего: нет



Snowy он должен начать двигаться линейно из тех координат на форме на которых кликнули мышкой.

Это сообщение отредактировал(а) ihtiandr - 8.2.2011, 20:56
PM MAIL   Вверх
Snowy
Дата 8.2.2011, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



и куда он должен двигаться?
PM MAIL   Вверх
ihtiandr
Дата 8.2.2011, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.12.2010

Репутация: нет
Всего: нет



Вот я изменил тут:

Код

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ris;
end;

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

Добавлено через 3 минуты и 35 секунд
Snowy 
Цитата

и куда он должен двигаться?


при полученных координатах от клика мышкой y не будет изменяться а x должно приращиваться до конца формы 
PM MAIL   Вверх
Snowy
Дата 8.2.2011, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Скучно...
Код
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Timer1Timer(Sender: TObject);
  private
    cx, cy: integer;
    dx, dy: integer;
    img: TImage;
    procedure Draw;
    procedure StartDraw(X, Y: integer);
    procedure Ouch(Sender: TObject);
  public

  end;

const r = 40;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Draw;
begin
  if img = nil then Exit;
  inc(cx,dx); inc(cy,dy);
  if (cx+r+dy > ClientWidth) then dx := -dx
  else if (cx+dx<0) then dx := -dx;
  if (cy+r+dy > ClientHeight) then dy := -dy
  else if (cy+dy < 0) then dy := -dy;
  img.Left := cx;
  img.Top := cy;
end;

procedure TForm1.StartDraw(X, Y: Integer);
begin
  cx := x - r div 2; cy := y - r div 2;
  if img = nil then
  begin
    DoubleBuffered := true;
    img := TImage.Create(self);
    img.SetBounds(cx, cy, r, r);
    img.Picture.Bitmap.Width := r;
    img.Picture.Bitmap.Height := r;
    img.Transparent := true;
    img.OnClick := Ouch;
    with img.Picture.Bitmap.Canvas do begin
      Pen.Color := clNavy;
      Pen.Width := 2;
      Brush.Color := clYellow;
      Ellipse(0, 0, r, r);
    end;
    img.Parent := self;
  end;
  dx := Random(9)-4; dy := Random(9)-4;
  Timer1.Interval := 50;
  Timer1.Enabled := true;
end;

procedure TForm1.Ouch(Sender: TObject); // не трогай шарик
begin
  Timer1.Enabled := False;
  ShowMessage('Ай! Больно же!');
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  StartDraw(X, Y);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Draw;
end;

PM MAIL   Вверх
ihtiandr
Дата 8.2.2011, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 16.12.2010

Репутация: нет
Всего: нет



Snowy Огромное спасибо.  smile smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0702 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.