TTimer

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
tubaca
Üye
Mesajlar: 44
Kayıt: 24 Ağu 2004 10:30
Konum: Ankara
İletişim:

TTimer

Mesaj gönderen tubaca »

herkese merhaba(uzun bir aradan sonra)
slayt varı kucuk bir program hazırlıyorum.bunun için imer nesnesini kullandım.Database den randomly olarak alınan veriler ekranın bır kösesinde 5 sn gozekecek.30sn sonra yeni bır veri gozukecek.
Veri tabanı olarak paradox su kullanıyorum.table daki indeximi once autoincrement yapmıştım fakat veriler randomly cagrıldıgı için silinen veriler başıma dert acar diye dusundum.aramalardan buldugum kodlarla durumu biraz duzeltim.fakat prgda ilgili formu cagıramıyorum.
" Unable to invoke Code Completion due to errors in source code"hatası veriyor.TTimer ide daha once hiç kullanmamıştım.kodu duzeltmeme ve hatanın sebebini bulmama yardım ederseniz sevinirim simdiden tşkler.

Kod: Tümünü seç

procedure Tremember.Timer1Timer(Sender: TObject);

var
n:Integer;
begin


Randomize;
table1.Filtered:=true;
    n:=table1.RecordCount;
    k:=random(n);
    home.WindowState:=wsMinimized;
    remember.Show;
    Sleep(5000);
    remember.Hide;




end;
  }
TNU
Kullanıcı avatarı
tubaca
Üye
Mesajlar: 44
Kayıt: 24 Ağu 2004 10:30
Konum: Ankara
İletişim:

Mesaj gönderen tubaca »

merhabalar
prg biraz daha toparladım.en azından su anda calıştırıpkodun durumunu gorebiliyorum.slayt olan form 5 sn den az gozukuyor ve sadece tablodaki ilk verinin birincisini gosteriyor.(tablodan gosterilecek iki veri var) ustelik ikinci sefer ekrana geldiğinde sadece bos DBEditleri gosteriyor.
bu arada yukarıdaki kodda duzeltmeler yaptım.Arama filter olarak yapıyorum.k global bır nesne.TTimer in intervali 35000 ve home ile baslayan kod yerine table1.findNext yazdım.
TNU
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- Öncelikler veritabanını devreye sokmadan zamanlama routinlerinin doğru çalışıp çalışmadığını test etmelisin...

- Sen test ederken alternatif olarak anlattıkların ışığında ve anladığım kadarıyla kendime göre bir kurgu yaptım... Denemesi bedava...
// Formda
// 1 adet ListBox
// 1 adet Button
// 1 adet ikinci bir form (Form2)
// 1 adet Timer
// nesneleri var...

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  Sayac,
  Sayi  :Integer;
begin
  Randomize; // Bunu demezsen programı kapatıp her açtığında
             // aynı sırada rastgele sayı alırsın...
  ListBox1.Items.Clear;
  While ListBox1.Items.Count < 50 do
  begin // Her sayıdan sadece 1 kere çıkması için (bu arada 0 dahildir...)
    Sayi := Random(50);
    If ListBox1.Items.IndexOf(Format('%.2d', [Sayi])) < 0
    then ListBox1.Items.Add(Format('%.2d', [Sayi]));
  end;
  Timer1.Enabled := True;
end;
* Bekleme ve Gosteri sabitleri senin gösteri sürelerinin saniye cinsinden değerleridir. Kendine göre değiştir.

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
Const
  Bekleme = 30;
  Gosteri = 5;
{$J+}
  Goster          : Boolean = False;
  GosteriZamani   : Integer = 0;
  Zaman           : Integer = 0;
  SiradakiResimNo : Integer = -1;
{$J-}
begin
   Inc(Zaman);
   // Dilersen TTimer interval değerini 5000 yaparak
   // 5 saniyede 1 devreye girmesini sağlarsın ama
   // aynı TTimer nesnesi gösterimi de yapacağından
   // Gösterim süresi olarak 5'in katları sürelere razı
   // olmak zorunda kalırsın...
   // Onun için Interval 1000 (yani 1 saniye) olarak kalsın
   // ve 5 saniyeyi 5'in katları şeklinde MOD ile bul...
   If (Zaman MOD Bekleme = 0) AND (NOT Goster)
       then Goster := True;
   If (GosteriZamani = Gosteri) AND (Goster)
       then begin
              Goster        := False;
              GosteriZamani := 0;
            end
       else If Goster then Inc(GosteriZamani);
   Form1.Caption := Format('%d, %d', [Zaman, GosteriZamani]);
   Case Goster of
   True  : begin
             If NOT Form2.Showing then
             begin // Resim penceresi kapatılırsa sıradaki resim içeren yeni pencere açılır... :)
               Inc(SiradakiResimNo);
               If  SiradakiResimNo > ListBox1.Items.Count-1
                 then SiradakiResimNo := 0;
               Form2.Show;
             end;
             Form2.Caption := Format('Süre:%.2d, ResimSıra:%.2d, ResimKayNo:%s', [GosteriZamani, SiradakiResimNo, ListBox1.Items[SiradakiResimNo]]);
           end;
   False : If Form2.Showing then
           begin
             Form2.Close;
             Zaman := 0;
           end;
   end; // Case
end;
- Bu göreceğin gibi her iki formun da başlığında gereken sürelerde gereken resim numaralarının belirdiğini göreceksin. Veritabanı kodunu bu

Kod: Tümünü seç

Form2.Show; 
satırından hemen önceye koyacaksın...

- Kolay gelsin...
Resim
Resim ....Resim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

@mrmcop çok detaylı cevap vermiş.
ben gözünden kaçan senin yukarıda yazdığın koda göre hatanı söyliyeyim. K yı bulmuşsun ama table ı o kayıda konumlandırmamışsın yani find yada locate ile cursor ü o kayıda konumlandırmazsan sürekli o andaki kayıt üzerinde işlem yaparsın.
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
MaviEjder
Üye
Mesajlar: 8
Kayıt: 18 Şub 2005 03:54
Konum: sakarya
İletişim:

Mesaj gönderen MaviEjder »

evet ayrıntılı anlatmış anlamamak mumkundeil. :twisted:

@FreeMan35:
o zaman basitini sen yaz.

Bundan sonra yazılanlara yukarıdaki gibi gereksiz mesaj atanların mesajlarını silicem, eğer ısrar ederlerse kendileride mesajlarının akibetine uğruyacaklardır. Duyrulur.

eğer anlamadıysanız anlamadığınız yeri uygun bir üslubla aynı mesaj altında tekrar sorun.
Cevapla