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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 28.08.2010, 23:26   #1
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
Радость Летающий Label

Всем привет! Чтобы не вводить в заблуждение напишу просто. Есть форма определённого размера и на ней находится Label. Вопрос заключается в следующем. Label должен начать движение в любую сторону к краю формы(не обязательно ровное движение. Возможно и на угол и наискосяк) и когда он достигнет края, то должен изменить своё направление т.е. под каким углом прилетел к краю формы под таким же должен и улететь но только в другом направлении пока не достигнет другого края формы и так до бесконечности. Т.е. на принципе мячика, который отпрыгивает от стенки. Может кто-нибудь знает простой способ как такое можно осуществить. Или может есть примеры. Буду рад любой информации. Язык Delphi
Всегда рад помочь!
Terran вне форума
Старый 28.08.2010, 23:41   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Как насчёт так
Код:
var
  Form1: TForm1;
  l, r: boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
    r := true;
    l := false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    if (label1.Left <> 0) and (r = true) then
    begin
        label1.Left:= label1.Left -1;
    end
    else
        begin
            l := true;
            r := false;
            if ((label1.Left + label1.Width) <> (form1.Width - label1.Width)) and (l = true) then
             begin
                 label1.Left := label1.Left + 1;
             end
             else
                begin
                    l := false;
                    r := true;
                end;
        end;
end;
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума
Старый 29.08.2010, 00:01   #3
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Спасибо за код! Но это немного не то, что нужно. Нужно движение по диагонали с изменением направления движения.
Всегда рад помочь!
Terran вне форума
Старый 29.08.2010, 00:52   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Всё. Разобрался со своей проблемой. Выкладываю код. Может кому пригодится.
Код:
Var
PosX,PosY,SpX,SpY: Integer;
Procedure Move;
Begin
PosX:=PosX+SpX;
PosY:=PosY+SpY;
If PosX > Form1.ClientWidth - Form1.Label1.Width Then
Begin
PosX:=Form1.ClientWidth - Form1.Label1.Width;
SpX:= - SpX;
End
Else
If PosX < 0 Then
Begin
PosX:=0;
SpX:= - SpX;
End;
If PosY > Form1.ClientHeight - Form1.Label1.Height Then
Begin
PosY:=Form1.ClientHeight - Form1.Label1.Height;
SpY:= - SpY;
End
Else
If PosY < 0 Then
Begin
PosY:=0;
SpY:= - SpY;
End;
Form1.Label1.Left:=Round(PosX);
Form1.Label1.Top:=Round(PosY);
End;
Procedure TForm1.Timer1Timer(Sender: TObject);
Begin
Move;
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
PosX:=0;
PosY:=0;
SpX:=5;
SpY:=5;
End;
Hacker19_90, спасибо за помощь!
Всегда рад помочь!

Последний раз редактировалось Terran; 29.08.2010 в 02:40.
Terran вне форума
Старый 24.09.2010, 19:38   #5
glGizma
Пользователь
 
Регистрация: 25.02.2010
Сообщений: 49
По умолчанию

А если сделать вот так:
Код:
Screen.WorkAreaWidth - Form1.Width
Screen.WorkAreaHeight - Form1.Height
и в конце
Form1.Left:=Round(PosX);
Form1.Top:=Round(PosY);
Пример:
Код:
glGizma.narod.ru/download/posx-posy.rar
Буит ещё луче , если у вас (как и у меня) 2или3 монитора, рекомендую использовать Desktop. Написал тут с корешом прогу, которая при запуске перемещает все ближайшие окна (виндовые), как закончим писать выложим код...
glGizma вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Квадрат летающий по экрану 29AHexNumber Помощь студентам 2 14.12.2009 15:37
Label TimeChip Общие вопросы Delphi 14 30.01.2009 15:00
При расположении Label на компонентах, место под Label, не реагирует на событие onClick. NavigatorNeba Компоненты Delphi 3 15.11.2008 19:56
label dmitrymoskva Общие вопросы Delphi 7 24.10.2007 18:54
Вопрос по label. Как сделать так чтобы label была прозрачной. Lonix Компоненты Delphi 2 01.04.2007 06:23