Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Y X Step's


RASkov ©   (2006-08-19 23:51:00) 

Сегдя день какой то... тормажу блин.
Как осуществить перемещение (прокрутку) например Labelя по форме. Т.е. нажал мышу переместил на пятнадцать пикселей вправо отпустил у Labelя Left прибавился на 15
И при этом перемещать сам Labelь во время перемещения мыши с нажатой кнопкой
Зделал так (см ниже) получились качели какие то. Мышь водишь с нажатой кнопкой вправо влево по 5 пикселей а Labelь начинает летать из стороны в сторону начиная по чуть чуть и разгоняется до бешенных скоростей. Улетает за края формы хрен знает куда. :(

Это надо мне для того чтобы перемещать область....Есть Битмап большой (Больше размера формы) нужно CopyRect'om копировать область на клиентскую часть формы...
вот и сделать типа прокрутки битмапа на форме.... Блин вроде понятно написал - зацепил - тащишь - о она (часть Битмапа) копируется на форму... Уххх..

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

StartX, StartY, NewX, NewY: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 NewX:=Label1.Left; NewY:=Label1.Top;
end;

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

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var StepX, StepY: Integer;
begin
 if ssLeft in Shift then begin
  StepX:=X-StartX;
  StepY:=Y-StartY;
  NewX:=NewX+StepX;
  NewY:=NewY+StepY;
  Label1.Caption:=Format('X= %d StartX= %d, StepX= %d',[X, StartX, StepX]);
  Label1.Left:=NewX;
  Label1.Top:=NewY;
 end;
end;


RASkov   (2006-08-20 02:56:00) [1]

> [4] Pavia ©   (20.08.06 02:20)

СПАСИБО БОЛЬШОЕ.
То что надо. Сейчас попробую все это что бы с учетом границ формы сделать. Ну это как в ACDSee с картинокой - когда ее тащишь вверх то если нижняя граница достигла низа формы то переставалась тащиться... Если и здесь не соображу ... уж помогите...


Pavia   (2006-08-20 02:20:00) [2]

procedure TForm1.FormCreate(Sender: TObject);
begin
NewX:=Label1.Left; NewY:=Label1.Top;

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
StartX:=X; StartY:=Y;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
if ssLeft in Shift then begin
 Label1.Left:=NewX+X-StartX;
 Label1.Top:=NewY+Y-StartY;
 Label1.Caption:=Format('X= %d StartX= %d, StepX= %d',[X, StartX, X-StartX]);
end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 NewX:=NewX+X-StartX;
 NewY:=NewY+Y-StartY;

end;


DesWind   (2006-08-20 01:59:00) [3]

Я щас снова фигню скжу, а может и правду ))) А может попробовать шаг не вычислять, а просто координаты мышки присваивать )


DesWind   (2006-08-20 01:47:00) [4]

Интуитвно!!! Глобальных переменных нехватает. Не в том состоянии,шоб листинги читать )


RASkov   (2006-08-20 01:32:00) [5]

Типа кроме меня ещё и никто незнает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо