Delphi: Canvas does not allow drawing Hatası

Canvas does not allow drawing” hatası tuval çizime izin vermiyor gibi bir anlam taşıyor. Tuval ressamların resimlerini çizdikleri yüzeye verilen ad burada ise programdaki bileşenlerin görsel kısımlarına (arabirim) karşılık geliyor.

Canvas hatası iki nedenden kaynaklanabilir. Ya çizim yapacak kaynağınız kalmamıştır ya da multithread bir programda tuvali boyamaya çalışan iki fırça birbiriyle çakışıyordur. Dediğimiz gibi bu Canvas hatası ençok multithread programlarda karşımıza çıkıyor. VCL bileşenleri thread-safe değillerdir. Bu yüzden bileşenlerin görsel özellikleriyle işlem yaparken Synchronize fonksiyonunu kullanmalısınız. Synchronize’a parametre olarak verdiğiniz alt program thread-safe olarak çalıştırılır. Yani canvas sorunu çıkartacak görsel işlemleri güvenli bir zamanda icra ettirmiş olursunuz. Aşağıdaki thread örneğini inceleyebilirsiniz.

Multithread programlarınızda mesaj kutusu kullanmanız gerektiğinde Synchronize kullanmak pratik olmayabilir. Bunun için Delphi’nin Messagebox fonksiyonunu kullanabilirsiniz. Messagebox’ın diğer diyalog kutularından farkı thread-safe olmasıdır. Ayrıca Delphi’de multithread programlama konusunda okumanızı şiddetle tavsiye edeceğim bir makale dizisi burada.

Canvas (tuval) hatasının birkaç oluşma nedeni olabilir. Burada GDI (Graphic Device Interface) kaynaklarının aşırı tüketilmesi durumunda oluşabildiği de yazmakta. GDI,  çizgiler, eğriler, fontların yorumlanması, renklerin yönetilmesi gibi işlerden sorumlu, işletim sistemi çekirdeği ile çıktı aygıtı (ekran kartı) arasında görev yapan bir Windows bileşeni. Bu sorundan sıyrılmak için programdaki görsel bileşen sayısını azaltmak, sistem belleği miktarını veya ekran kartı belleğini artırmak çözüm yolu olarak gözüküyor.

Umarım canvas hatasını ayıklamayı becerebilirsiniz.

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.