PDA

View Full Version : Xin giup minh ve do hoa trong delphi



Funlove
05-08-2004, 00:44
Mình muốn hỏi làm cách nào để xóa tất cả các hình mà mình đã vẽ trên imgDraw:TImage (mình sử dụng phương thức Canvas để vẽ hình )
Mong các bạn chỉ giáo

N_Q_Linh
05-08-2004, 00:56
Bạn thử sử dụng imgDraw.Picture:=nil xem. Nếu không được thì nói với mình

N_Q_Linh
05-08-2004, 01:05
Ê, có ai muốn chương trình hook keyboard không?

Funlove
05-08-2004, 13:24
Nhưng ví dụ mình muốn di chuyển hình tròn bằng cách dùng chuột kéo (mỗi buwocs dịch chuyển thì mình lại xóa đi rồi vẽ lại) thi nó chạy rất chậm. Ban có cách nào khác thì chi cho mình với. Minh mới học delphi nên ko biết nhiều

bete
05-08-2004, 16:05
Nhưng ví dụ mình muốn di chuyển hình tròn bằng cách dùng chuột kéo (mỗi bước dịch chuyển thì mình lại xóa đi rồi vẽ lại) thi nó chạy rất chậm.

Tui không lập trình về đồ họa nhiều (tuy rằng rất thích). Tui nghĩ bạn có ít nhứt 2 cách (giả sử bạn đã có cách chận mỗi bước di chuyển của chuột, và biết khi nào thì chuột dừng):

1) Thay vì xóa và vẽ ở mỗi bước di chuyển chuột: bạn chỉ vẽ con trỏ chuột (thông thường là mũi tên) để người dùng biết đại khái chuột (ứng với tâm vòng tròn ?) đang đang đâu. Khi chuột dừng thì bạn mới thực sự vẽ đường tròn.

2) Thay vì xóa và vẽ ở mỗi bước di chuyển chuột: bạn chỉ vẽ đường tròn khi chuột đi đủ N bước (N=1 là cách bạn đang làm: vẽ mỗi lần chuột di chuyển => chậm). N càng lớn thì chương trình chạy càng nhanh (vì ít phải vẽ lại đường tròn thường xuyên hơn).
Ở giữa mỗi N bước thì bạn có thể: không làm gì hết hoặc vẽ con trỏ chuột. Dĩ nhiên khi chuột dừng thì bạn cũng phải vẽ lại đường tròn. Nếu chương trình của bạn tự điều chỉnh N tùy theo người dùng di chuyển chuột nhanh hay chậm thì có lẽ càng tốt nữa (mà cũng có thể là không cần thiết)

Vài ý mọn, có gì sai sót mong các bạn chỉ giúp, xin cám ơn trước.

Chắc chắn phe ta có nhiều người còn có cách khác hay hơn nhiều ! Tui nhớ đâu đó trong diễn đàn này có bạn xài bộ đệm (buffer) thì phải:

http://www.diendantinhoc.com/showthread.htm?t=38057

-thân

N_Q_Linh
20-08-2004, 05:33
Bạn hãy nói cụ thể về chương trình bạn đang lập trình !!!

Zero
21-08-2004, 01:26
Mỗi lần thay vì clear cả ành thì bạn chỉ nên xóa phần mà hình tròn nằm trên - nếu nó nằm trên 1 ảnh khác thì bạn lưu phần nền mà hình tròn đè lên trước khi vẽ hình tròn khi cần xóa thì vẽ lại cái phần nền đó ---> chắc chắn sẽ nhanh hơn.

Còn nếu chỉ đơn giản là 1 hình tròn đen trên 1 nền trắng thì ở mỗi bước bạn chỉ cần vẽ lại 1 hình tròn màu trắng :D vào chỗ lúc nãy vẽ cái màu đen là xong ^_^

Hai cách trên đều giống nhau ở chỗ cố gắng bớt đi những phần việc không cần thiết - bạn chỉ cần xóa hình tròn --> kô cần xóa cả ảnh.