VBA formu yerine DCL otolisp

  • Konuyu başlatan Konuyu başlatan carry
  • Başlangıç tarihi Başlangıç tarihi

carry

Guest
Uzun zamandır lisp ile vba formlarını kullanmak için geçerli bir çözüm arıyordum, örneğin çok daha küçük ve işlevsel hale getiren, ancak özellikle de vba ile formlar oluşturmak daha kolaydır.
En iyi sistem muhtemelen değişkenlerin kullanımı "users1" vs.
Bu örneği harika çalışan yarattım.

Dosya lisp almak-form.lsp:

(vl-load-com)
(vl-vbaload)
(command "-vbarun" "get-form.dvb!main")
(setq listesi-dat (eval (okuvar "users2")) (princ) (princ) (princ)
(setq n (uzun liste-dat)
cont 0)
(setq d0 (nth cont list-dat))
(repeat (1-n)
(setq cont (1+ cont)
(eval (okunuşu "(setq d) (rtos cont) " (nth cont list-dat)"))
(setvar "nomutt" 0)

Hangi rutinler vsa formunu yükler, (örneğin)
Veri gerektirir ve onları otolisp'e taşır ve otocad subparad'a herhangi bir şey görmeden (örneğin "sendcommand") otolisp, liste değerleri "kullanıcılar2" içinde yer alır ve değişkenleri yaratır. Kaç veri geçmek için.
Şimdi bunu kimin istediğini soracağım ve
Bu örneği tam olarak tamamlamama yardımcı olmak için etca'yı biliyor
Diğer komutlar, liste kutusu, çoklu sayfa, düğmeler, combo, bayrak vb.
İleride teşekkür ederiz.
taşıyabilir
 

Ekli dosyalar

lisp'e bir göz atmıştım... Bir şeyi alıntılamıyorum.... kullanıcı2 değişkeni form verileri ile nasıl doldurur... bir kullanıcı değişkeni veya bir form verileriyle otomatik olarak doldurur?

Onun hakkında herhangi bir belge bulamadım.
 
olasımte, dosya vsa get-form.dvb'i okuduğunuzda okumadınız.
Listeyi çeşitli form verileri ile yaratan "users2" değişken işlevleri
Ya da:

Özel alt mesafe_change()
Budrawing. "users2", "(list" ve mesafe.text & " & açı.text & " & Diam.text & ")"
end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end

Özel alt açı_change()
Budrawing. "users2", "(list" ve mesafe.text & " & açı.text & " & Diam.text & ")"
end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end

vs.

Elbette hepsi aynı olacak.
Umarım açıkladım
Merhaba.
 
olasımte, dosya vsa get-form.dvb'i okuduğunuzda okumadınız.
Listeyi çeşitli form verileri ile yaratan "users2" değişken işlevleri
Ya da:

Özel alt mesafe_change()
Budrawing. "users2", "(list" ve mesafe.text & " & açı.text & " & Diam.text & ")"
end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end

Özel alt açı_change()
Budrawing. "users2", "(list" ve mesafe.text & " & açı.text & " & Diam.text & ")"
end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end

vs.

Elbette hepsi aynı olacak.
Umarım açıkladım
Merhaba.
Beş dakika utanç için üzgünüm... Görmedim...:

Tamam.

Ve şimdi... İhtiyacınız olan şeyi anlamıyorum. Çeşitli form işlevlerini (listbox vs ...) çevirmek için bir el istiyorsunuz ... kullanıcı değişkenlerini kullanarak?
 
Bu örnekte, sadece "yazı kutuları" kullanıyorum, istiyorum
"kombine edilmiş vakalar", "kontrol vakaları", "option düğmeleri" vb.
Belki daha fazla "sayfa" veya "kart"tan oluşan bir formda.
Merhaba ve teşekkür ederim
 
Bu örnekte, sadece "yazı kutuları" kullanıyorum, istiyorum
"kombine edilmiş vakalar", "kontrol vakaları", "option düğmeleri" vb.
Belki daha fazla "sayfa" veya "kart"tan oluşan bir formda.
Merhaba ve teşekkür ederim
bhè benim görüşüme göre, bu şekilde geri çekilmesi ve sonra tekrarlanması gereken katılık için çok fazla değil. Herhangi bir şey olarak bir bootigogular görüyorum... her zaman bilgi miktarına bağlıdır. .

Sözcülükle çalışırdım... bu sözcülükle saklanan hemen görünmez varlıklardır.

.setxdata xdatatype, xdata

xdatatype depolanan verilerin bir etiketi gibidir. (height)

Ve sonra xdata ile değeri saklarsınız.... Tabii ki tüm bunlar bir dizide eklenir

xdatatype, xdata

xdatatype(s)
xdata(s)


Fikir budur... sonra geliştirmek.

public sub data()

Hatada bir sonraki sefere devam ediyor

Sınırlı sözlük_name = "proof"

dwginfo = budrawing.dictionaries(dictionary_name)

Hatada bir sonraki sefere devam ediyor

dim datatype(0 to 5) olarak değişken
dim tarihi (0 to 5) değişken olarak

datatype **** = "provaet"
Tarih (8) = "provaval"
datatype (1) = "provaet1"
Tarih (1) = "provaval1"
datatype(2) = "provaet2"
Tarih(2) = "provaval2"

dwginfo.setxdata datatype, date

dwginfo.getxdata datatype, date

i = lbound(data) to ubound(data)
Debug.print datatype(s) & " & data(s)
Bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki

end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end end
 
Son düzenleme:
İyi bir fikir olabilir, ama bunu nasıl yapacağını bilmiyor musunuz?
Nette bu tür bir örnek var
Teşekkür ederim.
 
İyi bir fikir olabilir, ama bunu nasıl yapacağını bilmiyor musunuz?
Nette bu tür bir örnek var
Teşekkür ederim.
fs = createobject ("scripting.filesystemobject")
= fs.createtextfile ("c:\test.txt", true)
A. writeline("questa è una kanıtı.")
a.close

.
.
.
.
.
.
.
A.delete
 
Anlamıyorum, üzgünüm, örnek formu kullanamadın, verileri almak için bir lisp rutinle tamamlayabiliyordum.
Eğer istersen, elbette.
Merhaba ve teşekkür ederim
 
la rete searcho funzione lisp che disegna un'asola, usingzando un form vsa e passando i dati al file lisp che elabora i dati e disegna l'asola.
il file lisp mi è chiaro quello che non capisco è file /a.
qualacuno lo potrebbe spiegare, bir haç i dati al lisp senza che
l'utente veda nulla.
grazie

dim vl nesne olarak
dim dbl long as double
dim dbl genişlik çift olarak
dim dbl boks çift olarak
Özel sub userform_initialize()
vl = createobject ("vl.application.16)
dbllong = getlispsym ("*slotlong")
Genişleme = cstr (dbl tall)
dbl genişlik = getlispsym ("*slot genişlik")
Genişleme = cstr (dbl genişlik)
dbl st = getlispsym ("*slot bok")
Tartışma = cstr (dbl bok)
Uzun.setfocus
Sonunda alt alt
Özel alt cmdok_ click()
dbllong = cstr (editlong.text)
Dilispsym "*slotlong", dbllong
dbl genişlik = cstr (edit genişlik.text)
Dilispsym "*slot genişlik", dbl genişlik
dbl st = cstr (editcut.text)
"*slot bok", dbl bok
Boşluk beni
Sonunda alt alt
Özel alt düzenleme uzunluk_ afterupdate()
dim giriş değeri çift olarak
Hatada değil
Katkı = cstr(editlong.text)
Eğer giriş değeri < 0 sonra
goto not count
Sonunda, eğer sona erirse
dbllong = cstr (editlong.text)
çıkış alt alt alt
Sayı değil:
msgbox "değer olumlu bir sayı olmalı!"
Genişleme = cstr (dbl tall)
Sonunda alt alt
Özel alt düzenleme genişlik_ afterupdate()
dim giriş değeri çift olarak
Hatada değil
Katkı = cstr (edit genişlik.text)
Eğer giriş değeri < 0 sonra
goto not count
Sonunda, eğer sona erirse
dbl genişlik = cstr (edit genişlik.text)
çıkış alt alt alt
Sayı değil:
msgbox "değer olumlu bir sayı olmalı!"
Genişleme = cstr (dbl genişlik)
Sonunda alt alt
Özel alt düzenleme bok_ afterupdate()
dim giriş değeri çift olarak
Hatada değil
Katkı = cstr(editcut.text)
Eğer giriş değeri < 0 sonra
goto not count
Sonunda, eğer sona erirse
Eğer giriş değeri > 360 sonra
goto not count
Sonunda, eğer sona erirse
dbl st = cstr (editcut.text)
çıkış alt alt alt
Sayı değil:
msgbox "değer pozitif olmalıdır" + vscrlf + "360'dan daha az"!
Tartışma = cstr (dbl bok)
Sonunda alt alt
Özel alt cmdcancel_Click()
"slotcancel", gerçek
Boşluk beni
Sonunda alt alt
fonksiyon getlispsym(symbolname as string) olarak
dim sym as object
Set sym = vl.activedocument. functions.item ("read")funcall(symbolname)
getlispsym = vl.activedocument. functions.item ("eval")funcall(sym)
end fonksiyonu
Sub putlispsym(symbolname as string, value as variable)
dim sym as object
Set sym = vl.activedocument. functions.item ("read")funcall(symbolname)
vl.activedocument. functions.item("set). funcall sym, değer
Sonunda alt alt

(defun c:slot (/ diff ins p1 p2 p3 p4 slotcancel)
(princ "\nenter slot özellikleri ")(princ)
(Eğer (ya da değil) (daha uzun değil) (daha büyük değil)
(progn
(setq *slotlong 2.0)
(setq *slot genişlik 1.0)
(setq *slot bok 0.0)
)
)
(vl-load-com)
(vl-vbaload (findfile "slot.dvb"))
(command "-vbarun" "slot.dvb!main")
(command "vbaunload" "slot.dvb")
(Eğer)
(If (setq ins (getpoint "\nspecify center of slot: "))
(progn
(setq diff (abs (- *slotlong *slot genişlik))
(If (> *slotlong *slot genişlik)
(progn
(setq p1 (polar ins pi (/ diff 2.0)))
(setq p1 (polar p1 (* pi 0,5) (/ *slot genişlik 2.0))
(setq p2 (polar p1 0 diff)
(setq p3 (polar p2 (* pi 1.5) *slot genişlik)
(setq p4 (polar p3 pi diff))
)
(progn
(setq p1 (polar ins (* pi 1.5) (/ diff 2.0)))
(setq p1 (polar p1 pi (/ *slotlong 2.0)))
(setq p2 (polar p1 (* pi 0,5) diff)
(setq p3 (polar p2 0 *slot Long)
(setq p4 (polar p3 (* pi 1.5) diff)
)
)
(= *slotlong *slot genişlik)
(command "_circle" ins "_d" *slot genişlik)
(command "_pline" p1 p2 "_a" p3 "_li" p4 "_a" p1 "_cl"
)
(command "_rotate" (entlast) "Ins *slot Fukushima)
)
)
)
(princ)
)
 
bhè tradurre holdto di programma sarebbe un po'cato...

com Interfaccia di etca con visuallisp vl.appllication "işitsellisp"
com turnper" e passa i valori sembra per quel canale li.

qui sotto c'è un esempio molto simile al tuo... con le note del programmatore...

ti possono essere di aiuto.


Tekrar: vsa'da otolisp rutin nasıl çalıştırılır?

Görsellisp aktifx modeli vl.tlb



dim vl nesne olarak

Sub test()

"Görünüşekkü otomasyon arayüzünü alın
vl = createobject ("vl.application.16)


‘ ‘ ‘
“Kaçlar ve listeler lisp
‘ ‘ ‘

“Lisp sembolünün değerini al.”
^ " use (setq a 1234) in lisp to set it.
a = getlispsym ("a")
Debug.print "symbol a is: " & a

‘b’ ın kullanımı ‘b’
(setq b (list 100 1.234 "string"))
"Bunu tanımlamak için lisp.
b = getlisplist("b")
Debug.print "list b içerir:"
Index = lbound(b) to ubound(b)
Debug.print b (index)
Bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki

‘ ‘ ‘
“Kaç sembolleri ve listeler oluşturun
‘ ‘ ‘

"Cesp sembolü" 100.0'a
dim değeri çift olarak
değer = 100#

"c", değer

“ listesi oluşturun
"(vba" 100 1.234)
"Ve onu lisp sembolünde sakla."
dim değerleri (0 to 2) değişken olarak
(8) = "vba"
değerler (1) = 100
(2) = 1.234

"d", değerler

Sonunda alt alt

“Bu işlev değerini döndürür
“Bir lisp sembolü.
“Kaç sembolü lisp’te ayarlanabilir:
(setq x 1234)
fonksiyon getlispsym(symbolname as string) olarak


dim sym as object

Eğer vl bir şey değilse o zaman
vl = createobject ("vl.application.1")
Sonunda, eğer sona erirse

“ lisp sembolü ‘symbolname’ olsun.
Set sym = vl.activedocument. functions.item ("read")funcall(symbolname)
getlispsym = vl.activedocument. functions.item ("eval")funcall(sym)

end fonksiyonu

“Bu işlev bir lisp listesi alır
“Ve elementlerini bire koyun
‘ varyant serisi.
“ liste gibi bir şey olabilir:
' (100 1.234 "string")
function getlisplist(symbolname as string) olarak

dim sym as object
dim listesi nesne olarak

Eğer vl bir şey değilse o zaman
vl = createobject ("vl.application.1")
Sonunda, eğer sona erirse


“ lisp sembolü ‘symbolname’ olsun.
Set sym = vl.activedocument. functions.item ("read")funcall(symbolname)
Liste = vl.activedocument. functions.item ("eval")funcall(sym)

“Bu listedeki elementlerin sayısını elde edin.
Madde = vl.activedocument. functions.item("long”)funcall(list)

redim varitems(0 to items - 1) olarak değişken

“Listeden her öğe alın.
i = 1 to items
item = vl.activedocument. functions.item ("nth")funcall(i - 1, liste)
Varitems(i - 1) = item
Bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki

getlisplist = varitems

end fonksiyonu

“Bu işlev yeni bir lisp sembolü ‘symbolname’ yaratır.
"Bu, "değer" tarafından belirtilen değeri alır.
Sub putlispsym(symbolname as string, value as variable)

dim sym as object

Eğer vl bir şey değilse o zaman
vl = createobject ("vl.application.1")
Sonunda, eğer sona erirse


Set sym = vl.activedocument. functions.item ("read")funcall(symbolname)

vl.activedocument. functions.item("set). funcall sym, değer

Sonunda alt alt

“Bu işlev yeni bir lisp listesi yaratır
“Ve onu sembolün ‘symbolname’sine tayin eder.
'değer' parametresi kapsamalıdır
“Bir dizi varyant ve bu dizi
‘ lisp listesine dönüştürülür:
"vba" 100 1.234
" listesi: ("vba" 100 1.234)
Sub putlisplist(symbolname as string, values as variable)

“İlk değeri kullanarak listeyi ilk olarak başlatır.

dim listesi nesne olarak
dim newlist as object

Eğer vl bir şey değilse o zaman
vl = createobject ("vl.application.1")
Sonunda, eğer sona erirse

Set listesi = vl.activedocument. functions.item ("list")funcall(değers ****)

"Diğer eşyaların
item = lbound(values) + 1 to ubound(values)
“Bir sonraki öğe için yeni bir liste oluşturun...
Yeni liste = vl.activedocument.functions.item ("list")funcall(values(item)
Ve nbsp; “...ve mevcut listeye bunu uygulayın.
Liste = vl.activedocument. functions.item ("append")funcall(list, yeni liste)
Bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki bir sonraki

“Yeni listeyi ‘symbolname’ye ata. ‘ ‘ ‘
dim sym as object
dim res as object
Set sym = vl.activedocument. functions.item ("read")funcall(symbolname)
Set res = vl.activedocument.functions.item ("set")funcall(sym, list)

Sonunda alt alt
 
Son düzenleme:
Bu arada size teşekkür ederim, her şeyi tercüme etmeyi beklemiyordum, zaten "vl.application"ı anlamaya başlıyorsunuz. 16" visullisp, bu uygulamayı çağırın, va'dan lisp'e kadar parametreleri geçmek mümkün, kullanıcı farkları olmadan, biraz macchinoso, umarım otodesk, lisp ile iletişim kurmak için özel bir vba işlevi yaratır.
Tüm bunlar ilginizi çekebilirse bilmiyorum...
Tekrar teşekkürler
 
vsa kullanmaya başlamadan önce de iki dili karıştırmaya çalışıyordum...

Ama sonra kendimi bir veya başkasıyla iyi bulamazdım.

İkisi de güçlü... belki de lisp'in qlc ekstra ama pecca arayüzü vardır.

Ama çok temiz bir şey bulamadım...

veya daha iyi yapabilirsiniz, ama iki el planlamak zorundasınız ve hem lisp'te hem de ne yapabileceğimi izlemek zorunda değilsiniz... Bu yüzden karıştırmaktan kaçınıyorum!

Ağda cmq, grafik arayüzünden dosyaları dcl inşa eden programlar var... Eğer hizmet edebilirseniz
 
Son düzenleme:
Dcl oluşturmak için programları biliyorum, on yıl önce lsp'te programlamaya başladım ve bu kesinlikle iki dili karıştıramadım, bu tamamen farklı bir şekilde, otodesk'un visullisp'u bu anlamda ayarlamasını umuyordum, çünkü iki dili karıştırmıyordum, bu kesinlikle iki dili karıştıramadı.
Potansiyel, parametreleri lisp'e götüren bir işlev yaratmak, her iki dilin de otocad servisinde olduğunu göz önünde bulundurunuz.
selam ve iyi iş
 
Parametreleri lisp'e götüren bir vba işlevi oluşturmak
Şu an için en iyi çözümün, vba’dan argümanları toplayan geçici bir metin dosyası oluşturmak olduğunu düşünüyorum... otolisp onları okudu ve sonra her şeyi sepetle. .

Bunu yapıyorum, lisp argümanlarına geçiş değil, hafızadan bir kez makro sona erecek olan ayarları ve argümanları saklamak için. .
 

Cevap için çok teşekkür ederim,
Bir yıl geçti ve bu soru ve taahhütlerden buçuk yıl geçti...
Sadece bu diğer istekte bir düzine gün önce aldım.http://www.cad3d.it/forum1/showthread.php?t=14482 Kim bizi biraz zaman kaybetmek istiyor ve bir örnek oluşturmaya devam ediyor
Herkes için iyi gelir.
Merhaba.
Ve tekrar teşekkürler
 

Forum İstatistikleri

Konular
58,521
Mesajlar
499,056
Kullanıcılar
104,110
Son Üye
ChristianR

Çevrimiçi Üyeler

Şu anda çevrimiçi üye yok.
Geri
Üst