29 Eylül 2014 Pazartesi

Delphi Android Run-time nesne hareketi

Merhabalar,



Örneğimiz için form ekranına 1 adet TImage nesnesi yerleştirmeniz ve içerisine resim yüklemeniz yeterlidir.

Test amaçlı rastgele bir nesne daha eklemeniz de gerek. Çünkü yerini değiştireceğimiz TImage nesnesi, o eklediğimiz resmin üzerine geldiğinde donuyormu onu test etmek için.

İlk olarak Uses kısmına gerekli kütüphaneyi ekleyelim:

System.Math.Vectors


Sıradaki işlem "private" bölümüne aşağıdaki değişkenleri tanımlayınız. Tercih sebebi olarak genel var bloğunada tanımlayabilirsiniz.

FStartPos: TPointF;
FPressed: Boolean;


Bu TImage nesnemizin uyladığımız işlemleri kullanabilmesi için "AutoCapture" özelliğinin daima true olması gerekmektedir. Formun OnCreate bölümüne aşağıdaki kodu ekleyiniz.

DraggableImage.AutoCapture := True;

Sıradaki işlemimiz parmağımızın resmin üzerine geldiğini algılaması ve bu durumda tanımladığımız FPressed değişkenini true yapmak. Bunun için resmin OnMouseDown eventine aşağıdaki kodu ekleyiniz.

FPressed := True;

FStartPos := TPointF.Create(X, Y);



Şimdi parmağımızın resimde olmadığı durumu değişkenimize aktarmaya geldi onun için resmin OnMouseUp eventine aşağıdaki kodu ekleyiniz.

FPressed := False;


Ve son olarak resmin OnMouseMove eventine hareket işlemleri için gerekli kod bloğumuzu ekliyoruz.

var
  MoveVector: TVector;
begin
  if FPressed then
  begin
    MoveVector := TVector.Create(X - FStartPos.X, Y - FStartPos.Y, 0);

    MoveVector := DraggableImage.LocalToAbsoluteVector(MoveVector);
    if DraggableImage.ParentControl <> nil then
      MoveVector := DraggableImage.ParentControl.AbsoluteToLocalVector(MoveVector);
    DraggableImage.Position.Point := DraggableImage.Position.Point + MoveVector.ToPointF;
  end;

Not: www.fire-monkey.ru formundaki bir yazıdan anladığım kadarı ile uyguladığım bir uygulamadır.