Sayfayı Yazdır | Pencereyi Kapat

Image Timer

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Genel İşlemler
Forum Tanımlaması: TRObject dili ile programlama yaparken karşılaşılan genel işlemler
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=553
Tarih: 07 Ocak 2025 Saat 23:12
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Image Timer
Mesajı Yazan: sqlae
Konu: Image Timer
Mesaj Tarihi: 07 Ağustos 2023 Saat 17:27
Merhabalar, bir image'in içerisine koyduğum resmin timer ile sürekli olarak değişmesini istiyorum 2 adet resmim mevcut bu resime tıklandığında resim sürekli olarak 2 resim arasında değişsin bunu nasıl yapabilirim.



Cevaplar:
Mesajı Yazan: Alforce
Mesaj Tarihi: 07 Ağustos 2023 Saat 17:39
Öncesinde değişkenleri oluştur:
Var
  ImageOrder: Boolean;
  Images: Variant;
...
Begin
  ImageOrder:= False;
  Images:= ['Image1.png','Image2.png'];
  ...

Sonra Timerın OnTimer olayına bunu yaz:
  if ImageOrder then
    MyForm.SetImage(Image1, Images[0])
  else
    MyForm.SetImage(Image1, Images[1]);
  
  ImageOrder:= not ImageOrder;

Bu 2 adet resim için iyi çalışmalıdır.
Ama 2 den fazla resim için farklı bir yaklaşım izlenir.


Mesajı Yazan: sqlae
Mesaj Tarihi: 07 Ağustos 2023 Saat 17:43
2 den fazla olan resim yaklaşımını da öğrenebilir miyim ? 


Mesajı Yazan: Alforce
Mesaj Tarihi: 07 Ağustos 2023 Saat 17:54
Önemli nokta, bunlar global değişken.
Var
  ImageOrder: Integer;
  Images: Variant;
...
Begin
  ImageOrder:= 0;
  Images:= ['Image1.png','Image2.png','Image3.png','Image4.png'];
  ...

Const
Max = 4;
Begin 
MyForm.SetImage(Image1, Images[ImageOrder]);
  
  ImageOrder:= ImageOrder +1;
if ImageOrder >= Max then
ImageOrder:= 0;
End;


Mesajı Yazan: sqlae
Mesaj Tarihi: 08 Ağustos 2023 Saat 09:17
Merhaba kodu çalıştırdıktan sonrasında şu hatayı almaya başlıyorum sanırım resim sayısı fazla oldu :)

https://i.hizliresim.com/twdixvk.png" rel="nofollow - https://i.hizliresim.com/twdixvk.png

Kod satırı

var
MyForm:TclForm;
testButton : TclButton;
GetTimer: TClTimer;

ImageOrder: Integer;
Images: Variant;

procedure testButtonOnClick;
begin
   
end;

procedure resimDeg;
const
  Max = 29;
Begin    
  MyForm.SetImage(testButton,Images[ImageOrder]);
  ImageOrder:= ImageOrder +1;
  
  if ImageOrder >= Max then
    ImageOrder:= 0;
end;

begin
MyForm := TclForm.Create(Self)
MyForm.SetFormColor('#FFFFFF','#FFFFFF',clGVertical);

ImageOrder:= 0;
Images:= ['https://i.hizliresim.com/c2l0pxn.jpg','https://i.hizliresim.com/j3wzg90.jpg','https://i.hizliresim.com/af3ezy6.jpg','https://i.hizliresim.com/1c9jno9.jpg','https://i.hizliresim.com/luf2jfi.jpg','https://i.hizliresim.com/sbzwmu7.jpg','https://i.hizliresim.com/9s8m32j.jpg','https://i.hizliresim.com/bz1vor1.jpg','https://i.hizliresim.com/ijlpt8o.jpg','https://i.hizliresim.com/2nc2s9i.jpg','https://i.hizliresim.com/j60o3sw.jpg','https://i.hizliresim.com/2wobckb.jpg','https://i.hizliresim.com/ejzi1s9.jpg','https://i.hizliresim.com/8u1qann.jpg','https://i.hizliresim.com/toxksuf.jpg','https://i.hizliresim.com/a0vda4t.jpg','https://i.hizliresim.com/kus0uv2.jpg','https://i.hizliresim.com/ahyleea.jpg','https://i.hizliresim.com/pz1x4ek.jpg','https://i.hizliresim.com/mwqpqcz.jpg'];

  GetTimer:= MyForm.AddNewTimer(MyForm,'GetTimer',500);
  GetTimer.Interval := 100;
  GetTimer.Enabled := True;
  MyForm.AddNewEvent(GetTimer,tbeOnTimer,'resimDeg');

if GetTimer.Interval > 100 then
begin
  GetTimer.Enabled := False;
  Clomosy.RunUnit('Unit2');
end;
testButton := MyForm.AddNewProButton(MyForm,'testButton','');
clComponent.SetupComponent(testButton,'{"Align" : "alNone","MarginBottom":350,"MarginRight":250,"Width" :400,"Height":400}');

MyForm.Run;
end;


Mesajı Yazan: Alforce
Mesaj Tarihi: 08 Ağustos 2023 Saat 10:22
Dilediğiniz kadar resim koyabilirsiniz, teknik olarak sınır 2^31. Bu integer'ın pozitif sınırı.

Sanırım burdaki sorun "Max = 29;", bu 19 olmalıdır.

Kısaca olmayan bir indexe erişmeye çalışıyor.

Eğer resimleri bu şekilde depolarsanız daha rahat çalışabilirsiniz:
Images:= [
  'https://i.hizliresim.com/c2l0pxn.jpg',
  'https://i.hizliresim.com/j3wzg90.jpg',
  'https://i.hizliresim.com/af3ezy6.jpg',
  'https://i.hizliresim.com/1c9jno9.jpg',
  'https://i.hizliresim.com/luf2jfi.jpg',
  'https://i.hizliresim.com/sbzwmu7.jpg',
  'https://i.hizliresim.com/9s8m32j.jpg',
  'https://i.hizliresim.com/bz1vor1.jpg',
  'https://i.hizliresim.com/ijlpt8o.jpg',
  'https://i.hizliresim.com/2nc2s9i.jpg',
  'https://i.hizliresim.com/j60o3sw.jpg',
  'https://i.hizliresim.com/2wobckb.jpg',
  'https://i.hizliresim.com/ejzi1s9.jpg',
  'https://i.hizliresim.com/8u1qann.jpg',
  'https://i.hizliresim.com/toxksuf.jpg',
  'https://i.hizliresim.com/a0vda4t.jpg',
  'https://i.hizliresim.com/kus0uv2.jpg',
  'https://i.hizliresim.com/ahyleea.jpg',
  'https://i.hizliresim.com/pz1x4ek.jpg',
  'https://i.hizliresim.com/mwqpqcz.jpg'
  ];


Mesajı Yazan: sqlae
Mesaj Tarihi: 08 Ağustos 2023 Saat 11:03
Peki bu kod çalıştıktan sonra formu timer'a nasıl bağlayabilirim yani bu resim 3 defa çalıştı ardından diğer forma geçeceğim

if aTimer.Interval = 100 then
begin
aTimer.Enabled:= False;
Clomosy.RunUnit:=('Unit2');
end;

şeklinde deneme yaptım fakat bunu yaptığımda döngü sonsuza kadar çalışıyor bunu tbeontimer satırına attığımda ise form hiç çalışmıyor iki formda açılıyor öylece bekliyor.

Kodu manuel yazdım hatalarım olabilir.


Mesajı Yazan: Alforce
Mesaj Tarihi: 08 Ağustos 2023 Saat 11:07
Tabii,
if ImageOrder >= Max then
Begin
  ImageOrder:= 0;
  
  ShowMessage('Resim dizisi bitti');
End;
Bunu önceki yerine modifiye edin.


Mesajı Yazan: Alforce
Mesaj Tarihi: 08 Ağustos 2023 Saat 11:13
Yada resim dizisini 3 kez oynatmak istiyorsan:

Global değişkenlere ekleyin:
Var
  RepeatNumber: Integer;
  ...
Begin
  RepeatNumber:= 0;
  ...

Sonrasında ise:
Const
MaxRepeat = 3;
...
Begin
if ImageOrder >= Max then
Begin
  ImageOrder:= 0;
   
  RepeatNumber:= RepeatNumber +1;
End;
if RepeatNumber >= MaxRepeat then
Begin
ShowMessage('Resim dizisi 3 kez oynatıldı');
// Sonrasında ise belki timerı kapatırsın.
End;
...



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net