|
|
Canvas zárolása
Canvas objektum 9. rész
|
|
Példaprogram letöltése
43873 bájt
|
A sorozat eddigi részeiben a TCanvas osztály szinte összes metódusát és property-jét átnéztük, azonban még kimaradt néhány speciális eljárás. Ezekről lesz szó ebben a cikkben.
A több szálon futó alkalmazásoknál a Lock metódussal megakadályozhatjuk, hogy más szálak is módosítsák a Canvas-t. A letiltás egészen addig tart, amíg meg nem hívjuk az UnLock metódust. A Lock metódus többszöri meghívása növeli a LockCount property értékét. A zárás feloldása akkor történik meg, amikor annyiszor meghívjuk az UnLock eljárást, amennyiszer előtte a Lock-ot. Ha egy külön szálon futó eljárás módosítja a Canvast, akkor ajánlatos használnia a Lock eljárást, ellenkező esetben hibák léphetnek fel. Ez viszont befolyásolja a teljesítményt, tehát ha biztosak vagyunk benne, hogy egy másik szál, vagy maga az alkalmazás nem módosítja ugyanazt a Canvas-t, akkor nem feltétlenül szükséges a használata.
A Lock eljárás növeli a LockCount property értékét, viszont van még egy lehetőség a Canvas zárolására. Ez a TryLock függvény. Ez Lock-olja a Canvas-t, de csak abban az esetben, ha ez még nem volt megtéve. Ebben az esetben a LockCount értékét 1-re állítja, és igaz értékkel tér vissza. Ellenkező esetben nem történik semmi, tehát a LockCount property értéke változatlan marad, és a függvény hamis értékkel tér vissza.
A TCanvas osztálynak van két eseménye, amiket felhasználhatunk munkánk során. Az egyik az OnChanging esemény, ami a kép megváltozása előtt, a másik pedig az OnChange, ami a kép megváltozása után következik be. Először tehát létrejön az OnChanging esemény, megváltozik a kép a Canvas-on, ezután pedig bekövetkezik az OnChange esemény.
procedure CanvasChange(Sender. TObject);
...
Canvas.OnChange:=CanvasChange;
A ClipRect property egy TRect struktúrában visszaadja annak a területnek a koordinátáit, amelyen kívül eső pixelek nem jelennek meg. Ez a property jól használható a teljesítmény növelésére, mivel megtudjuk belőle, hogy hová nem érdemes rajzolni, mert úgysem jelenik meg. Az aktuális érték kiolvasása történhet az OnChange eseményben, mivel ekkor biztos, hogy pontos értékeket kapunk.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 561. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|