TLabel kırpışma sorunu.

Başlatan Klein, 07 Temmuz 2013, 10:23:01

Klein

C++ builder kullanıyorum.

bir Label nesnesinde 72 punto büyüklüğünde  Ariel black font kullanıyorum.
Caption'a  yeni değer yazdığımda bir kırpışma oluyor.  DBLabel kullanıp veriyi veritabanından aldırdım. Yine aynı şey oldu.

Fakat.
Eğer sayfaya bir buton koyarsam ve bu butona bir kez tıklayıp odağı butona alırsam , kırpışma arada bir oluyor.  Eğer bu butona çok seri şekilde durmaksızın basarsam, kırpışma iyice azalıyor.
sayfayı tutup sağa sola sürüklersem kırpışma tamamen duruyor.

Kırpışmayı ekran kartının yavaşlığına bağlayacağım ama , yukarıdaki sebepler yüzünden bağlayamıyorum. Butona basarken kırpışma yapsa anlarım. İşlemci butonla ilgileniyor , etiketi güncellemeye zaman ayıramıyor derim. Ama tam tersi oluyor. işlemciyi ne kadar meşgul edersem,kırpışma o kadar seyrekleşiyor.

Kırpışmanın ve butona basınca veya formu sürükleyince kesilmesinin bir açıklaması var mı?

t2

Label'in double buffered diye bir property si varsa, bunu enabled yapalım. belki düzelir.

Klein

Malesef yok hocam.  C++ komponentleri Standart Delphi componentleri.

Yuunus

#3
"Klein" veriyi aldığın satırın altına bunuda ekleyip denermisin;
Application->ProcessMessages();

mesaj birleştirme:: 07 Temmuz 2013, 11:54:55

gerçi builder da bir proje açtım Edit in on change i ile label text'e birşeyler yazdım dediğin font ve 100 punto ile herhangi bir sorun yok karakterler gayet düzgün sadece sayfayı taşırken karakterler sünüyor o da sanırım win7 nin animasyonundan kaynaklanıyor.

Klein

Timer içerisinde bir sayıyı artırıp,  bu sayının değerini basar mısınız?
Kırpışma olması için etiketin içeriğinin değişiyor olması gerekiyor.  Timer 500ms olabilir.

bir de formun rengini siyah ,  text rengini  başka bir renk yapıp deneyebilirseniz sevinirim.

fatih6761

#5
Hocam font render kaynaklı bir sorun olabilir. Siyah arkaplan aklıma bunu getirdi. C# ile yazdığım programlarda da aynı şey oluyordu. Bu kırpışma olayı sadece label'a yeni değeri yazdığınızda mı oluyor?
Edit : Google'da C++Builder TLabel flicker yazınca DoubleBuffering olayının var olduğunu gördüm:
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;
end;

Yuunus

#6
Klein interval'ı 100 yaptım, style ArrialBlack, punto 72 yaptım label'in rengini beyaz, formun rengini siyah yaptım hiçbir sorun yok canavar gibi interval'i 10 bile yaptım hiçbir sorun yok.

mesaj birleştirme:: 07 Temmuz 2013, 18:19:20

10 interval'lı exe yi indir kendinde dene
http://www.roosle.com/file/420e881b

Klein

Alıntı yapılan: fatih6761 - 07 Temmuz 2013, 15:31:08
Hocam font render kaynaklı bir sorun olabilir. Siyah arkaplan aklıma bunu getirdi. C# ile yazdığım programlarda da aynı şey oluyordu. Bu kırpışma olayı sadece label'a yeni değeri yazdığınızda mı oluyor?
Edit : Google'da C++Builder TLabel flicker yazınca DoubleBuffering olayının var olduğunu gördüm:
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;
end;


TLebel'in DoubleBuffer özelliği yok. Ama Formun DoubleBuffer özelliğini açınca sorun halloldu.
Herkese teşekkürler.

OptimusPrime

 :o
peki
- double buffer ne işe yarıyor?
- buffer özelliği kapalı olan bir bilgisayarda derlenip sorun çıkarmayan bir form başka bir bilgisayarda sorun çıkartabilir miydi?
- gerçekten double buffer çözüm mü yoksa şansa mı düzeldi?
- bufferın avantajı dez avantajı nedir, madem birşeyleri düzeltiyor neden opsiyonel yapılmış?
gibi sorular geldi aklıma...
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

cicjoe

http://msdn.microsoft.com/en-us/library/b367a457.aspx

Double buffering (veya multiple buffering) ile cizim islemini arka planda yaparak, cizim bittikten sonra ekrana getiriyorsunuz. Boylece ekranda surekli cizim olmuyor ve bitmis cizim tek seferde ekrana ciziliyor (render).