![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перемещение TPanel за курсором мышки влеов и вправо [D7, Win2k]
Developerr © (2005-11-18 16:46:00)Добрый день.
Ув. мастера, подскажите такую вещь. У меня есть 2 компонента TPanel (Panel1 и Panel2), при этом один компонент находится внутри другого.
Мне нужно чтобы Panel2 перемещался за курсором мышки и при этом если Panel2.Left=0 или Panel2.Left=Panel1.Left-Panel2.Width, то Panel2 переставал двигаться. Все бы ничего, только при достижении Panel2.Left позиции 0, Panel2 прилипает к Panel1 и перестает двигаться.
Т.е. я хочу чтобы получилось что-то подобное Арканоиду.
Делаю я так:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
код программы
if (Panel2.Left>0) and (Panel2.Left<Panel1.Left-Panel2.Width) then
Panel2.Left:=Panel2.Left-1;
end;
Вчем проблема? Надеюсь, что не в ДНК :-))
Спасибо.
Developerr (2005-11-20 13:16:00) [1]Вот более менее нормальный вариант
procedure TForm1.Panel1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if Panel2.Left < Panel1.Width-Panel2.Width then
Panel2.Left:=X
else
Panel2.Left:=Panel1.Width-Panel2.Width;
end;
но он тоже не совсем устраивает, т.к. при движении мыши вправо Panel2 вылазит за пределы видимости, а только потом возвращается в крайнюю правую позицию.
злобная танька (2005-11-19 13:31:00) [2]вместо Mouse.CursorPos.X
юзай обычные координаты. в событии онмаусмува на панелях можешь запоминать координаты а в таймере юзать их.
злобная танька (2005-11-19 13:29:00) [3]замени
if (Panel2.Left>0) and (Panel2.Left<Panel1.Left-Panel2.Width) then
на
if Panel2.Left < Panel1.Left - Panel2.Width then
Developerr (2005-11-18 17:18:00) [4]Прошу прощения ошибся в приведеннос коде. Вместо
Panel2.Left:=Panel2.Left-1;
Нужно
Panel2.Left:=Mouse.CursorPos.X;