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.

unit Unit1;

interface

uses
 Classes;

type
 MyThread = class(TThread)
 private
 { Private declarations }
 protected
 procedure Execute; override;
 end;

implementation

{ Onemli: VCL ve CLX nesnelerinin metod ve özellikleri
 Synhronize içinden çağırılarak kullanılmalıdır. Örneğin,

 Synchronize( MemoyuGuncelle);

 ve MemoyuGuncelle su sekildedir,

 procedure MyThread.MemoyuGuncelle;
 begin
 Memo1.Text := 'Thread içinde güncellendi';
 end; }

{ MyThread }

procedure MyThread.Execute;
begin
 { Place thread code here }
end;

end.

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.

CEVAP VER

This site uses Akismet to reduce spam. Learn how your comment data is processed.