PDA

View Full Version : Các bạn đã gặp vấn đề này chưa ?



Teppi
11-08-2002, 18:09
Tôi đang hoàn thành một Mp3 Player rất đẹp. Nhưng tới phần xử lý phím tắt để cho chương trình hoàn thiện hơn thì có vấn đề.

Giao diện của tôi bao gồm 4 Form có đặc điểm gần giống nhau. Cho tôi hỏi lập trình như thế nào để ở trên Form bất kỳ đều có thể xử lý được phím tắt.( Ví dụ như Alt+F4 là thoát). Tôi có một cách là viết code trong sự kiện KeyUp của cả 4 Form nhưng làm thế thì làm cho mã bị trùng lặp, thật không hay một chút nào. Có bạn nào biết lập trình ngắn gọn hơn không xin chỉ giúp tôi với.

Teppi

nomoretears
12-08-2002, 12:08
Bạn dùng công cụ phát triển nào vậy ?

Nếu là VS .NET thì với 4 form "gần giống nhau" như vậy bạn có thể viết 1 form superclass, xử lý event keys rồi specialize thành 4 form subclass -> dùng chung eventhandler.

Còn nếu là VS 6 thì ít nhất có ma^'y cách :
1. Dùng kỹ thuật subclassing làm điều tương tự phần trên.
2. Dùng API Hook keys
3. Viết global module có chứa proc xử lý event keys rồi gọi proc này từ 4 form kia

Nếu tôi hiểu nhầm ý bạn thì bạn post lại kỹ hơn một chút nữa được không ?

Que^n nu*~a : are you teppi@ from TTVN ?

Teppi
15-08-2002, 20:35
Tôi đang dùng VB6, điều bạn gợi ý tôi cũng xin lĩnh hội. Tôi khi đã lập trình là cố gắng viết càng ít mã càng tốt mà lại đúng theo những gì mình đã thiết kế. Tức là optimization code một cách tối đa. Tôi mới học được kỹ thuật multicasting và đã hoàn thành được sự tối ưu hoá trong phần này. Tôi xin viết ý tưởng của mình ra, các bạn hãy cho biết nó có tốt không nhé.

Tôi tạo một ClassModule, trong đó có các mã xử lý sự kiện theo các trường hợp với cấu trúc Select Case, và trong các form, tôi tạo các biến có kiểu của ClassModule đó và gán chúng cho các control trong form và kể cả Form. Vậy là tôi đã hướng toàn bộ các Event của các control giống nhau vào các sự kiện được viết chung trong Class. Với các control, tôi phân biệt bằng thuộc tính Name khi công việc của các control khác nhau (Tức là nếu tôi có hai hay nhiều hơn các command button thì chắc chắn là chúng có các công việc khác nhau). Tôi xử lý các sự kiện giống nhau của chúng, ví dụ như MouseUp thì các control đều setfocus về một control chẳng hạn.

Về API, tôi mới học nên chưa biết các kỹ thuật Subclass hay Hook.

Cám ơn bạn nhiều!

Teppi

quaitieutu
16-08-2002, 17:43
Tiểu tử thấy dùng .NET có vẻ giải quyết vấn đề nhanh đó.
Đừng chơi API ,nhứt đầu lắm

danceswithwolves
17-08-2002, 12:19
to quaitieutu@ :

.NET framework không hỗ trợ sound. Bạn cũng sẽ phải importdll để play sound thôi. Với lại bắt nsd install thêm .NET platform nữa thì hơi bất tiện. Hãy chờ đến khi nào chú Bill tích hợp .NET platform vào Windows đã...

to teppi@ :

kỹ thuật multicasting của bạn nói thì trước giờ tôi vẫn gọi là subclassing đó. Không biết tôi có nhầm lẫn tên gọi không nữa :)

khhieu
17-08-2002, 20:25
Minh cung nghi nhu tieutu vay ,vi minh nghi dung .NET se hap dan hon nhieu va cung de nua

Teppi
18-08-2002, 09:17
Cám ơn sự góp ý của các bạn.

Thực sự tôi chưa cần dùng tới VB.Net. Nhưng nghe các bạn nói có vẻ VB.Net khá hấp dẫn đấy. Tôi sẽ chú ý về điều này.

Thưa các bạn ! Kỹ thuật multicasting có vẻ hơi giống subclassing, nhưng thật ra không hoàn toàn như vậy. Tôi đang đọc cuốn "Các kỹ xảo lập trình trên VB và Delphi" và tôi biết rằng Subclassing phức tạp hơn MultiCasting.

Teppi !

JackPhan
19-08-2002, 00:43
đúng, Subclassing hơi giống so với Multicasting, nhưng Multicasting đa số là point even của của control/obj vào xử lý còn bác subclass là point cả control/obj vào xử lý (cái này như các bácc viết class trong VC++ vậy). Subclassing rắc rối hơn chỗ xử lý control/obj tương đối khó, vì VB6 hỗ trợ hướng đối tượng không mạnh lắm. Trong VS.Net thì hoàn toàn VB.Net đã được hướng đối tượng hoàn chỉnh.
Nếu dùng VB6 thì nên dùng API cho tiện, tuy hơi bị "nhức đầu" nhưng API rất mạnh. dùng một số hàm xử lý key và cài một "bẫy key" (KeyHook) lại để có thể bắt được key như ý
có thể bác tham khảo KeyHook của UniKey (cái này opensource), chỉ cần biết các hàm đã viết sẵn trong Keyhook thì chỉ việc call nó thôi.
Dùng Subclassing cũng được nhưng đối với VB6 có thể làm chương trình bị chậm lại cái này không thích hợp nếu chương trình chơi MP3 có xử lý spectrum.

spenguin
21-08-2002, 17:59
Xin chào. Mình là thành viên mới của forum. Mình cũng đang làm một chương trình chơi MP3 bang VB6 nhưng không biết làm sao để xử lý spectrum. Các bác là cao thủ xin chỉ giúp mình với.
Thanks a lot.

Teppi
28-08-2002, 09:45
Nếu bạn muốn tự lập trình để xử lý âm thanh như tạo spectrum, oscciscope hay sound level thì bạn phải thành thạo trong hai vấn đề:
Lập trình đồ hoạ để vẽ được spectrum trên PictureBox.
Phải biết các hàm API hỗ trợ để lấy các thông tin về âm thanh như xung âm thanh chẳng hạn. Bạn hãy tham khảo trong bộ MSDN - phần Graphics and Multimedia để biết thêm.

Còn nếu bạn lười lập trình thì hãy chịu khó tìm các control trên mạng. À trên site a1vbcode.com có các code nói về phần này đấy.
Chúc thành công !

Teppi !

westlife
30-08-2002, 07:37
Này Teppi, vấn đề của bạn thì có thể giải quyết như cách nomoretears đã nói. Tuy nhiên nếu bạn muốn bạn có thể tạo một Hotkey để bất kì đâu người dùng cũng có thể làm việc với chương trình của bạn, ví dụ như bấm Ctrl+S thì sẽ dừng bài đó lại và chuyển sang bài kế tiếp ... . Hoặc dùng kĩ thuật Hookkey (nhưng cái này phức tạp hơn nhiều). Để biết thêm chi tiết để có thể đăng kí HotKey bạn có thể xem ở http://coolcode4you.fateback.com (vì nó hơi dài nên không tiện Post lên ở đây)
Chúc bạn thành công !!!