過去只要利用
Dim pickEnt as acadEntity就可以把某個圖元給抓到,不過這方式沒法在64位元版來利用了。難道過去多年辛苦寫得程式都沒用了?還未必,至少改些碼還可以撐陣子...
Dim lngObjID as long
LngObjID=pcikEnt.ObjectID '獲取元件ID
Dim getEnt as acadEntity
set getEnt=ThisDrawing.ObjectIdToObject(lngObjID) '獲取元件
目前知道可以變通的方式有兩個
1.改變64位元的屬性名與方法名
Dim pickEnt as acadEntity2. 改抓Handle值:
Dim lngObjID as long
LngObjID=pcikEnt.ObjectID32 '獲取元件ID(改屬性名)
Dim getEnt as acadEntity
set getEnt=ThisDrawing.ObjectIdToObject32(lngObjID) '獲取元件(改方法名)
Dim pickEnt as acadEntity綜合上面的結論,第一種方式雖然可以解決64位元版本的困擾,但程式改寫後卻不能在32位元的版本執行,所以比較徹底的方式,還是改以Handle值來做存取比較實在。
Dim strObjHandle as long
strObjHandle=pcikEnt.Handle '獲取元件Handle
Dim getEnt as acadEntity
set getEnt=ThisDrawing.HandleToObject(strObjHandle) '獲取元件
2018/06/30 後記:ObjectID32這參數是為了配合64位元的作業系統而產生,但在網路文章中有發現:自ACAD2016版以後,又將這個參數給拿掉,改成ObjectID了。這下子在程式設計中想符合多版本運作視乎更加困難。
沒有留言:
張貼留言