Label caption ve form caption

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

Label caption ve form caption

Mesaj gönderen hido »

Selam.

Anlık olarak db'ye kayıt yapılırken 100%100 olarak labelda göstermek istiyorum, çok ilginç ki form caption anlık olarak değer yansırken label captionunda işlem bittikten sonra 100%100 olarak yansımakta bunu nedeni ne olabilir?

Kod: Tümünü seç

    Label1.Caption := 'Kaydedildi ' + IntToStr(PLSayac * 100 div Max) + '%';
        Label2.Caption := 'Kaydedildi ' + IntToStr(PLSayac * 100 div Max) + '%';
        Caption := 'Kaydedildi ' + IntToStr(PLSayac * 100 div Max) + '%100';
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Label caption ve form caption

Mesaj gönderen freeman35 »

Label2.Invalidate; i dene.
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ı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Label caption ve form caption

Mesaj gönderen adelphiforumz »

freeman35 yazdı:Label2.Invalidate; i dene.
ilave bilgi olması açından belirtilen konunun güzel bir detaylı anlatımıda ekteki linkte mevcut
"mrmarman" hocamızada tekrardan teşekkürler

http://delphiturkiye.com/forum/viewtopic.php?t=32442
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Label caption ve form caption

Mesaj gönderen brs »

Label.refresh; isinizi çözer
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Label caption ve form caption

Mesaj gönderen loaded »

sağlam bir çözüm :

Kod: Tümünü seç

Application.ProcessMessages;
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Label caption ve form caption

Mesaj gönderen ertank »

hido yazdı:Selam.

Anlık olarak db'ye kayıt yapılırken 100%100 olarak labelda göstermek istiyorum, çok ilginç ki form caption anlık olarak değer yansırken label captionunda işlem bittikten sonra 100%100 olarak yansımakta bunu nedeni ne olabilir?

Kod: Tümünü seç

    
        Label2.Caption := 'Kaydedildi ' + IntToStr(PLSayac * 100 div Max) + '%';
        Caption := 'Kaydedildi ' + IntToStr(PLSayac * 100 div Max) + '%100';
Merhaba,

- Delphi bir ana thread içinde çalışır. Bu thread boşta (idle) olduğu zaman eğer bekleyen ekran güncellemesi varsa bunlar yapılır. Siz DB kayıt işlemini bir döngü ile yapıyorsanız, döngü bitene kadar ekran bileşenlerinde güncelleme olmaz. Bunun önüne geçmek için Application.ProseccMessages() kullanılabilir. Ancak bu durumda ekran ile ilgili bekleyen tüm değişikliklerin yapılması durumu ortaya çıkar.
- Sadece bir bileşenin ekranda değiştirilmiş bilgiyi göstermesi için Update() prosedürünü kullanabilirsiniz.
- Son olarak, performans açısından hesabı bir kere yapıp aynı bilgi ise diğer yerlere sonuç değerini atamak daha doğru olacaktır.

Aşağıdaki gibi bir kod ile sorununuzun çözülmesi gerekli diye düşünüyorum.

Kod: Tümünü seç

Label1.Caption := 'Kaydedildi ' + IntToStr(PLSayac * 100 div Max) + '%';
Label2.Caption := Label1.Caption;
Self.Caption := Label1.Caption + '%100';
Label1.Update();
Labrl2.Update();
Delphi 10.1 Update2 yardım dosyasından alıntılar aşağıdadır:
INVALIDATE: Completely repaints the control. Use Invalidate when the entire control needs to be repainted. When more than one region within the control needs repainting, Invalidate will cause the entire window to be repainted in a single pass, avoiding flicker caused by redundant repaints. There is no performance penalty for calling Invalidate multiple times before the control is actually repainted.

REFRESH: Repaints the control on the screen. Call the Refresh method to repaint the control immediately. Refresh calls the Repaint method. Use the Refresh and Repaint methods interchangeably.

REPAINT: Forces the control to repaint its image on the screen. Call Repaint to force the control to repaint its image immediately. If the ControlStyle property includes csOpaque, the control paints itself directly. Otherwise, the Repaint method calls the Invalidate method and then the Update method so that any visible portions of controls beneath the control will be repainted as well.

UPDATE: Processes any pending paint messages immediately. Call Update to force the control to be repainted before any more, possibly time-consuming, processing takes place. Use Update to provide immediate feedback to the user that cannot wait for the Windows paint message to arrive. Update does not invalidate the control, but simply forces a repaint of any regions that have already been invalidated. Call Repaint instead to invalidate the control as well.

Detaylı incelenir ise UPDATE sadece değişen yerleri güncelliyor olduğu anlaşılacaktır. Dolayısıyla performans anlamında kullanılması tercih edilebilir. Diğer taraftan titreme sorunu yaşanıyor ise INVALIDATE kullanılması bu sorunu minimuma indirmeye yardımcı olabilir. INVALIDATE ile birlikte DoubleBuffer kullanılabilir. Ancak DoubleBuffer theme kullanılan uygulamalarda sorunlara yol açtığı gözlemlenmiştir.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Label caption ve form caption

Mesaj gönderen loaded »

Kısa süren işlemlerde update çözüm gibi gözükse de, uzun süren işlemlerde aynı sorun tekerrür edecektir.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
  for i:=0 to high(integer) do
  begin
  Caption:=inttostr(i);
  Label1.Caption:=Caption;
  Label1.Update;
  //Application.ProcessMessages; // Devre dışı bırakıldığında program belli bir zaman sonra yanıt veremez duruma düşecektir.
  end;
end;
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Label caption ve form caption

Mesaj gönderen ertank »

loaded yazdı:Kısa süren işlemlerde update çözüm gibi gözükse de, uzun süren işlemlerde aynı sorun tekerrür edecektir.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
  for i:=0 to high(integer) do
  begin
  Caption:=inttostr(i);
  Label1.Caption:=Caption;
  Label1.Update;
  //Application.ProcessMessages; // Devre dışı bırakıldığında program belli bir zaman sonra yanıt veremez duruma düşecektir.
  end;
end;
Merhaba,

Sorun programın yanıt vermez duruma düşmesi değil diye anlıyorum. Kullanıcı zaten işlem sırasında birşey yapmaması gerektiğini biliyor veya deneyerek yapamadığını anlıyordur. Ekranda işlemin takılmadığı ve devam ettiğine dair bilgi verilmesi amaçlı bazı bileşenlerin güncellenmesi ile ilgili verilen öneriler hepsi.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Label caption ve form caption

Mesaj gönderen loaded »

Merhaba Ertank Hocam
Ben yanlış anlamışım. Kusura bakmayın. Bu arada engin bilgilerinizden istifade ediyoruz. Saygılar.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Label caption ve form caption

Mesaj gönderen hido »

Emeği geçen herkese teşekkür ederim. Brs dediği gibi Label.refresh; yapım sorun çözüildü...
Cevapla