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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2010, 01:06   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
Подмигивание Графическое приложение.

Нередко встречал в интернете странички с каким-либо фоновым римунком, водя по которым мышкой, из-под указателя летят разные фигурки (цветы, деды морозы, снегурки))) и т.д.) Прежде всего хотелось бы узнать на чем была написала (ЯВУ имею ввиду) подобная страница и и можно ли написать подобное приложение дна Дельфи? Если можно то с помощью каких компонентов? Вот лично мой код, но он косячный, сейчас объясню почему...
Код:
procedure THello.FormKeyPress(Sender: TObject; var Key: Char);
begin
If key=#27 then close;
end;

procedure THello.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
j:=j+1;
GetCursorPos(pos);
JvImageRotate1.Top:=pos.Y;
JvImageRotate1.Left:=pos.X-JvImageRotate1.Width+10;
label1.Caption:=inttostr(pos.X)+' x '+ inttostr(pos.Y);
i:=i+1;
image:=TJvImageRotate.Create(Hello);
image.Parent:=Hello;
image.Top:=JvImageRotate1.Top+20;
image.Left:=JvImageRotate1.Left;
image.Picture:=JvImageRotate1.Picture;
image.Proportional:=JvImageRotate1.Proportional;
image.Width:=JvImageRotate1.Width;
image.Height:=JvImageRotate1.Height;
image.Transparent:=true;
image.Name:='image'+inttostr(i);
image.visible:=true;
end;
Здесь я загружаю в заранее созданный JvImageRotate - компонент для работы с gif (использую gif для того чтобы не заморачиваться с прозрачностью, но качество оставляет желать лучшего) из библиотеки, скачанной с простор интернэта. Мой первоначальный Image следует за курсором, но как-то прерывисто: вверх и вправо нормально, а вниз и в лево image появится рядом с курсором только после того, каккурсор пройдет ширину или высоту image (я использую метод координат... можно ли "привязать" image к курсору?). При каждом новом движении должны создваться images подобные начальному и лететь по траектории - потом исчезать, и так непрерывно, пока курсор не будет стоять на месте (тогда они не летят). Думаю, суть проблемы ясна. На мой взгляд довольно сложная задача, но ведь сложно всегда то, чего не знаешь так что думаю, что поможете разобраться. Если есть какие-то идеи, то пишите!
P.S. Заранее всем огромное спасибо!
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 21.01.2010, 01:26   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
можно ли "привязать" image к курсору?
Например так
Код:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Image1.Top := Y;
  Image1.Left := X;
end;
upd
Цитата:
При каждом новом движении должны создваться images подобные начальному и лететь по траектории - потом исчезать, и так непрерывно, пока курсор не будет стоять на месте
Вот что набросал. (ИМХО) так себе способ
На Image1 и Form1 повесить процедуру FormMouseMove
И Image1.AutoSize = false;
Код:
...
const
  countObj = 5;
  ArrImgName = 'arrImg';

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    oldX, oldY: Integer;
    arrImg: array[1..countObj] of TImage;
    procedure StopAnim;
    procedure StartAnim;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Point: TPoint;
begin
  GetCursorPos(Point);
  Image1.Top := Point.Y - Top - 20;
  Image1.Left := Point.X - Left - 25;
  if (oldX = X) and (oldY = Y) then
    StopAnim
  else
    StartAnim;
  oldX := X;
  oldY := Y;
end;

procedure TForm1.StartAnim;
var
  i: Byte;
begin
  Image1.Visible := true;
  for i := 1 to countObj do
  begin
    with arrImg[i] do
    begin
      Top := Image1.Top + (Image1.Height * i);
      Left := Image1.Left;
      Visible := true;
    end;
  end;
  UpdateWindow(Handle);
end;

procedure TForm1.StopAnim;
begin
  Image1.Visible := false;
  arrImg[1].Visible := false;
  arrImg[2].Visible := false;
  arrImg[3].Visible := false;
  arrImg[4].Visible := false;
  arrImg[5].Visible := false;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Byte;
begin
  for i := 0 to countObj do
  begin
    arrImg[i] := TImage.Create(Self);
    with arrImg[i] do
    begin
      Parent := Self;
      Name := ArrImgName + IntToStr(i);
      Width := Image1.Width;
      Height := Image1.Height;
      Visible := false;
      Picture := Image1.Picture;
    end;
  end;
end;

end.
траектория за тобой
Вложения
Тип файла: rar Move TImage.rar (7.4 Кб, 17 просмотров)

Последний раз редактировалось psycho-coder; 21.01.2010 в 02:36.
psycho-coder вне форума Ответить с цитированием
Старый 21.01.2010, 09:02   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Прежде всего хотелось бы узнать на чем была написала
На JavaScript таких примеров куча.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 12:48   #4
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Я вот быстренько сделал нечто подобное. Использовал layered window. Исходники прилагаю.
Вложения
Тип файла: rar Particles.rar (210.9 Кб, 20 просмотров)
maxionans вне форума Ответить с цитированием
Старый 21.01.2010, 12:49   #5
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Stilet, Спасибо, за ответ, наверное это то, что мне нужно! Займусь его изучением сразу после того, как что-нибудь подобное получиться сделать на Дельфи.
Psycho-coder, классная задумака! Тот код, что вы написали почти рабочий! (только вот, когда шыку водишь, под начальным изображением появляется ещё 4 :-), но я попробую разобраться с этим!) И изображение начальноеследуют за указателем нормально!!! Отлично я бы сказал! Но вот иногда все 5 изображений мигают... как и у меня было. С чем это связано? (Напоминает обновление монитора при замедленной съемке=))
maxionans, к сожалению не получается посмотреть ваши исходники... ImageList.ColorDepth - в моем дельфи такого нет (Doesn't exist), но программу exe посмотрел!!! Отлично работает! То что надо! И ещё... видимо вы пользовалсь какими-то компонентами при создании, которыхх у меня нет.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 21.01.2010 в 13:08.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 21.01.2010, 13:53   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
только вот, когда шыку водишь, под начальным изображением появляется ещё 4 :-)
В этих четырех изображениях должны были быть другие рисунки, как бы шлейф от движения курсора. Но как уже писал выше, способ не очень.
psycho-coder вне форума Ответить с цитированием
Старый 21.01.2010, 16:55   #7
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Цитата:
Сообщение от ImmortalAlexSan Посмотреть сообщение
maxionans, к сожалению не получается посмотреть ваши исходники... ImageList.ColorDepth - в моем дельфи такого нет (Doesn't exist), но программу exe посмотрел!!! Отлично работает! То что надо! И ещё... видимо вы пользовалсь какими-то компонентами при создании, которыхх у меня нет.
Нет, никаких сторонних компонентов, все стандартное, просто написано на Delphi 2009.
maxionans вне форума Ответить с цитированием
Старый 22.01.2010, 20:15   #8
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Нет, никаких сторонних компонентов, все стандартное, просто написано на Delphi 2009.
У нас тут в основном на Делфи7 сидят...
Цитата:
из-под указателя летят разные фигурки (цветы, деды морозы, снегурки))) и т.д.) Прежде всего хотелось бы узнать на чем была написала (ЯВУ имею ввиду) подобная страница и и можно ли написать подобное приложение дна Дельфи?
А может там просто курсор поменяли на готовый анимированный?
На делфи так запросто можно сделать...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графическое программирование MedvedoLex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 13.10.2010 12:42
графическое приложение (с API-функций) diliana Win Api 11 26.07.2009 08:42
графическое отображение CraZZy RabbIt Общие вопросы Delphi 15 14.04.2009 15:22
графическое подчеркивание ссылок в меню lisa3281 HTML и CSS 1 08.03.2009 14:32
Какими средствами можно организовать графическое сопровождение БД? TitAn БД в Delphi 4 29.05.2007 21:51