Pagina 1 di 3 123 UltimaUltima
Risultati da 1 a 10 di 24
  1. #1
    Utente Standard L'avatar di carry
    Iscritto dal
    2008
    Messaggi
    159
    Professione
    progettista carpenteria
    Regione
    Lombardia
    Software
    Autocad-Prosteel 3d

    Form VBA anzichè DCL autolisp

    Da tempo cerco una soluzione valida per utilizzare i form VBA con il Lisp, trovando le DCL limitate, ad esempio non consentono di utilizzare le multipagine, cosa che rende il form molto più piccolo e funzionale, ma sopratutto con VBA è più facile creare i form
    Il sistema migliore probabilmente è l'utilizzo delle variabile "USERS1" ecc.
    ho creato questo esempio che funziona a meraviglia.

    Carico il file lisp Get-Form.lsp:

    (vl-load-com)
    (vl-vbaload (findfile "get-form.dvb"))
    (command "-vbarun" "get-form.dvb!main")
    (setq list-dat (eval (read (getvar "USERS2"))))(princ)(princ)(princ)
    (setq n (length list-dat)
    cont 0)
    (setq d0 (nth cont list-dat))
    (repeat (1- n)
    (setq cont (1+ cont))
    (eval (read (strcat "(setq d" (rtos cont) " " "(nth cont list-dat)" ")"))))
    (setvar "NOMUTT" 0)

    la quale routine carica il form VBA, (in allegato)
    richiede i dati e li passa a autolisp, e senza vedere nulla al commad di Autocad (contrariamente a quanto succede utilizzando "SendCommand") Autolisp legge i valori della lista contenuta in "USERS2" e crea le variabili D0 D1 D2 D3 ecc. quanti sono i dati da passare.
    Ora non conoscendo bene VBA chiedo a chi ne ha voglia e
    conosce VBA di aiutarmi a completare questo esempio con
    altri comandi quali, listbox, multipagine, bottoni, combo, flag ecc.
    Ringrazio anticipatamente.
    carry
    File Allegati File Allegati

  2. #2
    Utente Senior L'avatar di Shape
    Iscritto dal
    2007
    Messaggi
    1220
    Professione
    Disegnatore Carpenteria
    Regione
    Friuli
    Software
    Autocad, VBA-AutoLisp, Tecnometal4D, GIMP

    Predefinito

    Ho dato un'occhiata al lisp... non ciasco una cosa sola.... in che modo la variabile USERS2 si riempie con i dati del form... è una variabile user o il VBA la riempie in automatico con i dati di un form ?

    non trovo documentazione a riguardo

  3. #3
    Utente Standard L'avatar di carry
    Iscritto dal
    2008
    Messaggi
    159
    Professione
    progettista carpenteria
    Regione
    Lombardia
    Software
    Autocad-Prosteel 3d

    Predefinito

    probabilemte non hai letto il file VBA get-form.dvb nel quale ci sono
    le funzioni "SetVariabile "USERS2" che crea la lista con i vari dati del form
    ovvero:

    Private Sub Distance_Change()
    ThisDrawing.SetVariable "USERS2", "(list " & Distance.Text & " " & Angle.Text & " " & Diam.Text & ")"
    End Sub

    Private Sub Angle_Change()
    ThisDrawing.SetVariable "USERS2", "(list " & Distance.Text & " " & Angle.Text & " " & Diam.Text & ")"
    End Sub

    ecc

    Ovviamente saranno tutte uguali.
    Spero di essermi spiegato
    ciao

  4. #4
    Utente Senior L'avatar di Shape
    Iscritto dal
    2007
    Messaggi
    1220
    Professione
    Disegnatore Carpenteria
    Regione
    Friuli
    Software
    Autocad, VBA-AutoLisp, Tecnometal4D, GIMP

    Predefinito

    Citazione Originariamente Scritto da carry Visualizza Messaggio
    probabilemte non hai letto il file VBA get-form.dvb nel quale ci sono
    le funzioni "SetVariabile "USERS2" che crea la lista con i vari dati del form
    ovvero:

    Private Sub Distance_Change()
    ThisDrawing.SetVariable "USERS2", "(list " & Distance.Text & " " & Angle.Text & " " & Diam.Text & ")"
    End Sub

    Private Sub Angle_Change()
    ThisDrawing.SetVariable "USERS2", "(list " & Distance.Text & " " & Angle.Text & " " & Diam.Text & ")"
    End Sub

    ecc

    Ovviamente saranno tutte uguali.
    Spero di essermi spiegato
    ciao
    Ok scusa faccio 5 minuti di vergogna.... non avevo visto.... :o

    ok fatto

    ed ora... cos'è che ti servirebbe non ho capito bene... vuoi una mano per tradure le varie funzioni dei form ( listbox etc etc... ) per poterle passare al lisp... utilizzando le variabili user ?

  5. #5
    Utente Standard L'avatar di carry
    Iscritto dal
    2008
    Messaggi
    159
    Professione
    progettista carpenteria
    Regione
    Lombardia
    Software
    Autocad-Prosteel 3d

    Predefinito

    In questo esempio nel form VBA utilizzo soltanto "caselle di testo", mi piacerebbe
    poter utilizzare "caselle combinate", "casella di riepilogo" "caselle di controllo", "pulsanti di opzione" ecc.
    magari in un form composto da più "Pagine" o "schede"
    ciao e grazie

  6. #6
    Utente Senior L'avatar di Shape
    Iscritto dal
    2007
    Messaggi
    1220
    Professione
    Disegnatore Carpenteria
    Regione
    Friuli
    Software
    Autocad, VBA-AutoLisp, Tecnometal4D, GIMP

    Predefinito

    Citazione Originariamente Scritto da carry Visualizza Messaggio
    In questo esempio nel form VBA utilizzo soltanto "caselle di testo", mi piacerebbe
    poter utilizzare "caselle combinate", "casella di riepilogo" "caselle di controllo", "pulsanti di opzione" ecc.
    magari in un form composto da più "Pagine" o "schede"
    ciao e grazie
    Bhè a mio parere la cosa diventa un po' ingestibile con l'utilizzo di form + complessi.. non tanto per la realizzazione del programma ma per la rigidità che ha poi nel prelevare i dati....memorizzarli in quel modo per poi essere ripescati .... la vedo un arzigogolata come cosa... dipende sempre dalla quantità di informazioni...

    io lavorerei con i Dictionary... che sono praticamente delle entità invisibili dove vongono memorizzate informazioni con questa sintassi

    .SetXData XDataType, XData

    dove XDataType è tipo un'etichetta del dato memorizzato es. (altezza)

    e poi con xData si memorizza il valore.... ovviamente tutto questo è inserito in un array

    .GetXRecordData XDataType, XData

    XDataType(i)
    XData(i)


    l'idea è questa....poi è da sviluppare

    Public Sub Dati()

    On Error Resume Next

    Const DICTIONARY_NAME = "Prova"

    Set dwginfo = ThisDrawing.Dictionaries(DICTIONARY_NAME)

    On Error Resume Next

    Dim datatype(0 To 5) As Variant
    Dim data(0 To 5) As Variant

    datatype(0) = "provaet"
    data(0) = "provaval"
    datatype(1) = "provaet1"
    data(1) = "provaval1"
    datatype(2) = "provaet2"
    data(2) = "provaval2"

    dwginfo.SetXData datatype, data

    dwginfo.GetXData datatype, data

    For i = LBound(data) To UBound(data)
    Debug.Print datatype(i) & " " & data(i)
    Next

    End Sub
    Ultima modifica di Shape; 01-02-2008 alle 14: 00

  7. #7
    Utente Standard L'avatar di carry
    Iscritto dal
    2008
    Messaggi
    159
    Professione
    progettista carpenteria
    Regione
    Lombardia
    Software
    Autocad-Prosteel 3d

    Predefinito

    Non saprei come recuperare i dati nel Dictionary con autolisp.

  8. #8
    Utente Senior L'avatar di Shape
    Iscritto dal
    2007
    Messaggi
    1220
    Professione
    Disegnatore Carpenteria
    Regione
    Friuli
    Software
    Autocad, VBA-AutoLisp, Tecnometal4D, GIMP

    Predefinito

    Citazione Originariamente Scritto da carry Visualizza Messaggio
    Non saprei come recuperare i dati nel Dictionary con autolisp.
    Allora secondo me ci vuole un file temporaneo esterno....

  9. #9
    Utente Standard L'avatar di carry
    Iscritto dal
    2008
    Messaggi
    159
    Professione
    progettista carpenteria
    Regione
    Lombardia
    Software
    Autocad-Prosteel 3d

    Predefinito

    potrebbe essere una buona idea, ma non conoscendo VBA come si fa?
    esiste in rete un esempio di questo tipo
    grazie

  10. #10
    Utente Senior L'avatar di Shape
    Iscritto dal
    2007
    Messaggi
    1220
    Professione
    Disegnatore Carpenteria
    Regione
    Friuli
    Software
    Autocad, VBA-AutoLisp, Tecnometal4D, GIMP

    Predefinito

    Citazione Originariamente Scritto da carry Visualizza Messaggio
    potrebbe essere una buona idea, ma non conoscendo VBA come si fa?
    esiste in rete un esempio di questo tipo
    grazie
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("c:\test.txt", True)
    a.WriteLine("Questa è una prova.")
    a.Close

    .
    .
    .
    .
    .
    .
    .
    a.delete


  • Pagina 1 di 3 123 UltimaUltima

    Discussioni Simili

    1. FORM-Z
      Di RUGGIUNO nel forum Altri software di Modellazione - Rendering - Grafica 2D
      Risposte: 3
      Ultimo Messaggio: 21-04-2015, 14: 48
    2. Risposte: 8
      Ultimo Messaggio: 24-05-2010, 09: 28
    3. Risposte: 5
      Ultimo Messaggio: 13-04-2010, 13: 19
    4. Esempio risultati in un form VBA
      Di carry nel forum VBA per Autocad
      Risposte: 9
      Ultimo Messaggio: 11-09-2009, 17: 21

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  



    CAD3D.it - la community dei progettisti