ListView animasyon gelmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

ListView animasyon gelmesi

Mesaj gönderen hido »

Selam arkadaşlar formda iki tane ListView kullanıyorum ListView biri sürekli işlem yaparken diğer ListView buton yardımıyla formun sağ tarafından sola doğru gelmesini nasıl sağlarım.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: ListView animasyon gelmesi

Mesaj gönderen SimaWB »

Formun üzerine bir tane Timer koyun. Timer'ın Enabled değerini False, Interval değerini 10 yapın. Buttonun OnClick olayında Timer'ın Enabled değerini True atayın. Timer'ın OnTimer olayına aşağıdakileri yazarsanız, butona bastığınızda ListView2 sola doğru hareket edecektir. Formun en soluna geldiğinde duracaktır:

Kod: Tümünü seç

  if ListView2.Left > 0 then
    ListView2.Left := ListView2.Left - 1
  else
    Timer1.Enabled := False; 
Timer'ın Interval değeri ile oynayıp Listview'ın daha hızlı yada daha yavaş hareket etmesini sağlayabilirsiniz.
Not: Formun DoubleBuffered özelliğini True yapmanızı tavsiye ederim...
There's no place like 127.0.0.1
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: ListView animasyon gelmesi

Mesaj gönderen hido »

Teşekkür ederim...
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: ListView animasyon gelmesi

Mesaj gönderen hido »

Selam listview de kayıt adeti yaklaşık 50 ve üstü olunca animasyon kasıyor, kasmaması için ne yapabilirim veya başka bir alternatif var mı?

Kod: Tümünü seç

 if ListView2.Left > 0 then
    ListView2.Left := ListView2.Left - 1
  else
    Timer1.Enabled := False;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: ListView animasyon gelmesi

Mesaj gönderen mrmarman »

İlüzyon ile :

(1) Listview'in konumunu formun dışındaki bir LEFT / TOP konumuna koyup resmini cekin,
(2) Bu resmi animasyon ile nihai olması gereken yere getirin / taşıyın / renklendirin vs.
(3) Dilerseniz küçükten zoom yaparak büyütebilirsiniz de... vs vs varyate size bağlı
(4) Son noktaya ulaşınca gerçek ListView'i resimle aynı LEFT / TOP değerini verip ön plana getirin. Resin Visible özelliğini de False edin gitsin.

İşte animasyon... :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: ListView animasyon gelmesi

Mesaj gönderen hido »

mrmarman yazdı:İlüzyon ile :

(1) Listview'in konumunu formun dışındaki bir LEFT / TOP konumuna koyup resmini cekin,
(2) Bu resmi animasyon ile nihai olması gereken yere getirin / taşıyın / renklendirin vs.
(3) Dilerseniz küçükten zoom yaparak büyütebilirsiniz de... vs vs varyate size bağlı
(4) Son noktaya ulaşınca gerçek ListView'i resimle aynı LEFT / TOP değerini verip ön plana getirin. Resin Visible özelliğini de False edin gitsin.

İşte animasyon... :idea:

:mrgreen: Selam hocam cevap için teşekkür ederim fakat bu işlem daha zor değil mi?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: ListView animasyon gelmesi

Mesaj gönderen mrmarman »

hido yazdı: :mrgreen: Selam hocam cevap için teşekkür ederim fakat bu işlem daha zor değil mi?
- Zorluk göreceli :D
- Performans istersen, bu çözüm maksimuma yakın performans sağlar.
- Maksimum performans için DirectX / OpenGL vs. ki bunu lafa söze hiç karıştırmıyorum bile...

Aşağıdaki bu soruna göre tasarladığım procedure bir dene istersen...
Form'a bir tane TImage koy visible özelliğini de false yap bir kenarda beklesin.. Açıklamalarını Procedure içine yerleştirdim.. :idea:

Kod: Tümünü seç

Procedure ListViewDoldur_Animasyon( ListView:TListView; Image: TImage );
Var
  LAdim, TAdim : Integer;
begin
  ListView.Visible := False; // Visible False iken daha hızlı veri girişi yapılabilinir.
  // Burada ListView içeriğini doldurma işlerini yapıyoruz...
  // ------------------------------------
  // ....
  // ------------------------------------
  ListView.Visible := True;
  Application.ProcessMessages;
  // ListView'in orjinal yerinde ekran resmi kopyasını alıyoruz.
  Image.Width  := ListView.Width;
  Image.Height := ListView.Height;
  Image.Canvas.CopyRect( Image.Canvas.ClipRect, ListView.Canvas, Image.Canvas.ClipRect );
  ListView.Visible := False;
  // ListView'in resmini hemen ekranın dışında bir yere taşıyoruz...
  Image.Left       := Application.MainForm.Width  + 10;
  Image.Top        := Application.MainForm.Height + 10;
  // Orjinal konuma olan uzaklığına göre yaklaşma hızı/adımını hesaplıyoruz.
  LAdim := Image.Left div ListView.Left;
  TAdim := Image.Top  div ListView.Top;
  Image.Visible := True;

  // Form küçükse küçük adımlarla gelir.
  // Form büyükse büyük adımlarla gelir.
  while Image.Left >  ListView.Left + LAdim do
  begin
    Image.Left := Image.Left - LAdim;
    Image.Top  := Image.Top  - TAdim;
    Application.ProcessMessages;
    sleep(50);
  end;
  ListView.Visible := True;
  Image.Visible    := False;
end;
Kullanımı :

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ListViewDoldur_Animasyon( ListView1, Image1 );
end;
Resim
Resim ....Resim
Cevapla