Hôm nay: Năm Tháng 5 02, 2024 10:20 am
Xem bài chưa có ai trả lời

Tên truy cập:     Mật khẩu:

StructDesignPro
Gửi bài mới   Trả lời chủ đề này
 
 Tác giả   Thông điệp 

structdesignpro


Site Admin


Ngày tham gia: 28 2 2009
Số bài: 668
Đến từ: Việt Nam

     
Bài gửi Gửi: Tư 3 04, 2009 7:39 pm    Tiêu đề: Tổng quan về ObjectARX
 Trả lời với trích dẫn nội dung bài viết này  

Cấu trúc của một ứng dụng ADSRX
Mặc dầu các ứng dụng ADSRX được viết bằng C++, đối với AutoCAD chúng xuất hiện giống như một hàm viết bằng AutoLISP. Một ứng dụng ADSRX được viết như một tập các hàm ngoài được nạp, gọi từ bộ thông dịch AutoLISP.

Các ứng dụng ADSRX hiệu quả hơn AutoLISP về mặt tốc độ và tận dụng bộ nhớ; chúng có thể truy xuất vào các phục vụ mà AutoLISP không thể, như là hệ điều hành, và phần cứng. Điều này làm cho ADSRX rất phù hợp cho một ứng dụng yêu cầu sự tính toán lớn hoặc tương tác vơi môi trường hệ điều hành, nhưng có thể sẽ tốn nhiều thời gian và đắt tiền hơn để phát triển và bảo trì hơn so với AutoLISP. AutoLISP thì phù hợp tốt hơn với các ứng dụng mà sự giá bảo trì và phát triển quan trọng đáng kể hơn so với hiệu suất.

Mỗi ứng dụng ADSRX phải hỗ trợ một giao tiếp(giao diện) với AutoLISP được định nghĩa bởi các môi trương ADSRX. Các giao tiếp yêu cầu ứng dụng gọi một hàm trong thư viện ADSRX nào đó để chuyển giá trị nào đó trong một chuỗi xác định. Phần sau đây mô tả thư viện hàm và chỉ ra một hàm acrrxEntrypoint().

Thư viện liên kết động ADSRX (ADSRX DLLs).
Các ứng dụng ADSRX là các thư viện liên kết động(DLLs) là các thư viện liên kết tới một chương trình ứng dụng khi chúng đã được nạp hay là chạy chứ không phải là được biên dịch ở giai đoạn cuối việc biên dịch một chương trình.

Visual C++ IDE tạo một đuôi .dll cho các tệp DLL một cách ngầm định. Bạn phải đặt lại IDE để sử dụng đuôi .arx cho các tệp ADSRX, hoặc đổi tên sau khi đã được dịch xong. Một cách khác bạn có thể bao gồm(include) các tệp .dll trong đối số tệp được dùng bởi dùng bởi arxload hoặc ads_arxload().

AcrxEntryPoint()

AutoCAD gọi tới môđun ADSRX qua AcrxEntryPoint() tương đương với hàm main() trong một chương trình chạy được. Bạn phải có trách nhiệm trang bị hàm AcrxEntryPoint(), như được trình bày trong phần sau.

Một hàm AcrxEntryPoint() phục vụ không chỉ cho một đầu vào cho việc liên lạc với một ứng dụng ADSRX từ AutoCAD, mà nó còn là một cách để các ứng dụng ADSRX chuyển các thông báo tới ứng dụng và trả về mã trang thái cho AutoCAD. Tất cả các yêu cầu để gọi một hàm qua ads_defun() được tạo ra bởi AcrxEntryPoint(). Nếu bạn định nghĩa một lệnh mới với ADSRX hoặc với ads_regfunc(), AutoCAD lập tức thực hiện hàm kết hợp với lệnh này.

Hàm AcrxEntryPoint() có các dấu hiệu sau đây:

Extern “C”

AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void * pkt);



Trong đó:

Msg: biểu dĩên các thông báo gửi từ nhân ADSRX tới ứng dụng.

Pkt : giữ một gói giá trị.

AppRetCode: chứa mã trạng thái trả về cho AutoCAD.

Trong định nghĩa AcrxEntryPoint(), bạn thường phải viết một câu lệnh điều kiện để giải mã các thông báo từ AutoCAD, nhằm thực hiện đúng các công việc liên quan tới thông báo, và để trả về một giá trị trạng thái. Đoạn mã sau đây chỉ ra bộ khung của một câu lệnh điều kiện như thế.



AcRx::AppRetCode

acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)

{

switch(msg) {

case AcRx::kInitAppMsg:

break;

.

.

.

default:

break;

}

return AcRx::kRetOK;



}

Thông báo của AutoCAD tới các ứng dụng ADSRX.

Bảng sau đây trình bày một số thông báo mà AutoCAD gửi cho các ứng dụng ADSRX.

Thông báo
Mô tả

kInitAppMsg





kUnloadAppMsg







kOleUnloadAppMsg





kLoadDwgMsg









kDependencyMsg










được gửi tới khi một ứng dụng được nạp và mở một liên lạc giữa AutoCAD và ứng dụng



được gửi tới khi một ứng dụng ADSRX bị bỏ (unload) - do người sử dụng hoặc AutoCAD tự ngắt. Đóng các tệp và thực hiện các hoạt động dọp dẹp.



Thông báo này sẽ chỉ được trả lời bởi ứng dụng với ActiveX (OLE) Automation.



được gửi tới khi bản vẽ được mở. Làm cho các hàm thư viện ADSRX có tác dụng với các hàm ứng dụng cần tới.

Thông báo này chỉ được gửi tới khi một ứng dụng đã đăng kí một hàm AutoLISP với ads_defun.



được gửi khi một ứng dụng đã được đăng kí một đối tượng AcRxService, phụ thuộc vào phục vụ thay đổi từ 0 tới 1

được gửi tới để gọi hàm đã đăng kí bởi ads_defun thông báo này chỉ gửi khi ứng dụng đã đăng kí một hàm AutoLISP với ads_defun().




Không thể dùng một hàm ads_command() trong (hay trong lúc) một kLoadDwgMsg.

Xem rxdefs.h xem các hằng được định nghĩa bởi khai báo kiểu AppMsgCode



Hàm xử lí thông điệp thường dùng như sau:

/////////////////////////////////////////////////////////////////////

// acrxEntryPoint(internal)

// This function is the entry point for your application.

/////////////////////////////////////////////////////////////////////

AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* ptr)

{

switch (msg) {

case AcRx::kInitAppMsg:

acrxUnlockApplication(ptr);

initApp();

break;

case AcRx::kUnloadAppMsg:

unloadApp();

break;

case AcRx::kLoadADSMsg:

OnkLoadADSMsg();

break;

case AcRx::kUnloadADSMsg:

OnkUnloadADSMsg();

break;

case AcRx::kInvkSubrMsg:

OnkInvkSubrMsg();

break;

default:

break;

}

return AcRx::kRetOK;

}



ObjectARX

Một ứng dụng ARX là một thư viện liên kết động (DLL), chia sẻ không gian địa chỉ và thực hiện các lời gọi hàm trực tiếp tới AutoCAD. ObjectARX là một môi trường lập trình hướngđối tượng, bằng cách trang bị một bộ thư viện các lớp đối tượng ARX, được thiết kế hướng về với khả năng mở rộng các thư mục ARX bao gồm các macro để làm thuận tiện việc định nghĩa một lớp mới và đưa ra khả năng thêm các chức năng vào các lớp đã tồn tại trong thư viện tại lúc chạy chương trình. Thư viện ARX có thể dùng với phát triển hệ thống cho AutoCAD (ADS) và với các giao diện lập trình ứng dụng AutoLISP.

Dưới đây sẽ phân tích một cái nhìn khái quát đối với các thư viện ARX.

· Môi trường lập trình ARX

· Các thư viện ARX

· Xác định kiểu lúc chạy



1. Môi trường lập trình ARX

Môi trường lập trình ARX trang bị một giao diện lập trình ứng dụng C++ cho phép người phát triển sử dụng, đặc tính hoá, và mở rộng AutoCAD. Các thư viện ARX gồm một bộ công cụ đa năng cho người phát triển ứng dụng để có được các ưu điểm của kiến trúc mở của AutoCAD, cung cấp truy nhập trực tiếp tới cấu trúc cơ sở dữ liệu AutoCAD, đồ hoạ hệ thống, và định nghĩa các lệnh cho AutoCAD. Ngoài ra, những thư viện này được thiết kế để làm việc với các giao diện lập trình ứng dụng AutoLISP và ADS để người phát triển có thể chọn các công cụ lập trình phù hợp nhất với yêu cầu và kinh nghiệm của mình.

2. Các thư viện ARX.

Môi trường lập trình ARX gồm có các thư viện sau đây:

AcRx:

Các lớp dùng cho việc liên kết các ứng dụng và việc đăng kí và xác định các lớp trong thời gian chạy.

AcEd:

Các lớp cho việc đăng kí các lệnh và các thông báo sự kiện hệ thống.

AcDb:

Các lớp về cơ sở dữ liệu AutoCAD.

AcGi:

Giao diện đồ hoạ cho việc tạo ảnh các vật thể AutoCAD.

AcGe:

Thư viện tiện ích về đại số tuyến tính và các đối tượng hình học cơ bản.

ADS:

Một thư viện C dùng để tạo các ứng dụng AutoCAD. Các ứng dụng ARX thường dùng các thư viẹn này cho các hoạt động như chọn vật thể, vận dụng tập chọn, lấy các dữ liệu.



· Thư viện AcRx:

Cung cấp các lớp cấp độ hệ thống để khởi tạo, liên kết thư viện liên kết động (DLL) cho việc xác định và đăng kí các lớp trong thời gian chạy. Lớp cơ sở cho thư viện này là AcRxObject, cung cấp các phương tiện cho:

- Phân tích và xác định thừa kế đối tượng trong thời gian chạy

- Bổ sung các nghi thức mới đối với một lớp trong thời gian chạy.

- Kiểm tra bằng nhau và so sánh đối tượng.

- Sao chép đối tượng.

Thư viện AcRx cũng cung cấp một tập các macro C++ để giúp cho việc tạo các lớp ARX mới mà được dẫn xuất từ các AcRxObject.

AcRxDictionary là một lớp quan trọng khác trong thư viện này. Một từ điển là một ánh xạ từ một chuỗi văn bản vào một đối tượng khác. Thư viện AcRx đặt từ điển các đối tượng, lớp, và các phục vụ của nó trong một đối tượng từ điển toàn cục, là một thể hiện của lớp AcRxDictionary. Các ứng dụng có thể thêm các đối tượng vào thư viện để có thể truy xuất được từ các ứng dụng khác.

Phân cấp lớp cho thư viện AcRx được chỉ ra dưới đây:



AcRxObject

AcRxClass

AcRxDictionary

AcRxDLinkerReactor

AcRxDynamicLinker

AcRxIterator

AcRxDictionaryIterator

AcRxService
· Thư viện AcEd

Thư viện AcEd cung cấp các lớp cho việc định nghĩa và đăng kí các lệnh mới AutoCAD mà hoạt động theo cùng một cách như các lệnh cài đặt trong của AutoCAD. Các lệnh mới định nghĩa được xem như các lệnh “trong” bởi vì chúng thuộc về cùng cấu trúc nội bộ (AcEdCommandStack) như là các lệnh được cài sẵn. Một lớp quan trọng trong thư viện này là AcEditorReactor, điều khiển trạng thái của hệ soạn thảo AutoCAD và thông báo với các ứng dụng khi các sự kiện chỉ định xảy đến, như là khởi động, kết thúc, hoặc huỷ bỏ một lệnh.

Phân cấp lớp cho thư viện AcEd được chỉ ra dưới đây:



AcRxObject

AcEdCommandIterator

AcEdCommandStack

AcEditor

AcEdJig

AcEditorReactor

AcTransaction

AcTransactionManager

AcTransactionReactor



· Thư viện AcDb

Thư viện AcDb cung cấp các lớp mà cho phép truy cập tới các cấu trúc trong cơ sở dữ liệu AutoCAD. Cơ sở dữ liệu này chứa tất cả các thông tin về các đối tượng đồ hoạ, gọi là các vật thể (entities), tạo nên một bản vẽ AutoCAD, cũng như các đối tượng phi đồ hoạ(ví dụ: lớp, kiểu đường, kiểu chữ) cũng là một phần của bản vẽ. Có thể truy vấn và thao tác các thể hiện đã có của các vật thể AutoCAD và các đối tượng cùng với thư viện AcDb cũng như tạo một thể hiện mới của các đối tượng cơ sở dữ liệu.

Cơ sở dữ liệu AutoCAD chứa các phần tử chính như sau:

Một bộ 9 bảng kí hiệu sở hữu các kí hiệu tên riêng đầu vào của đối tượng. Những đối tượng này biểu diễn rất nhiều các đối tượng AcDbDatabase được sử dụng thông thường và các dữ liệu thành phần.

Một đối tượng từ điển có tên(thuộc lớp AcDbDictionary), cung cấp một cơ sở “Bảng mục lục” của một bản vẽ. Khởi đầu, bảng này chứa chỉ 2 mục: Ids của 2 từ điển khác sử dụng bởi AutoCAD. Tuy nhiên các ứng dụng thoả mái thêm các đối tượng vào từ điển.

Một tập hợp cố định khoảng 200 biến tiêu đề được định nghĩa bởi AutoCAD(những biến này không phải là các đối tượng của cơ sở dữ liệu).

Phân cấp lớp cho thư viện AcDb được chỉ ra như dưới đây:



AcDbAuditInfo (kiểm tra và khôi phục bản vẽ)

AcDbRecover

AcDbRecoverCallBack



AcDbHandle (định danh đối tượng)

AcDbObjectId

AcDbHardOwnershipId

AcDbHardPointerId

AcDbSoftOwnershipId

AcDbSoftPointerId



AcDbIdMapping (Dùng cho deep clone)

AcDbIdMappingIter

AcDbIdPair

AcDbSymbolTableIterator (Biến lặp)

AcDbBlockTableIterator

AcDbBlockTableRecordIterator

AcDbDimStyleTableIterator

AcDbLayerTableIterator

AcDbLinetypeTableIterator

AcDbRegAppTableIterator

AcDbTextStyleTableIterator

AcDbUCSTableIterator

AcDbAbstractViewTableIterator

AcDbViewTableIterator

AcDbViewportTableIterator

AcDbGroup Iterator



AcDbExtents

AcDbDate (kiểu dữ liệu cấp thấp)

AcDbIntArray

AcDbObjectIdArray

AcDbVoidPtrArray



AcRxObject

AcDbDatabase (cơ sở dữ liệu AutoCAD)



AcDbDictionaryIterator



AcDbDwgFiler (Các chức năng về tệp)

AcDbDwgCopyFiler

AcDbDeepCloneFiler

AcDbWblockCloneFiler

AcDbDwgUndoFiler

AcDbDxfFiler



(AcRxObject)

AcDbObject

AcDbDictionary

AcDbEntity (Các vật thể AutoCAD)

AcDb3dSolid

AcDbBlockBegin

AcDbBlockEnd

AcDbBlockReference

AcDbMInsertBlock

AcDbBody

AcDbCurve

AcDb2dPolyline

AcDb3dPolyline

AcDbArc

AcDbCircle

AcDbEllipse

AcDbLeader

AcDbLine

AcDbRay

AcDbSpline

AcDbXline

AcDbDimension

AcDb2LineAngularDimension

AcDb3PointAngularDimension

AcDbAlignedDimension

AcDbDiametricDimension

AcDbOrdinateDimension

AcDbRadialDimension

AcDbRotatedDimension

AcDbFace

AcDbFaceRecord

AcDbFcf

AcDbMline

AcDbMText

AcDbOleFrame

AcDbPoint

AcDbPolyFaceMesh

AcDbPolygonMesh

AcDbRegion

AcDbSequenceEnd

AcDbShape

AcDbSolid

AcDbText

AcDbAttribute

AcDbAttributeDefinition

AcDbTrace

AcDbVertex

AcDb2dPolylineVertex

AcDb3dPolylineVertex

AcDbPolyFaceMeshVertex

AcDbPolygonMeshVertex

AcDbViewport

AcDbProxyEntity



(AcRxObject)

(AcDbObject)

AcDbGroup

AcDbMlineStyle

AcDbSymbolTable (Các bảng kí hiệu)

AcDbBlockTable

AcDbDimStyleTable

AcDbLayerTable

AcDbLinetypeTable

AcDbRegAppTable

AcDbTextStyleTable

AcDbUCSTable

AcDbAbstractViewTable

AcDbViewportTable

AcDbViewTable

AcDbSymbolTableRecord (Bản ghi các bảng kí hiệu)

AcDbAbstractViewTableRecord

AcDbViewportTableRecord

AcDbViewTableRecord

AcDbBlockTableRecord

AcDbDimStyleTableRecord

AcDbLayerTableRecord

AcDbLinetypeTableRecord

AcDbRegAppTableRecord

AcDbTextStyleTableRecord

AcDbUCSTableRecord

AcDbProxyObject

AcDbObjectIterator

AcDbObjectReactor (Dùng để gián tiếp thông báo các sự kiện)

AcDbEntityReactor

AcDbDatabaseReactor



· Thư viện AcGi

Thư viện AcGi cung cấp các giao diện đồ hoạ dùng cho các vật thể trong bản vẽ AutoCAD. Thư viện này được sử dụng bởi các hàm thành phần AcDbEntity worldDraw(),viewportDraw(), savaAs() là một phần của các nghi thức chuẩn của các vật thể. Hàm worldDraw() phải được định nghĩa bởi tất cả các lớp vật thể được định nghĩa mới. Đối tượng AcDiWorldDraw cung cấp một giao diện lập trình (API) mà qua đó AcDbEntity::worldDraw() có thể tạo biểu diễn đồ hoạ của nó trong tất cả các cửa sổ một cách đồng thời. Tương tự thế, đối tượng AcGiViewportDraw cung cấp một API mà qua đó, AcDbEntity::viewportDraw() có thể sinh ra các biểu diễn đồ hoạ khác nhau cho mỗi vùng nhìn(viewport).

Phân cấp lớp cho thư viện AcGi được chỉ ra dưới đây:

AcRxObject

AcGiEdgeData

AcGiFaceData

AcGiSubEntityTraits

AcGiTextStyle

AcGiVertexData

AcGiViewport

AcGiViewportDraw

AcGiViewportGeometry

AcGiWorldDraw

AcGiWorldGeometry





· Thư viện AcGe

Thư viện AcGe được dùng bởi thư viện AcDb và cung cấp các lớp tiện ích như là vector, điểm, và ma trận được sử dụng để thực hiện các thao tác hình học thông dụng về 2 chiều và 3 chiều. Nó cũng cung cấp các đối tượng hình học đơn giản như là điểm, đường cong và mặt. Thư viện này gồm có 2 phần phụ: các lớp cho hình học 2 chiều và các lớp cho hình học 3 chiều. Lớp trừu tượng cơ sở chính là AcEntity2d và AcEntity3d. Một số các lớp cơ bản không là dẫn xuất từ bất kì lớp nào gồm có AcGePoint2d, AcGeVector2d, và AcGeMatrix2d(chỉ ra ở đầu phân cấp lớp). Những lớp cơ sơ này có thể dùng để thực hiện nhiều loại thao tác thông dụng như là thêm vector vào một điểm, tính toán điểm hay tích có hướng 2 vector, và tính toán tích của 2 matrận. Các lớp cấp cao hơn trong thư viện này được trang bị bởi dùng các lớp cơ sở. Các dữ liệu thành phần của các lớp cấp cơ sở được khai báo toàn cục. Đây chỉ là các lớp trong thư viện hình học mà có các thành phần toàn cục. Sau đây là phân cấp lớp cho thư viện AcGe:

AcGePoint2d

AcGeVector2d

AcGeMatrix2d

AcGeScale2d

AcGePoint2dArray

AcGeVector2dArray



AcGePoint3d

AcGeVector3d

AcGeMatrix3d

AcGeScale3d

AcGePoint3dArray

AcGeVector3dArray



AcGeTolerance

AcGeInterval

AcGeCurveBoundary

AcGeDoubleArray

AcGeKnotVector



AcGeEntity2d

AcGePointEnt2d

AcGePosition2d

AcGePointOnCurve2d

AcGeCurve2d

AcGeLinearEnt2d

AcGeLine2d

AcGeRay2d

AcGeLineSeg2d



AcGeCircArc2d

AcGeEllipArc2d

AcGeSplineEnt2d

AcGeCubicSpline2d

AcGeNurbCurve2d

AcGePolyLine2d

AcGeExternalCurve2d



AcGeEntity3d

AcGePointEnt3d

AcGePosition3d

AcGePointOnCurve3d

AcGePointOnSurface

AcGeCurve3d

AcGeLinearEnt3d

AcGeLine3d

AcGeRay3d

AcGeLineSeg3d

AcGeCircArc3d

AcGeEllipArc3d

AcGeExternalCurve3d

AcGeSplineEnt3d



AcGeCubicSpline3d

AcGeNurbCurve3d

AcGePolyLine3d

AcGeAugPolyLine3d

AcGeSurface

AcGePlanarEnt

AcGePlane

AcGeBoundedPlane

AcGeCylinder

AcGeCone

AcGeSphere

AcGeTorus

AcGeNurbSurface

AcGeExternalSurface

AcGeOffsetSurface

AcGeExternalBoundedSurface



3. Đồng nhất hoá kiểu trong thời gian chạy

Mỗi lớp con của AcRxObject có thể có một đối tượng mô tả lớp kết hợp(của kiểu AcRxClass) được sử dụng cho đồng nhất hoá kiểu. ARX cung cấp các hàm cho việc thử xem một đối tượng thuộc một lớp hay dẫn xuất của một lớp nào đó hay không, các hàm cho phép bạn xác định 2 đối tượng cùng một lớp và các hàm trả về mô tả lớp của đối tượng. Các hàm quan trọng được cung cấp bởi AcRxObject đồng nhất hoá kiểu trong thời gian chạy bao gồm:

· desc() một hàm thành phần tĩnh mà trả về mô tả lớp đối tượng của một lớp chưa biết

· cast() một hàm thành phần tĩnh trả về một đối tượng của một kiểu chỉ định, hoặc Null nếu như đối tượng không thuộc lớp(hoặc dẫn xuất lớp đó)

· isKindOf() trả về đối tượng có thuộc về hay không một lớp chỉ định(hoặc một lớp dẫn xuất).

· isA() trả về mô tả lớp đối tượng của một đối tượng mà không biết lớp.

Khi bạn muốn biết lớp của một đối tượng là gì, sử dụng AcRxObject::isA(), hàm này trả về mô tả lớp đối tượng(một thể hiện của AcRxClass) cho một đối tượng cơ sở dữ liệu. Dấu hiệu của nó là:

AcRxClass* isA() const;

Khi bạn đã biết lớp của đối tượng là gì, bạn có thể sử dụng hàm desc() để nhận lại mô tả lớp đối tượng:

static AcRxClass* desc();

ví dụ sau đây tìm kiếm thể hiện của AcDbEllipse hay bất kì lớp dẫn xuất nào từ nó sử dụng isKindOf() và hàm thành phần tĩnh AcDbEllipse::desc()

AcDbEntity* curEntity = somehowGetAndOpenAnEntity();

if (curEntity->isKindOf(AcDbEllipse::desc())) {

// Got some kind of AcDbEllipse instance.

}

Ví dụ sau đây chỉ ra một cách khác để tìm kiếm thể hiện của AcDbEllipse, hay bất kì lớp nào dẫn xuất từ nó, sử dụng hàm thành phần tĩnh AcDbEllipse::cast()

AcDbEllipse* ellipseEntity = AcDbEllipse::cast(curEntity);

if (ellipseEntity != NULL) {

// Got some kind of AcDbEllipse instance.

}

Ví dụ sau đây tìm kiếm AcDbEllipse, nhưng không tìm kiếm thể hiện của các lớp dẫn xuất từ AcDbEllipse, sử dụng isA() và AcDbEllipse::desc()

AcDbEllipse::desc().

if (curEntity->isA() == AcDbEllipse::desc()) {

// Got an AcDbEllipse, no more, no less.
_________________
Mời bạn đến với bách khoa toàn thư về kết cấu:.
http://vi.ketcau.wikia.com
Về Đầu Trang
Xem lý lịch thành viên Gửi tin nhắn Gửi email Website của thành viên này


Trình bày bài viết theo thời gian:   

   StructDesignPro -> ObjectARX cho AutoCAD

Gửi bài mới   Trả lời chủ đề này
 


 
Bạn không có quyền gửi bài viết
Bạn không có quyền trả lời bài viết
Bạn không có quyền sửa chữa bài viết của bạn
Bạn không có quyền xóa bài viết của bạn
Bạn không có quyền tham gia bầu chọn


Trang 1 trong tổng số 1 trang
Thời gian được tính theo giờ [GMT+ 7 giờ]

Chuyển đến 


Powered by phpBB © 2001, 2002 phpBB Group
Web Hosting Directory
This contents of this page are in no way endorsed by the Mozilla Foundation
Mozilla_Firefox theme created by Plastikaa © 2005


Free Web Hosting | File Hosting | Photo Gallery | Matrimonial


Powered by PhpBB.BizHat.com, setup your forum now!
For Support, visit Forums.BizHat.com