You are on page 1of 7

ArcObject..

customize ArcMap interface


Adakah anda seorang programmer?? Kalau bukan programmer pun tak apa, tapi
berminat tak nak ubah sikit-sikit interface ArcMap anda, maybe nak buat custom
menu ke, custom button ke. Kali ini saya akan terangkan serba sedikit mengenai
konsep customize interface di dalam ArcGI.
ebelum itu saya bagi dulu
pengenalan serba sedikit tentang Arc!b"ect. #erisian ArcGI $esktop anda dibina on
top of Arc!b"ect dimana Arc!b"ect ni terdiri dari beberapa set of classes yang ditulis
oleh programmer %&I menggunakan pengaturcaraan '((. )agaimana ianya
disimpan di dalam ArcGI? Ianya disimpan di dalam fail-fail $** apabila anda
install ArcGI $esktop anda. Kalau sesiapa yang pernah bela"ar !b"ect !riented
#rogramming tentu lebih mudah faham tentang apa yang saya maksudkan ni.
)agaimana kita nak programkan ArcGI desktop kita menggunakan Arc!b"ect
classes ini? Anda boleh menggunakan pelbagai bahasa pengaturcaraan, antaranya
+), +)A, '((, ', dan .-%.. )ermula dari /ersi ArcGI 01, %&I mencadangkan
agar persekitaran .-%. digunakan kerana mereka tidak akan support +)2+)A
apabila /ersi 01.0 muncul kelak. .etapi untuk memudahkan anda memahami konsep
customization Arc!b"ect, saya akan menggunakan contoh menggunakan +)A kerana
VBA Editor memang telah sedia ada di dalam ArcMap /ersi ArcGI01 dan "uga /ersi
3.4.
5ntuk buka +)A %ditor ni, anda klik saha"a pada menu Customize > VBA Macros >
Visual Basic Editor di dalam ArcMap.
#enerangan mengenai komponen-komponen di dalam +)A %ditor adalah seperti di
ba6ah.
$i dalam contoh ini, saya akan membina satu form yang berfungsi untuk
melaksanakan proses carian nama sungai di atas peta saya. 5ntuk membina form di
dalam +)A %ditor, right click di dalam ruangan #ro"ect 7ru"uk ra"ah di atas untuk
ruangan #ro"ect8, kemudian pilih saha"a Insert > UserForm.
Kaedah membina Form
ecara default +)A %ditor akan menamakan form anda sebagai 5ser9orm0.
Kemudian saya drag control 'ombo)o4 masuk ke dalam form saya. Ini akan
bertindak sebagai dropdo6n bo4 di dalam form saya yang akan menyenaraikan
nama-nama sungai. aya drag "uga control 'ommand)utton yang akan mencari
nama sungai yang saya kehendaki di dalam 'ombo)o4. aya namakan
'ommand)utton saya ini sebagai 'A&I.

Click/Drag control ComboBox dan CommandButton ke dalam form.
Kemudian saya double click di atas form saya untuk memaparkan ruangan
Procedure. eterusnya saya klik kepada Initialize 7ru"uk ra"ah di ba6ah8.
Double click form dan pastikan anda tukar kepada Event Initialize pada
Procedure.
Kemudian saya masukkan kod berikut di ba6ah ruangan Private Sub
UserFormInitialize!"
Dim pMxDoc As IMxDocument
Dim PFLayer As IFeatureLayer
Dim pFc As IFeatureClass
Dim pFeat As IFeature
Dim i As Integer
Set pMxDoc = ThisDocument
For i = 0 To pMxDoc.FocusMap.LayerCount !
I" #$Case#pMxDoc.FocusMap.Layer#i%.&ame% = $Case#'Sungai'%% Then
Set PFLayer = pMxDoc.FocusMap.Layer#i%
(xit For
(n) I"
&ext
Set pFc = PFLayer.FeatureClass

*sort nama sungai
Dim pTa+leSort As ITa+leSort
Set pTa+leSort = &e, Ta+leSort
pTa+leSort.Fiel)s = '&AM('
pTa+leSort.Ascen)ing#'&AM('% = True
Set pTa+leSort.Ta+le = pFc
pTa+leSort.Sort &othing

*-eturn a cursor "or all the "eatures
Dim pFCur As IFeatureCursor
Set pFCur = pTa+leSort.-o,s
Set pFeat = pFCur.&extFeature

Dim nama(xists As .oolean
nama(xists = False
Do $ntil pFeat Is &othing
nama = pFeat./alue#pFeat.Fiel)s.Fin)Fiel)#'&AM('%%

*Chec0 "or )uplicate name
For i = 0 To Com+o.ox!.ListCount !
I" nama = Com+o.ox!.List#i% Then
nama(xists = True
(lse1 (n) I"
&ext i

Select Case nama(xists
Case False
Com+o.ox!.A))Item nama
Case (lse
(n) Select
nama(xists = False

Set pFeat = pFCur.&extFeature
Loop

Com+o.ox!.ListIn)ex = 0
!K, selesai coding untuk memapar nama sungai ke dalam combobo4 form saya.
ekarang saya akan masukkan pula coding untuk mencari nama sungai sekiranya
pengguna klik butang 'A&I pada form saya. Kaedah ini samalah seperti bila kita
laksanakan proses carian menggunakan kaedah Select b# Attributes di dalam
ArcMap. 5ntuk masukkan coding tu, saya double click pada 'ommand)utton 'A&I,
seterusnya procedure 'ommand)utton0:'lick akan dipaparkan.
Double click CommandButton C!" untuk mendapatkan
procedure
eterusnya saya masukkan coding berikut di ba6ah ruangan Private Sub
CommandButton$Clic%!"
Dim pDoc As IMxDocument
Dim pMap As IMap
Dim pLayer As IFeatureLayer
Dim pFc As IFeatureClass
Dim p2" As I2ueryFilter
Dim pSelSet As ISelectionSet
Dim pFSel As IFeatureSelection

Set pDoc = ThisDocument
Set pMap = pDoc.FocusMap

For i = 0 To pMap.LayerCount !
I" $Case#pMap.Layer#i%.&ame% = $Case#'Sungai'% Then
Set pLayer = pMap.Layer#i%
(xit For
(n) I"
&ext
Set pFc = pLayer.FeatureClass

*Create the 3uery "ilter
Set p2" = &e, 2ueryFilter
p2".4hereClause = '&AM( = *' 5 Com+o.ox!./alue 5 '*'
*6et the "eatures that meet the ,here clause
Set pSelSet = pFc.Select#p2"7 esriSelectionTypeIDSet7
esriSelection8ption&ormal7
&othing%

*Apply the selection
Set pFSel = pLayer
Set pFSel.SelectionSet = pSelSet
pDoc.Acti9e/ie,.-e"resh
Kemudian, saya aktifkan kembali form saya dan klik saha"a butang &un di dalam
+)A %ditor.
Klik !un untuk run form anda
ebaik saha"a saya klik &un, form saya akan dipaparkan di dalam ArcMap. enarai
nama-nama sungai akan dapat saya lihat apabila saya klik combobo4 di dalam form
tersebut.
$alam contoh ini, saya memilih nama ungai *angat. Apabila saya klik butang 'A&I,
ungai *angat akan ditun"ukkan di atas peta saya seperti ra"ah di ba6ah.
'ontoh yang saya tun"ukkan ini adalah menggunakan bahasa pengaturcaraan +)A.
ekiranya anda ingin menggunakan persekitaran .-%., anda boleh programkan di
dalam Microsoft +isual tudio menggunakan samada +).-et ataupun ',.-et.
o macamana? Menarik tak? Anda boleh mencuba coding di atas untuk disesuaikan
dengan data anda. 'uma perlu gantikan saha"a perkataan ;ungai; dengan nama
layer anda di dalam ArcMap dan gantikan ;-AM%; dengan nama field yang ingin
anda <uery di dalam layer anda. elamat mencuba.

You might also like