AdDuzelt Prosedürü:
Eski: o.pname = Mid(o.pname, pozisyon + Len(ayrac)) → Ayraçtan sonrasını alıyordu (örn. 101/1 → 1).
Yeni: o.pname = Left(o.pname, pozisyon – 1) → Ayraçtan öncesini alıyor (örn. 101/1 → 101).
Mantık:
InStr(o.pname, ayrac) ile ayraç pozisyonu bulunur.
Left(o.pname, pozisyon – 1) ile ayraçtan önceki kısım alınır.
Eğer ayraç yoksa (pozisyon = 0), pname değişmez.
If o.Tag = opline kontrolü aynı kaldı.
Main Prosedürü:
Tamamen aynı:
InputBox ile ayraç alınır, varsayılan değer ayrac.txt’den okunur.
Ayraç, C:\\sabangul\\NCMAKRO\\AYAR\\ayrac.txt’ye kaydedilir.
Array(opline) ile opline objeleri seçilir.
Mesaj: “Alan objelerini seçiniz”.
SEL.NE, GetSelectedObject, PutObject, RedrawAndRewind, SetCurrentWindow değişmedi.
Sadece InputBox mesajı güncellendi: “Hangi karakterden sonrası silinsin?”.
Ayar Dosyası:
C:\\sabangul\\NCMAKRO\\AYAR\\ayrac.txt’ye ayraç kaydedilir/okunur.
Dosya yoksa dizin oluşturulur, dosya oluşturulur.
Kullanıcı yeni ayraç girerse dosya güncellenir.
Örnek Senaryolar:
pname = \”101/1\”, ayrac = \”/\” → pname = \”101\”
pname = \”PARSEL/ABC\”, ayrac = \”/\” → pname = \”PARSEL\”
pname = \”123-456\”, ayrac = \”-\” → pname = \”123\”
pname = \”NOAYRAC\”, ayrac = \”/\” → Değişmez (pname = \”NOAYRAC\”).
İlk çalıştırma: InputBox’ta / varsayılan, kullanıcı – girer → ayrac.txt’ye – yazılır.
Sonraki çalıştırma: ayrac.txt’den – okunur, InputBox varsayılan – gösterir.
Kullanım
Makro, pname’den ayraçtan sonraki kısmı siler (örn. 101/1 → 101) ve ekranı günceller.
Netcad’de makroyu yükle (*.vbs veya *.ncm olarak).
Main prosedürünü çalıştır.
InputBox açılır:
İlk çalıştırmada varsayılan /, sonraki çalıştırmalarda C:\\sabangul\\NCMAKRO\\AYAR\\ayrac.txt’den okunan değer.
Yeni ayraç girersen (örn. -), dosya güncellenir.
İptal edersen makro kapanır.
Seçim ekranında opline objelerini (alanlar, poligonlar) seç.
📝 Netcad NVB Code
' Opline Alan Adından En Sağdaki Karakter Sonrasını Silme Makrosu
' Açıklama: Kullanıcıdan seçilen opline (alan) objelerinin pname özelliğinden, kullanıcı tarafından belirtilen bir karakterin (örn. /) en sağdaki örneğinden sonraki kısmı siler. Örneğin, pname = "101/1/500" ise, en sağdaki / karakterinden sonraki 500 silinir ve pname = "101/1" olur. Ayraç karakteri C:\\sabangul\\NCMAKRO\\AYAR\\ayrac.txt dosyasına kaydedilir ve sonraki çalıştırmalarda buradan okunur.
' Yazar: Şaban Gül
' Tarih: 18 Mayıs 2025
Option Explicit
Sub Main
Dim i, j, o, SEL, u, ayrac, fso, dosya, dosyaYolu
Const AYAR_DIZINI = "C:\\sabangul\\NCMAKRO\\AYAR"
Const AYAR_DOSYASI = "ayrac.txt"
dosyaYolu = AYAR_DIZINI & "\\" & AYAR_DOSYASI
With Netcad
' Dosya sistemi nesnesi oluştur
Set fso = CreateObject("Scripting.FileSystemObject")
' Ayar dosyasını oku
ayrac = "/"
If fso.FileExists(dosyaYolu) Then
Set dosya = fso.OpenTextFile(dosyaYolu, 1) ' 1 = okuma
If Not dosya.AtEndOfStream Then
ayrac = dosya.ReadLine
End If
dosya.Close
End If
' Kullanıcıdan ayracı al (varsayılan: dosya veya /)
ayrac = InputBox("Hangi karakterden sonrası silinsin? (örn. /)", "Karakter Seçimi", ayrac)
If ayrac = "" Then Exit Sub ' Boş veya iptal edilirse çık
' Ayar dosyasını güncelle
If Not fso.FolderExists(AYAR_DIZINI) Then
fso.CreateFolder AYAR_DIZINI
End If
Set dosya = fso.CreateTextFile(dosyaYolu, True) ' True = üzerine yaz
dosya.WriteLine ayrac
dosya.Close
Set SEL = .NewSelectionSet
Set o = .NewObject
If SEL.Select("Alan objelerini seçiniz", Array(opline)) Then
For i = 0 To SEL.NE - 1
j = SEL.GetSelectedObject(i, o)
AdDuzelt o, ayrac
.PutObject j, o
Next
SEL.RedrawAndRewind
Set u = .GetCurrentWindow
.SetCurrentWindow u, 1
End If
Set u = Nothing
Set SEL = Nothing
Set o = Nothing
Set fso = Nothing
Set dosya = Nothing
End With
End Sub
Sub AdDuzelt(o, ayrac)
If o.Tag = opline Then ' Sadece opline objeleri için çalış
Dim parcalar, yeniAd, i
parcalar = Split(o.pname, ayrac)
If UBound(parcalar) > 0 Then ' En az bir ayraç varsa
yeniAd = ""
For i = 0 To UBound(parcalar) - 1
If i > 0 Then yeniAd = yeniAd & ayrac
yeniAd = yeniAd & parcalar(i)
Next
o.pname = yeniAd
End If
End If
End SubVB