Timer flash atma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Timer flash atma

Mesaj gönderen Serhat »

İyi günler formu tam ekran yapıp ekrana saat veriyorum, fakat label font boyutunu yaklaşık 250 ve üstü yaptığımda saat her saniyesinde flash atma oluşuyor bunu nasıl çözebilirim....

Kod: Tümünü seç

procedure TForm2.TimerTimer(Sender: TObject);
begin
  Label1.Caption := FormatDateTime('hh:nn:ss', Now);
end;
Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Timer flash atma

Mesaj gönderen mrmarman »

Timer intervalin kaç ise bunu 1000'e bölersen 1 saniyede kaç defa label'a saati yazdığını bulursun. Merak edenler için yazayım 1000 interval = 1 saniyedir.

Flicker dediğimiz senin de karşılaştığın kırpışmanın önüne geçmek için kısa vadede alabileceğin önlem, üst üste gösterim sayısını azaltmaktır. Basit bir IF sorgusu dahi işini görecektir.

IF sorgusu ile içindeki değer ile saat farklı ise güncelle şeklinde kurgulaman yeterli.

Biraz matematik interval değeri olarak belirleyeceğin rakam 1000'e tam bölünebilen 25,50,100, 125,200, 250,500 ve katları olarak belirlemeyi tercih edersen faydalı olur. 1000 ile bölümü ( 1000 mod Timer1.Interval ) x TimerOnTimer anı sayısı 1000 olduğunda 1 saniye geçmiş demektir diyerek yazma işlemi yapabilirsin.
Resim
Resim ....Resim
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: Timer flash atma

Mesaj gönderen Serhat »

Hocam siz doğrumu anladım bilemiyorum ama bu yöntemde denedim değişen bir şey olmadı.

Kod: Tümünü seç

procedure TForm2.TimerTimer(Sender: TObject);
var
  Saat: TTime;
begin
  Saat := StrToTime(FormatDateTime('hh:nn:ss', Now));
  if StrToTime(Label1.Caption) <> Saat then

   Label1.Caption := FormatDateTime('hh:nn:ss', Now);
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Timer flash atma

Mesaj gönderen mrmarman »

Değişen birşey olmadı demek fazla oldu, illa ki olmuştur. Eşitlik saniyede 1 kere sağlandığına göre çok azalmış olması lazım.

Time olarak değil de string olarak eşitliği kontrol et, time formatına caption'u çevirdiğinde milisaniye cinsini de dagil ettiğinden eşitlik hiç oluşamıyor.

Kod: Tümünü seç

var
  strSaat : string;
begin
  strSaat := FormatDateTime('hh:nn:ss', Now);
  if strSaat <> Label1.Caption then 
    Label1.Caption := strSaat;
end;
şeklinde kurgu daha doğru olurdu. Gerekçesi anlattığım gibi.

Farkı yeniden gözlemle istersen.

Label'in olduğu formun (üzerinde boyadığı hangisi ise) form1 mesela

Kod: Tümünü seç

Form1.doublebuffered := true; 
ile dene bir de.

Demek ki boyanan yüzey sandığımdan da büyük.
Sonunda label değil de canvas üzerine textout ile yazdırmaya kadar gidilecek anlaşılan.
Resim
Resim ....Resim
Kullanıcı avatarı
loaded
Üye
Mesajlar: 126
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Timer flash atma

Mesaj gönderen loaded »

Formun DoubleBuffered özelliğini aktifleştirmeyi deneyebilirsin.

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
    form1.DoubleBuffered:=true;
end;
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Cevapla